Conceder permissões do IAM para o EC2 Instance Connect - Amazon Elastic Compute Cloud

Conceder permissões do IAM para o EC2 Instance Connect

Para se conectar a uma instância usando o EC2 Instance Connect, é necessário criar uma política do IAM que conceda permissões aos usuários para as ações e condições a seguir:

  • Ação ec2-instance-connect:SendSSHPublicKey: concede permissão para enviar por push a chave pública a uma instância.

  • Condição ec2:osuser: especifica o nome do usuário do sistema operacional que pode enviar por push a chave pública a uma instância. Use o nome de usuário padrão da AMI que você usou para iniciar a instância. O nome de usuário padrão para o AL2023 e o Amazon Linux 2 é ec2-user e, para o Ubuntu, é ubuntu.

  • Ação ec2:DescribeInstances: exigida ao usar o console do EC2, pois o wrapper chama essa ação. Os usuários talvez já tenham permissão para chamar essa ação a partir de outra política.

Considere restringir o acesso a instâncias do EC2 específicas. Caso contrário, todas as entidades principais do IAM com permissão para ação ec2-instance-connect:SendSSHPublicKey poderão conectar a todas as instâncias do EC2. É possível restringir o acesso especificando ARNs de recursos ou usando tags de recurso como chaves de condição.

Para obter mais informações, consulte Ações, recursos e chaves de condição para o Amazon EC2 Instance Connect.

Para obter informações sobre a criação de políticas do IAM, consulte Criação de políticas do IAM, no Manual do usuário do IAM.

Permitir que os usuários conectem-se a instâncias específicas

A política do IAM a seguir concede permissão para se conectar a instâncias específicas, identificadas por seus ARNs de recursos.

No exemplo de política do IAM a seguir, as ações e condições abaixo são especificadas:

  • A ação ec2-instance-connect:SendSSHPublicKey concede aos usuários permissão para se conectar a duas instâncias, especificadas pelos ARNs do recurso. Para conceder aos usuários permissão para se conectar a todas as instâncias do EC2, substitua os ARNs do recurso pelo curinga *.

  • A condição ec2:osuser concede permissão para se conectar às instâncias somente se o nome do ami-user for especificado durante a conexão.

  • A ação ec2:DescribeInstances é especificada para conceder permissão aos usuários que usarão o console para se conectar às suas instâncias. Caso seus usuários utilizem somente um cliente SSH para se conectar às suas instâncias, é possível omitir ec2:DescribeInstances. Observe que as ações da API ec2:Describe* não oferecem suporte a permissões no nível do recurso. Portanto, o caractere curinga * é necessário no elemento Resource.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": [ "arn:aws:ec2:region:account-id:instance/i-1234567890abcdef0", "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" ], "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }

Permitir que os usuários conectem-se a instâncias com tags específicas

O controle de acesso por atributo (ABAC) é uma estratégia de autorização que define permissões de acordo com tags que podem ser anexadas a usuários e a recursos da AWS. É possível usar tags de recurso para controlar o acesso a uma instância. Para obter mais informações sobre como usar tags para controlar o acesso aos recursos da AWS, consulte Controle do acesso aos recursos da AWS no Guia do usuário do IAM.

No exemplo de política do IAM a seguir, a ação ec2-instance-connect:SendSSHPublicKey concede aos usuários permissão para se conectar a qualquer instância (indicada pelo curinga * no ARN do recurso), desde que a instância tenha uma tag de recurso com key=tag-key e value=tag-value.

A ação ec2:DescribeInstances é especificada para conceder permissão aos usuários que usarão o console para se conectar às suas instâncias. Caso seus usuários utilizem somente um cliente SSH para se conectar às suas instâncias, é possível omitir ec2:DescribeInstances. Observe que as ações da API ec2:Describe* não oferecem suporte a permissões no nível do recurso. Portanto, o caractere curinga * é necessário no elemento Resource.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/tag-key": "tag-value" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }