

# Conceder permissões do IAM para o EC2 Instance Connect
<a name="ec2-instance-connect-configure-IAM-role"></a>

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.
+ Ação `ec2:DescribeVpcs`: necessário ao se conectar a um endereço IPv6.

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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html#amazonec2instanceconnect-policy-keys).

Para obter mais informações, consulte [Ações, recursos e chaves de condição para o Amazon EC2 Instance Connect](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html).

Para obter informações sobre a criação de políticas do IAM, consulte [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html), no *Manual do usuário do IAM*.

## Permitir que os usuários conectem-se a instâncias específicas
<a name="eic-permissions-allow-users-to-connect-to-specific-instances"></a>

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`.
+ A ação `ec2:DescribeVpcs` é especificada para conceder permissão aos usuários que usarão o console para se conectar às suas instâncias usando um endereço IPv6. Se seus usuários usarão somente um endereço IPv4, você pode omitir `ec2:DescribeVpcs`. 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`.

------
#### [ JSON ]

****  

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

------

## Permitir que os usuários conectem-se a instâncias com tags específicas
<a name="eic-permissions-allow-users-to-connect-to-instances-with-specific-tags"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources) 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 usem somente um cliente SSH para se conectarem às suas instâncias, será 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`.

A ação `ec2:DescribeVpcs` é especificada para conceder permissão aos usuários que usarão o console para se conectar às suas instâncias usando um endereço IPv6. Se seus usuários usarão somente um endereço IPv4, você pode omitir `ec2:DescribeVpcs`. 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`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey", 
            "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/{{tag-key}}": "{{tag-value}}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------