Fase 5: (facoltativo) limitazione dell'accesso ai comandi in una sessione - AWS Systems Manager

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fase 5: (facoltativo) limitazione dell'accesso ai comandi in una sessione

Puoi limitare i comandi che un utente può eseguire in una sessione di AWS Systems Manager Session Manager utilizzando un documento AWS Systems Manager personalizzato di tipo Session (SSM). Nel documento, puoi definire il comando che viene eseguito quando l'utente avvia una sessione e i parametri che l’utente può fornire al comando. Il documento Session schemaVersion deve essere 1.0 e il sessionType del documento deve essere InteractiveCommands. Puoi quindi creare policy AWS Identity and Access Management (IAM) che consentano agli utenti di accedere solo ai documenti Session definiti. Per ulteriori informazioni sull'utilizzo delle policy IAM per limitare l'accesso ai comandi in una sessione, consulta Esempi di policy IAM per comandi interattivi.

I documenti con sessionType pari a InteractiveCommands sono supportati solo per le sessioni avviate dall’AWS Command Line Interface (AWS CLI). L'utente fornisce il nome del documento personalizzato come valore del parametro --document-name e specifica tutti i valori dei parametri del comando utilizzando l'opzione --parameters. Per ulteriori informazioni sull'esecuzione di comandi interattivi, consulta Avvio di una sessione (comandi interattivi e non interattivi).

Utilizza la procedura seguente per creare un documento SSM di tipo Session personalizzato che definisce il comando che un utente può eseguire.

Limitare l'accesso ai comandi in una sessione (console)

Per limitare i comandi che un utente può eseguire in una sessione Session Manager (console)
  1. Aprire la console di AWS Systems Manager all'indirizzo https://console.aws.amazon.com/systems-manager/.

  2. Nel pannello di navigazione, scegliere Documents (Documenti).

  3. Scegliere Create command or session (Crea comando o sessione).

  4. Per Name (Nome), inserire un nome descrittivo per il documento.

  5. Per Document type (Tipo documento), scegliere Session document (Documento di sessione).

  6. Immettere il contenuto del documento che definisce il comando che un utente può eseguire in una sessione Session Manager utilizzando JSON o YAML, come illustrato nell'esempio seguente.

    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. Scegliere Create document (Crea documento).

Limitare l'accesso ai comandi in una sessione (riga di comando)

Prima di iniziare

Se non lo hai ancora fatto, installa e configura il AWS Command Line Interface (AWS CLI) o il AWS Tools for PowerShell. Per informazioni, consulta le pagine Installazione o aggiornamento della versione più recente di AWS CLI e Installazione di AWS Tools for PowerShell.

Per limitare i comandi che un utente può eseguire in una sessione Session Manager (riga di comando)
  1. Creare un file JSON o YAML per il contenuto del documento che definisce il comando che un utente può eseguire in una sessione Session Manager, come illustrato nell'esempio seguente.

    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. Eseguire i comandi seguenti per creare un documento SSM utilizzando il contenuto che definisce il comando che un utente può eseguire in una sessione Session Manager.

    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"

Parametri di comando interattivi e la AWS CLI

È possibile fornire parametri di comando interattivi quando si utilizza la AWS CLI. A seconda del sistema operativo (OS) del computer client utilizzato per connettersi a nodi gestiti con la AWS CLI, la sintassi fornita per i comandi che contengono caratteri speciali o di escape potrebbe differire. Gli esempi seguenti mostrano alcune opzioni di fornitura dei parametri di comando quando si utilizza la AWS CLI e come gestire caratteri speciali o di escape.

E' possibile fare riferimento ai parametri memorizzati in Parameter Store nella AWS CLI per i parametri di comando come mostrato nell'esempio seguente.

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'esempio seguente mostra come puoi utilizzare una sintassi abbreviata con la AWS CLI per passare i parametri.

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"

Puoi anche fornire parametri facoltativi in JSON , come mostrato nel seguente esempio.

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"]}'

I parametri possono essere memorizzati in un file JSON e forniti alla AWS CLI come mostrato nell'esempio seguente. Per ulteriori informazioni sull'utilizzo di parametri AWS CLI da un file, consulta Caricamento di parametri AWS CLI da un file nella Guida per l'utente di AWS Command Line Interface.

{ "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

Puoi anche generare uno scheletro AWS CLI da un file di input JSON come mostrato nell'esempio seguente. Per ulteriori informazioni, su come generare scheletri AWS CLI consulta ‭‬Generazione di scheletro AWS CLI e parametri di input da un file di input JSON o YAML‭ nella Guida per l'utente di AWS Command Line Interface‭.

{ "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

Per eseguire l'escape dei caratteri all'interno delle virgolette, è necessario aggiungere ulteriori barre rovesciate ai caratteri di escape, come illustrato nell'esempio seguente.

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\""]}'

Per ulteriori informazioni sulla citazione con parametri di comando nella AWS CLI, consulta Utilizzo di virgolette con stringhe nella AWS CLI nella Guida per l'utente della AWS Command Line Interface.

Esempi di policy IAM per comandi interattivi

Puoi creare policy IAM che consentono agli utenti di accedere solo ai documenti Session definiti. Ciò limita i comandi che un utente può eseguire in una sessione Session Manager ai soli comandi definiti nei documenti SSM di tipo Session personalizzati.

Consentire a un utente di eseguire un comando interattivo su un singolo nodo
{ "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" } } } ] }
Consentire a un utente di eseguire un comando interattivo su tutti i nodi gestiti
{ "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" } } } ] }
Consentire a un utente di eseguire più comandi interattivi su tutti i nodi gestiti
{ "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" } } } ] }