Etapa 5: (Opcional) Restringir o acesso a comandos em uma sessão - AWS Systems Manager

Etapa 5: (Opcional) Restringir o acesso a comandos em uma sessão

Você pode restringir os comandos que um usuário pode executar em uma sessão do AWS Systems Manager Session Manager usando um documento do AWS Systems Manager (SSM) do tipo Session personalizado. No documento, defina o comando que é executado quando o usuário inicia uma sessão e os parâmetros que o usuário pode fornecer ao comando. A schemaVersion do documento do Session deve ser 1.0 e o sessionType do documento deve ser InteractiveCommands. É possível criar políticas do AWS Identity and Access Management (IAM) que permitem que os usuários acessem apenas os documentos do Session definidos por você. Para obter mais informações sobre como usar políticas do IAM para restringir o acesso a comandos em uma sessão, consulte Exemplos de políticas do IAM para comandos interativos.

Documentos com o sessionType de InteractiveCommands são compatíveis somente com sessões iniciadas pela AWS Command Line Interface (AWS CLI). O usuário fornece o nome do documento personalizado como o valor do parâmetro --document-name e fornece qualquer valor de parâmetro do comando usando a opção --parameters. Para obter mais informações sobre como executar comandos interativos, consulte Iniciar uma sessão (comandos interativos e não interativos).

Use o procedimento a seguir para criar um documento do SSM tipo Session personalizado que define o comando que um usuário tem permissão para executar.

Restringir acesso a comandos em uma sessão (console)

Para restringir os comandos que um usuário pode executar em uma sessão do Session Manager (console)
  1. Abra o console AWS Systems Manager em https://console.aws.amazon.com/systems-manager/.

  2. No painel de navegação, escolha Documents.

  3. Escolha Create command or session (Criar comando ou sessão).

  4. Em Name (Nome), insira um nome descritivo para o documento.

  5. Em Document Type (Tipo de documento), escolha Session document (Documento de sessão).

  6. Insira o conteúdo do documento que define o comando que um usuário pode executar em uma sessão do Session Manager usando JSON ou YAML, conforme mostrado no exemplo a seguir.

    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. Escolha Criar documento.

Restringir acesso a comandos em uma sessão (linha de comando)

Antes de começar

Caso ainda não tenha feito isso, instale e configure a AWS Command Line Interface (AWS CLI) ou o AWS Tools for PowerShell. Para obter informações, consulte Instalar ou atualizar a versão mais recente da AWS CLI e Instalar o AWS Tools for PowerShell.

Para restringir os comandos que um usuário pode executar em uma sessão do Session Manager (linha de comando)
  1. Crie um arquivo JSON ou YAML para o conteúdo do documento que define o comando que um usuário pode executar em uma sessão do Session Manager, conforme mostrado no exemplo a seguir.

    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. Execute os seguintes comandos para criar um documento do SSM usando seu conteúdo que define o comando que um usuário pode executar em uma sessão do 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"

Parâmetros de comando interativos e a AWS CLI

Usando a AWS CLI, os parâmetros de comandos interativos podem ser fornecidos de várias maneiras. Dependendo do sistema operacional (SO) da máquina cliente que você usa para se conectar aos nós gerenciados com a AWS CLI, a sintaxe fornecida para comandos que contêm caracteres especiais ou de escape poderá ser diferente. Os exemplos a seguir mostram algumas das maneiras de fornecer parâmetros de comandos ao usar a AWS CLI e como lidar com caracteres especiais ou de escape.

Os parâmetros armazenados em Parameter Store podem ser referenciados na AWS CLI para seus parâmetros de comandos conforme mostrado no exemplo a seguir.

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

O exemplo a seguir mostra como é possível usar uma sintaxe abreviada com a AWS CLI para passar parâmetros.

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"

Você também pode fornecer parâmetros em JSON como mostrado no exemplo a seguir.

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

Os parâmetros também podem ser armazenados em um arquivo JSON e fornecidos para a AWS CLI como mostrado no exemplo a seguir. Para obter mais informações sobre como usar parâmetros da AWS CLI em um arquivo, consulte Carregar parâmetros da AWS CLI em um arquivo no Manual do usuário do 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

Também é possível gerar um esqueleto da AWS CLI de um arquivo de entrada JSON conforme mostrado no exemplo a seguir. Para obter mais informações sobre a geração de esqueletos da AWS CLI com base em arquivos de entrada JSON, consulte Gerar um esqueleto da AWS CLI e parâmetros de entrada usando um arquivo de entrada JSON ou YAML no Guia do usuário da 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

Para escapar caracteres dentro das aspas, adicione barras invertidas adicionais aos caracteres de escape, conforme mostrado no exemplo a seguir.

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

Para obter informações sobre o uso de aspas com parâmetros formatados na AWS CLI, consulte Usar aspas com strings na AWS CLI, no Manual do usuário da AWS Command Line Interface.

Exemplos de políticas do IAM para comandos interativos

Você pode criar políticas do IAM que permitem que os usuários acessem somente os documentos de Session definidos por você. Isso restringe os comandos que um usuário pode executar em uma sessão do Session Manager apenas aos comandos definidos em seus documentos personalizados do SSM do tipo Session.

Permitir que um usuário execute um comando interativo em um único nó gerenciado
{ "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" } } } ] }
Permitir que um usuário execute um comando interativo em todos os nós gerenciados
{ "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" } } } ] }
Permitir que um usuário execute vários comandos interativos em todos os nós gerenciados
{ "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" } } } ] }