

# Função do IAM de instância de contêiner do Amazon ECS
<a name="instance_IAM_role"></a>

As instâncias de contêiner do Amazon ECS, incluindo instâncias do Amazon EC2 e externas, executam o agente de contêiner do Amazon ECS e exigem uma função do IAM para o serviço saber que o agente pertence a você. Para poder iniciar instâncias de contêiner e registrá-las em um cluster, você deve criar uma função do IAM para as instâncias de contêiner usarem. A função é criada na conta que você usa para fazer login no console ou executar os comandos da AWS CLI

**Importante**  
Se você estiver registrando instâncias externas em seu cluster, a função do IAM usada também exigirá permissões do Systems Manager. Para obter mais informações, consulte [Perfil do IAM para o Amazon ECS Anywhere](iam-role-ecsanywhere.md).

O Amazon ECS fornece a política `AmazonEC2ContainerServiceforEC2Role` gerenciada do IAM que contém as permissões necessárias para usar o conjunto completo de recursos do Amazon ECS. Essa política gerenciada pode ser anexada a uma função do IAM e associada às instâncias de contêiner. Como alternativa, você pode usar a política gerenciada como guia quando criar uma política personalizada para ser usada. A função de instância de contêiner fornece permissões necessárias para que o agente de contêiner do Amazon ECS e o daemon do Docker chamem APIs da AWS em seu nome. Para obter mais informações sobre a política gerenciada, consulte [AmazonEC2ContainerServiceforEC2Role](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role).

## Criar o perfil da instância de contêiner
<a name="instance-iam-role-create"></a>

**Importante**  
Se você estiver registrando instâncias externas em seu cluster, consulte [Perfil do IAM para o Amazon ECS Anywhere](iam-role-ecsanywhere.md).

É possível criar manualmente o perfil e anexar a política do IAM gerenciada para instâncias de contêiner para permitir que o Amazon ECS adicione permissões para recursos e aprimoramentos futuros à medida que sejam introduzidos. Use o procedimento a seguir para anexar a política do IAM gerenciada, se necessário.

------
#### [ Console de gerenciamento da AWS ]

**Para criar um perfil de serviço do Elastic Container Service (console do IAM)**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação do console do IAM, escolha **Perfis** e, em seguida, **Criar perfil**.

1. Em **Tipo de entidade confiável**, escolha **AWS service (Serviço da AWS)**.

1. Em **Serviço ou caso de uso**, escolha **Elastic Container Service** e selecione o caso de uso **Perfil do EC2 do Elastic Container Service**.

1. Escolha **Próximo**.

1. Na seção **Políticas de permissões**, verifique se a política **AmazonEC2ContainerServiceforEC2Role** está selecionada.
**Importante**  
A política gerenciada **AmazonEC2ContainerServiceforEC2Role** deve ser anexada à função do IAM de instância de contêiner. Caso contrário, você receberá um erro ao usar o Console de gerenciamento da AWS para criar clusters.

1. Escolha **Próximo**.

1.  Em **Nome do perfil**, insira **ecsInstanceRole**

1. Reveja a função e escolha **Criar função**.

------
#### [ AWS CLI ]

Substitua cada *entrada do usuário* por seus próprios valores.

1. Crie um arquivo chamado `instance-role-trust-policy.json` com o conteúdo a seguir.  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": { "Service": "ec2.amazonaws.com"},
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. Use o comando a seguir para criar o perfil do IAM da instância utilizando o documento da política de confiança.

   ```
   aws iam create-role \
       --role-name ecsInstanceRole \
       --assume-role-policy-document file://instance-role-trust-policy.json
   ```

1. Crie um perfil de instância chamado `ecsInstanceRole-profile` usando o comando [create-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html). 

   ```
   aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile
   ```

   Exemplo de resposta

   ```
   {
       "InstanceProfile": {
           "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE",
           "Roles": [],
           "CreateDate": "2022-04-12T23:53:34.093Z",
           "InstanceProfileName": "ecsInstanceRole-profile",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile"
       }
   }
   ```

1. Adicione a função `ecsInstanceRole` ao perfil de instância `ecsInstanceRole-profile`.

   ```
   aws iam add-role-to-instance-profile \
       --instance-profile-name ecsInstanceRole-profile \
       --role-name ecsInstanceRole
   ```

1. Anexe a política gerenciada `AmazonEC2ContainerServiceForEC2Role` ao perfil usando o comando a seguir.

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
       --role-name ecsInstanceRole
   ```

------

Depois de criar o perfil, adicione a ele outras permissões para os atributos a seguir.


|  Recurso  |  Permissões adicionais  | 
| --- | --- | 
|  O Amazon ECR tem a imagem do container  |  [Permissões do Amazon ECR](#container-instance-role-ecr)  | 
| Fazer com que o CloudWatch Logs monitore instâncias de contêiner | [Monitorar permissões de instâncias de contêiner](#cwl_iam_policy) | 
| Hospedar arquivos de configuração no bucket do Amazon S3 | [Acesso somente leitura ao Amazon S3](#container-instance-role-s3) | 

## Permissões do Amazon ECR
<a name="container-instance-role-ecr"></a>

O perfil de instância de contêiner do Amazon ECS que você usa com as instâncias de contêiner deve ter as seguintes permissões de política do IAM para o Amazon ECR.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Se você usa a política gerenciada `AmazonEC2ContainerServiceforEC2Role` para suas instâncias de contêiner, sua função tem as permissões apropriadas.

## Permissões necessárias para definir a configuração da conta awsvpcTrunking
<a name="container-instance-role-awsvpcTrunking-setting"></a>

O Amazon ECS oferece suporte à inicialização de instâncias de contêiner com maior densidade de ENI usando tipos de instâncias do Amazon EC2 compatíveis. Ao usar esse recurso, recomendamos criar dois perfis da instância de contêiner. Habilite a configuração da conta `awsvpcTrunking` em um perfil e use esse perfil em tarefas que exigem truncamento de ENI. Para obter mais informações sobre a configuração da conta `awsvpcTrunking`, consulte [Acesso aos recursos do Amazon ECS com as configurações de conta](ecs-account-settings.md).

O perfil de instância de contêiner que você usa com as instâncias de contêiner precisa ter as seguintes permissões de política do IAM para definir a configuração de conta. 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:ListAccountSettings", 
                "ecs:ListAttributes", 
                "ecs:PutAccountSetting" 
            ],
            "Resource": "*"
        }
    ]
}
```

------

Para usar o perfil de instância de contêiner, adicione o seguinte aos dados do usuário da instância:

```
#!/bin/bash
aws ecs put-account-setting --name awsvpcTrunking --value enabled --region region
ECS_CLUSTER=MyCluster>> /etc/ecs/ecs.config
EOF
```

Para obter mais informações sobre como adicionar dados do usuário às suas instâncias do EC2, consulte [Executar comandos na instância do Linux na inicialização](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) no *Guia do usuário do Amazon EC2 para instâncias do Linux*.

## Acesso somente leitura ao Amazon S3
<a name="container-instance-role-s3"></a>

Armazenar informações de configuração em um bucket privado no Amazon S3 e conceder acesso somente leitura à função do IAM de instância de contêiner é uma maneira segura e conveniente de permitir a configuração da instância de contêiner no momento da inicialização. É possível armazenar uma cópia do arquivo `ecs.config` em um bucket privado, usar os dados de usuário do Amazon EC2 para instalar a AWS CLI e copiar as informações de configuração em `/etc/ecs/ecs.config` quando a instância for inicializada.

Para obter mais informações sobre como criar um arquivo `ecs.config`, armazená-lo no Amazon S3 e inicializar instâncias com essa configuração, consulte [Armazenamento da configuração da instância de contêiner do Amazon ECS no Amazon S3](ecs-config-s3.md).

É possível usar o comando da AWS CLI a seguir para permitir o acesso somente leitura do Amazon S3 ao perfil da instância de contêiner. Substitua *ecsInstanceRole* pelo nome do perfil criado.

```
aws iam attach-role-policy \
      --role-name ecsInstanceRole \
      --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
```

Também é possível usar o console do IAM para adicionar o acesso somente leitura do Amazon S3 (`AmazonS3ReadOnlyAccess`) ao perfil. Para obter mais informações, consulte [Atualizar permissões para um perfil](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html) no *Guia do usuário do AWS Identity and Access Management*.

## Monitorar permissões de instâncias de contêiner
<a name="cwl_iam_policy"></a>

Para que suas instâncias de contêiner possam enviar dados de log para o CloudWatch Logs, é necessário criar uma política do IAM para permitir que o agente do Amazon ECS escreva os logs de aplicações do cliente no CloudWatch (normalmente feito via driver do `awslogs`). Após criar a política, anexe-a a `ecsInstanceRole`.

------
#### [ Console de gerenciamento da AWS ]

**Para usar o editor de políticas JSON para criar uma política**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Políticas**. 

   Se essa for a primeira vez que você escolhe **Políticas**, a página **Bem-vindo às políticas gerenciadas** será exibida. Escolha **Começar**.

1. Na parte superior da página, escolha **Criar política**.

1. Na seção **Editor de políticas**, escolha a opção **JSON**.

1. Insira o seguinte documento de política JSON:

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. Escolha **Próximo**.
**nota**  
É possível alternar entre as opções de editor **Visual** e **JSON** a qualquer momento. Porém, se você fizer alterações ou escolher **Próximo** no editor **Visual**, o IAM poderá reestruturar a política a fim de otimizá-la para o editor visual. Para obter mais informações, consulte [Restruturação de política](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure) no *Guia do usuário do IAM*.

1. Na página **Revisar e criar**, insira um **Nome de política** e uma **Descrição** (opcional) para a política que você está criando. Revise **Permissões definidas nessa política** para ver as permissões que são concedidas pela política.

1. Escolha **Criar política** para salvar sua nova política.

Após criar a política, anexe-a ao perfil da instância de contêiner. Para obter informações sobre como anexar a política ao perfil, consulte [Atualizar permissões para um perfil](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html) no *Guia do usuário do AWS Identity and Access Management*.

------
#### [ AWS CLI ]

1. Crie um arquivo denominado `instance-cw-logs.json` com o seguinte conteúdo.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. Use o comando da a seguir para criar a política do IAM usando o arquivo de documento da política JSON.

   ```
   aws iam create-policy \
         --policy-name cwlogspolicy \
         --policy-document file://instance-cw-logs.json
   ```

1. Recupere o ARN da política do IAM que você criou usando o comando a seguir. Substitua *cwlogspolicy* pelo nome da política criada.

   ```
   aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogspolicy`].Arn'
   ```

1. Use o comando a seguir para anexar a política ao perfil do IAM da instância de contêiner usando o ARN da política.

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy
   ```

------