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

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

Puoi limitare i comandi che un utente può eseguire in una sessione AWS Systems Manager Session Managercreando un documento Session personalizzato di tipo AWS Systems Manager (SSM). Nel contenuto del documento, puoi definire quale comando viene eseguito quando l'utente avvia una sessione e quali parametri può fornire al comando. Questi sono anche indicati come comandi interattivi. Il documento Session schemaVersion deve essere 1.0 e il sessionType del documento deve essere InteractiveCommands. È quindi possibile 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 SSM di tipo Session personalizzati possono essere utilizzati solo quando si avviano sessioni dal AWS Command Line Interface (AWS CLI). L'utente specifica il documento consentito nell'opzione --document-name per il comando start-session e fornisce tutti i valori dei parametri necessari per il comando nell'opzione --parameters. Per ulteriori informazioni sull'esecuzione di comandi interattivi, consulta Avvio di una sessione (comandi interattivi e non interattivi).

Nella procedura seguente viene descritto come 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. Apri la console AWS Systems Manager all'indirizzo https://console.aws.amazon.com/systems-manager/.

  2. Nel riquadro 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 .Installazione o aggiornamento degli strumenti a riga di comando AWS.

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 istanze 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 una singola istanza
{ "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 tutte le istanze
{ "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 tutte le istanze
{ "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" } } } ] }