Étape 5 : (Facultatif) Restreindre l'accès aux commandes dans une session - AWS Systems Manager

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Étape 5 : (Facultatif) Restreindre l'accès aux commandes dans une session

Vous pouvez restreindre les commandes qu'un utilisateur peut exécuter dans unAWS Systems Manager Session Manageren créant une session personnaliséeSessiontypeAWS Systems Manager(SSM). Dans le contenu du document, définissez la commande qui est exécutée lorsque l'utilisateur démarre une session et les paramètres qu'il peut fournir à la commande. Ces commandes sont également appelées « commandes interactives ». LeSessiondocumentschemaVersionvaleur 1.0, et lesessionTypedu document doit êtreInteractiveCommands. Vous pouvez alors créerAWS Identity and Access Management(IAM) qui autorisent les utilisateurs à accéder uniquement aux stratégiesSessiondocuments que vous définissez. Pour de plus amples informations sur l'utilisation des stratégies IAM pour restreindre l'accès aux commandes dans une session, consultezExemples de stratégie IAM pour les commandes interactives.

PersonnaliséeSessionLes documents SSM ne peuvent être utilisés que lors du démarrage de sessions à partir duAWS Command Line Interface(AWS CLI). L'utilisateur spécifie le document autorisé dans l'option --document-name de la commande start-session et fournit toutes les valeurs de paramètre nécessaires pour la commande dans l'option --parameters. Pour de plus amples informations sur l'exécution des commandes interactives, veuillez consulter Démarrage d'une session (commandes interactives et non interactives).

La procédure suivante explique comment créer un fichier personnaliséSessionType de document SSM qui définit la commande qu'un utilisateur est autorisé à exécuter.

Restreindre l'accès aux commandes dans une session (console)

Pour restreindre les commandes qu'un utilisateur peut exécuter dans une session Session Manager (console)

  1. Ouvrez la console AWS Systems Manager à l'adresse https://console.aws.amazon.com/systems-manager/.

  2. Dans le panneau de navigation, cliquez sur Documents.

  3. Choisissez Create command or session (Créer une commande ou une session).

  4. PourNom, saisissez un nom descriptif pour le document.

  5. Pour Document type (Type de document), choisissez Session document (Document de session).

  6. Entrez le contenu de votre document qui définit la commande qu'un utilisateur peut exécuter dans une session Session Manager au format JSON ou YAML, comme illustré dans l'exemple suivant.

    YAML
    --- schemaVersion: '1.0' description: Document to view a log file on a Linux instance sessionType: InteractiveCommands parameters: logpath: type: String description: The log file path to read. default: "/var/log/amazon/ssm/amazon-ssm-agent.log" allowedPattern: "^[a-zA-Z0-9-_/]+(.log)$" properties: linux: commands: "tail -f {{ logpath }}" runAsElevated: true
    JSON
    { "schemaVersion": "1.0", "description": "Document to view a log file on a Linux instance", "sessionType": "InteractiveCommands", "parameters": { "logpath": { "type": "String", "description": "The log file path to read.", "default": "/var/log/amazon/ssm/amazon-ssm-agent.log", "allowedPattern": "^[a-zA-Z0-9-_/]+(.log)$" } }, "properties": { "linux": { "commands": "tail -f {{ logpath }}", "runAsElevated": true } } }
  7. Choisissez Créer un document.

Restreindre l'accès aux commandes dans une session (ligne de commande)

Avant de commencer

Si vous ne l'avez pas déjà fait, installez et configurez leAWS Command Line Interface(AWS CLI) ou leAWS Tools for PowerShell. Pour plus d'informations, consultezInstaller ou mettre à niveauAWSOutils de ligne de commande.

Pour restreindre les commandes qu'un utilisateur peut exécuter dans une session Session Manager (ligne de commande)

  1. Créez un fichier JSON ou YAML pour le contenu de votre document qui définit la commande qu'un utilisateur peut exécuter dans une session Session Manager, comme illustré dans l'exemple suivant.

    YAML
    --- schemaVersion: '1.0' description: Document to view a log file on a Linux instance sessionType: InteractiveCommands parameters: logpath: type: String description: The log file path to read. default: "/var/log/amazon/ssm/amazon-ssm-agent.log" allowedPattern: "^[a-zA-Z0-9-_/]+(.log)$" properties: linux: commands: "tail -f {{ logpath }}" runAsElevated: true
    JSON
    { "schemaVersion": "1.0", "description": "Document to view a log file on a Linux instance", "sessionType": "InteractiveCommands", "parameters": { "logpath": { "type": "String", "description": "The log file path to read.", "default": "/var/log/amazon/ssm/amazon-ssm-agent.log", "allowedPattern": "^[a-zA-Z0-9-_/]+(.log)$" } }, "properties": { "linux": { "commands": "tail -f {{ logpath }}", "runAsElevated": true } } }
  2. Exécutez les commandes suivantes pour créer un document SSM à l'aide de votre contenu qui définit la commande qu'un utilisateur peut exécuter dans unSession ManagerSession.

    Linux & macOS
    aws ssm create-document \ --content file://path/to/file/documentContent.json \ --name "exampleAllowedSessionDocument" \ --document-type "Session"
    Windows
    aws ssm create-document ^ --content file://C:\path\to\file\documentContent.json ^ --name "exampleAllowedSessionDocument" ^ --document-type "Session"
    PowerShell
    $json = Get-Content -Path "C:\path\to\file\documentContent.json" | Out-String New-SSMDocument ` -Content $json ` -Name "exampleAllowedSessionDocument" ` -DocumentType "Session"

Les paramètres de commande interactifs et le paramètreAWS CLI

Il existe différentes façons de fournir des paramètres de commande interactifs lorsque vous utilisez l'AWS CLI. Selon le système d'exploitation (OS) de votre ordinateur client que vous utilisez pour vous connecter à des instances à l'aide de l'outilAWS CLI, la syntaxe que vous fournissez pour les commandes qui contiennent des caractères spéciaux ou des caractères d'échappement peut différer. Les exemples suivants illustrent les différentes façons de fournir les paramètres de commande lors de l'utilisation de l'outilAWS CLI, et comment gérer les caractères spéciaux ou d'échappement.

Paramètres stockés dansParameter Storepeut être référencé dans leAWS CLIPour vos paramètres de commande, comme illustré dans l'exemple suivant.

Linux & macOS
aws ssm start-session \ --target instance-id \ --document-name MyInteractiveCommandDocument \ --parameters '{"command":["{{ssm:mycommand}}"]}'
Windows
aws ssm start-session ^ --target instance-id ^ --document-name MyInteractiveCommandDocument ^ --parameters '{"command":["{{ssm:mycommand}}"]}'

L'exemple suivant montre comment utiliser une syntaxe abrégée avec l'AWS CLIpour passer les paramètres.

Linux & macOS
aws ssm start-session \ --target instance-id \ --document-name MyInteractiveCommandDocument \ --parameters command="ifconfig"
Windows
aws ssm start-session ^ --target instance-id ^ --document-name MyInteractiveCommandDocument ^ --parameters command="ipconfig"

Vous pouvez également fournir des paramètres dans JSON, comme l'illustre l'exemple suivant.

Linux & macOS
aws ssm start-session \ --target instance-id \ --document-name MyInteractiveCommandDocument \ --parameters '{"command":["ifconfig"]}'
Windows
aws ssm start-session ^ --target instance-id ^ --document-name MyInteractiveCommandDocument ^ --parameters '{"command":["ipconfig"]}'

Il est également possible de stocker les paramètres dans un fichier JSON et de fournir à l'outilAWS CLIVoir l'illustration dans l'exemple suivant. Pour plus d'informations sur l'utilisationAWS CLIParamètres d'à partir d'un fichier, consultezchargement en coursAWS CLIParamètres d'un fichierdans leAWS Command Line InterfaceGuide de l'utilisateur.

{ "command": [ "my command" ] }
Linux & macOS
aws ssm start-session \ --target instance-id \ --document-name MyInteractiveCommandDocument \ --parameters file://complete/path/to/file/parameters.json
Windows
aws ssm start-session ^ --target instance-id ^ --document-name MyInteractiveCommandDocument ^ --parameters file://complete/path/to/file/parameters.json

Vous pouvez également générer unAWS CLISquelette à partir d'un fichier d'entrée JSON comme illustré dans l'exemple suivant. Pour plus d'informations sur la générationAWS CLIsquelettes à partir de fichiers d'entrée JSON, voirGénération deAWS CLISquelette et les paramètres d'entrée à partir d'un fichier d'entrée JSON ou YAMLdans leAWS Command Line InterfaceGuide de l'utilisateur.

{ "Target": "instance-id", "DocumentName": "MyInteractiveCommandDocument", "Parameters": { "command": [ "my command" ] } }
Linux & macOS
aws ssm start-session \ --cli-input-json file://complete/path/to/file/parameters.json
Windows
aws ssm start-session ^ --cli-input-json file://complete/path/to/file/parameters.json

Pour échapper aux caractères entre guillemets, vous devez ajouter des barres obliques inverses supplémentaires aux caractères d'échappement, comme illustré dans l'exemple suivant.

Linux & macOS
aws ssm start-session \ --target instance-id \ --document-name MyInteractiveCommandDocument \ --parameters '{"command":["printf \"abc\\\\tdef\""]}'
Windows
aws ssm start-session ^ --target instance-id ^ --document-name MyInteractiveCommandDocument ^ --parameters '{"command":["printf \"abc\\\\tdef\""]}'

Pour plus d'informations sur l'utilisation de guillemets avec les paramètres de commande dans l'AWS CLI, voirUtilisation de guillemets avec des chaînes dans l'AWS CLIdans leAWS Command Line InterfaceGuide de l'utilisateur.

Exemples de stratégie IAM pour les commandes interactives

Vous pouvez créer des stratégies IAM qui autorise les utilisateurs à accéder uniquement à l'Sessiondocuments que vous définissez. Cela limite les commandes qu'un utilisateur peut exécuter dans unSession Managersur uniquement les commandes définies dans votreSessionDocuments SSM.

Autoriser un utilisateur à exécuter une commande interactive sur une seule instance
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:region:987654321098:instance/i-02573cafcfEXAMPLE", "arn:aws:ssm:region:987654321098:document/exampleAllowedSessionDocument" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }
Autoriser un utilisateur à exécuter une commande interactive sur toutes les instances
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:us-west-2:987654321098:instance/*", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }
Autoriser un utilisateur à exécuter plusieurs commandes interactives sur toutes les instances
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:us-west-2:987654321098:instance/*", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument2" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }