Exemplos adicionais de políticas do IAM para o Session Manager
Consulte os seguintes exemplos de políticas para ajudar você a criar uma política do AWS Identity and Access Management (IAM) personalizada para que qualquer usuário do Session Manager acesse cenários os quais deseja oferecer suporte.
Tópicos
- Exemplo 1: conceder aos usuários acesso a documentos do console
- Exemplo 2: restringir o acesso a nós gerenciados específicos
- Exemplo 3: restringir o acesso com base em etiquetas
- Exemplo 4: permitir que um usuário encerre somente sessões iniciadas por ele
- Exemplo 5: permitir acesso completo (administrativo) a todas as sessões
Exemplo 1: conceder aos usuários acesso a documentos do console
É possível permitir que os usuários especifiquem um documento personalizado ao iniciarem uma sessão usando o console do Gerenciador de Sessões. O exemplo de política do IAM a seguir concede permissão para acessar documentos com nomes que começam com SessionDocument-
na Região da AWS e Conta da AWS especificadas.
Para usar essa política, substitua cada espaço reservado para recurso de exemplo
por suas próprias informações.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetDocument", "ssm:ListDocuments" ], "Resource": [ "arn:aws:ssm:
region
:account-id
:document/SessionDocument-*" ] } ] }
nota
O console do Gerenciador de Sessões oferece suporte somente a documentos de sessão que tenham um sessionType
de Standard_Stream
que sejam usados para definir as preferências da sessão. Para ter mais informações, consulte Esquema do documento de sessão.
Exemplo 2: restringir o acesso a nós gerenciados específicos
É possível criar uma política do IAM que defina a quais nós gerenciados um usuário pode se conectar usando o Gerenciador de Sessões. Por exemplo, a política a seguir concede a um usuário permissão para iniciar, encerrar e retomar as sessões em três nós específicos. A política restringe o usuário de se conectar a nós diferentes dos especificados.
nota
Para usuários federados, consulte Exemplo 4: permitir que um usuário encerre somente sessões iniciadas por ele.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE", "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] } ] }
Exemplo 3: restringir o acesso com base em etiquetas
Você pode restringir o acesso a nós gerenciados com base em etiquetas específicas. No exemplo a seguir, o usuário pode iniciar e retomar sessões (Effect: Allow, Action: ssm:StartSession,
ssm:ResumeSession
) em qualquer nó gerenciado (Resource:
arn:aws:ec2:
) com a condição de que o nó seja um Finance WebServer (region
:987654321098
:instance/*ssm:resourceTag/Finance: WebServer
). Se o usuário enviar um comando para um nó gerenciado que não está etiquetado ou que tem qualquer outra etiqueta que não seja Finance: WebServer
, o resultado do comando incluirá AccessDenied
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-2:123456789012:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Finance": [ "WebServers" ] } } }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }
Você pode criar políticas do IAM que permitem que um usuário inicie sessões para nós gerenciados que são marcados com várias etiquetas. A política a seguir permite que o usuário inicie sessões em nós gerenciados que tiverem ambas as etiquetas especificadas aplicadas a eles. Se um usuário enviar um comando para um nó gerenciado que não estiver marcado com ambas as etiquetas, o resultado do comando incluirá AccessDenied
.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:StartSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag-key1":[ "tag-value1" ], "ssm:resourceTag/tag-key2":[ "tag-value2" ] } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }
Para obter mais informações sobre como criar políticas do IAM, consulte Políticas gerenciadas e em linha no Guia do usuário do IAM. Para obter mais informações sobre a marcação de nós gerenciados, consulte Marcar recursos do Amazon EC2 com tags no Guia do usuário do Amazon EC2 (o conteúdo é aplicável a nós gerenciados do Windows e do Linux). Para obter informações sobre como reforçar seu procedimento de segurança em relação a comandos em nível raiz não autorizados em seus nós gerenciados, consulte Restringir o acesso aos comandos em nível raiz por meio do SSM Agent
Exemplo 4: permitir que um usuário encerre somente sessões iniciadas por ele
O Session Manager fornece dois métodos para controlar quais sessões um usuário federado da conta da Conta da AWS tem permissão para encerrar.
-
Use a variável
{aws:userid}
em uma política de permissões do AWS Identity and Access Management (IAM). Os usuários federados podem encerrar apenas as sessões que eles iniciaram. Para usuários não federados, use o Método 1. Para usuários federados, use o Método 2. -
Use as tags fornecidas pelas tags da AWS em uma política de permissões do IAM. Na política, inclua uma condição que permita que os usuários encerrem somente as sessões marcadas com as tags específicas fornecidas pela AWS. Esse método funciona para todas as contas, incluindo aquelas que usam IDs federados para conceder acesso à AWS.
Método 1: Conceder privilégios TerminateSession usando a variável {aws:username}
A política do IAM a seguir permite que um usuário exiba os IDs de todas as sessões na sua conta. No entanto, os usuários podem interagir com os nós gerenciados apenas por meio das sessões que eles iniciaram. Um usuário que teve a política a seguir atribuída não poderá se conectar nem encerrar sessões de outros usuários. A política usa a variável {aws:username}
para atingir isso.
nota
Esse método não funciona para contas que usam IDs federados para conceder acesso à AWS.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:DescribeSessions" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [ "ssm:TerminateSession" ], "Effect": "Allow", "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }
Método 2: Conceder privilégios TerminateSession usando tags fornecidas pela AWS
É possível controlar quais sessões um usuário poderá encerrar, incluindo variáveis de chave de etiqueta condicional em uma política do IAM. A condição determina que o usuário só pode encerrar sessões marcadas com uma ou ambas as variáveis de chave de tag específicas e um valor especificado.
Quando um usuário em sua Conta da AWS inicia uma sessão, o Session Manager aplica duas tags de recurso a ela. A primeira tag de recurso é aws:ssmmessages:target-id
, com a qual você especifica o ID do destino que o usuário tem permissão para encerrar. A outra tag de recurso é aws:ssmmessages:session-id
, com um valor no formato de
.role-id
:caller-specified-role-name
nota
O Session Manager não oferece suporte a tags personalizadas para essa política de controle de acesso do IAM. Use as tags de recurso fornecidas pela AWS, descritas abaixo.
-
aws:ssmmessages:target-id
-
Com essa chave de etiqueta, inclua o ID do nó gerenciado como o valor na política. No bloco de política a seguir, a instrução da condição permite que um usuário encerre apenas o nó i-02573cafcfEXAMPLE.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "i-02573cafcfEXAMPLE" ] } } } ] }
Se o usuário tentar encerrar uma sessão para a qual não recebeu a permissão
TerminateSession
, ele receberá um erroAccessDeniedException
. -
aws:ssmmessages:session-id
-
Essa chave de tag inclui uma variável para o ID de sessão como o valor na solicitação para iniciar uma sessão.
O exemplo a seguir mostra uma política para casos em que o tipo de chamador é
User
. O valor fornecido emaws:ssmmessages:session-id
é o ID do usuário. Neste exemplo,AIDIODR4TAW7CSEXAMPLE
representa o ID de um usuário na sua conta da Conta da AWS. Para recuperar o ID de um usuário na sua Conta da AWS, use o comandoget-user
do IAM. Para obter mais informações, consulte get-user na seção AWS Identity and Access Management do Manual do usuário do IAM{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "AIDIODR4TAW7CSEXAMPLE" ] } } } ] }
O exemplo a seguir mostra uma política para casos em que o tipo de chamador é
AssumedRole
. Você pode usar a variável{aws:userid}
para o valor fornecido paraaws:ssmmessages:session-id
. Como alternativa, você pode codificar um ID de função para o valor fornecido paraaws:ssmmessages:session-id
. Se você codificar um ID de função, deverá fornecer o valor no formato
. Por exemplo,role-id
:caller-specified-role-name
AIDIODR4TAW7CSEXAMPLE:MyRole
.Importante
Para que as tags do sistema sejam aplicadas, o ID de função fornecido pode conter apenas os seguintes caracteres: letras Unicode, 0–9, espaço,
_
,.
,:
,/
,=
,+
,-
,@
e\
.Para recuperar o ID de uma função na sua Conta da AWS, use o comando
get-caller-identity
. Para obter informações, consulte get-caller-identity na Referência de comandos da AWS CLI.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "${aws:userid}*" ] } } } ] }
Se um usuário tentar encerrar uma sessão para a qual não recebeu a permissão
TerminateSession
, ele receberá um erroAccessDeniedException
. aws:ssmmessages:target-id
eaws:ssmmessages:session-id
-
Você também pode criar políticas do IAM que permitem que um usuário encerre sessões marcadas com ambas as tags do sistema, conforme este exemplo.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:TerminateSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/aws:ssmmessages:target-id":[ "i-02573cafcfEXAMPLE" ], "ssm:resourceTag/aws:ssmmessages:session-id":[ "${aws:userid}*" ] } } } ] }
Exemplo 5: permitir acesso completo (administrativo) a todas as sessões
A seguinte política do IAM permite que um usuário interaja totalmente com todos os nós gerenciados e todas as sessões criadas por todos os usuários para todos os nós. Ela deve ser concedida somente a um administrador que precisa de controle total sobre as atividades do Session Manager da sua organização.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:StartSession", "ssm:TerminateSession", "ssm:ResumeSession", "ssm:DescribeSessions", "ssm:GetConnectionStatus" ], "Effect": "Allow", "Resource": [ "*" ] } ] }