

# Perfil do IAM para tarefas do Amazon ECS
<a name="task-iam-roles"></a>

Suas tarefas do Amazon ECS podem ter uma função do IAM associada a elas. As permissões concedidas no perfil do IAM são concedidas a contêineres em execução na tarefa. Esse perfil permite que o código da aplicação (em execução no contêiner) use outros serviços da AWS. O perfil de tarefas é necessário quando a aplicação acessa outros serviços da AWS, como o Amazon S3.

**nota**  
Essas permissões não são acessadas pelo contêiner do Amazon ECS e por agentes do Fargate. Para obter as permissões do IAM que o Amazon ECS precisa para extrair imagens de contêineres e executar a tarefa, consulte [Função do IAM de execução de tarefas do Amazon ECS](task_execution_IAM_role.md).

Estes são os benefícios de usar perfis de tarefa:
+ **Separação de preocupações**: se você está usando o EC2, os perfis do IAM das tarefas possibilitam especificar as permissões do IAM para seus contêineres sem exigir que essas permissões sejam especificadas usando perfis de instância do EC2 (para obter mais informações, consulte [Usar perfis de instância](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) no *Guia do usuário do AWS Identity and Access Management*). Portanto, você pode implantar suas aplicações de maneira independente e uniforme nas instâncias de contêiner do ECS sem precisar modificar as permissões do IAM associadas às instâncias do EC2.
+ **Auditabilidade**: o registro de acessos e de eventos está disponível por meio do CloudTrail para garantir auditoria retrospectiva. As credenciais de tarefa têm um contexto de “`taskArn`” anexado à sessão. Portanto assim os logs do CloudTrail mostram para qual tarefa as credenciais do perfil foram concedidas.
+ **Entrega uniforme de credenciais**: o ECS entrega credenciais de perfil do IAM aos contêineres e os torna acessíveis por meio de uma interface bem definida, independentemente da opção de computação associada às tarefas. No ECS Fargate, os perfis de instância do EC2 não estão disponíveis para contêineres em suas tarefas. Os perfis do IAM para tarefas permitem que você associe permissões do IAM aos contêineres, independentemente da opção de computação ao usar o AWS SDK ou a AWS CLI nos contêineres. Para obter mais informações sobre como o AWS SDK acessa essas credenciais, consulte [Provedor de credenciais de contêiner](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html).

**Importante**  
Os contêineres não são um limite de segurança e o uso dos perfis do IAM para tarefas não muda isso. Cada tarefa em execução no Fargate tem seu próprio limite de isolamento e não compartilha o kernel subjacente, os recursos de CPU, os recursos de memória nem a interface de rede elástica com outra tarefa. Para EC2 e instâncias de contêiner externas no ECS, não há isolamento de tarefas (ao contrário do Fargate) e os contêineres podem potencialmente acessar credenciais para outras tarefas na mesma instância de contêiner. Eles também podem acessar as permissões atribuídas ao [perfil de instância de contêiner do ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html). Siga as recomendações em [Recomendações de perfil](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security-iam-roles.html#security-iam-roles-recommendations) para bloquear o acesso ao Amazon EC2 Instance Metadata Service para contêineres (para mais informações, consulte [Use o serviço de metadados de instância para acessar metadados de instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) no *Guia do Usuário do Amazon EC2*).   
Observe que ao especificar um perfil do IAM para uma tarefa, a AWS CLI ou outros SDKs nos contêineres dessa tarefa usam exclusivamente as credenciais da AWS fornecidas pelo perfil da tarefa e não herdam nenhuma permissão do IAM do Amazon EC2 ou da instância externa na qual estão em execução.

## Criar o perfil do IAM de tarefa
<a name="create_task_iam_policy_and_role"></a>

Ao ser criada para suas tarefas, uma política do IAM deve incluir as permissões que você gostaria que fossem assumidas pelos contêineres nas tarefas. É possível usar uma política gerenciada existente da AWS ou criar uma política personalizada do zero que atenda às suas necessidades específicas. Para obter mais informações, consulte [Criar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do usuário do IAM*.

**Importante**  
Em tarefas do Amazon ECS (para todos os tipos de inicialização), recomendamos usar a política e o perfil do IAM em suas tarefas. Essas credenciais permitem que a tarefa faça solicitações da AWS API sem chamar `sts:AssumeRole` para assumir o mesmo perfil que já está associado à tarefa. Se a tarefa requer que o perfil assuma a si mesmo, é necessário criar uma política de confiança que permita explicitamente que o perfil se assuma. Para obter mais informações, consulte [Atualizar uma política de confiança de perfil](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-trust-policy.html) no *Guia do usuário do IAM*.

Após criar a política do IAM, será possível criar um perfil do IAM que inclua a política à qual você faz referência na definição de tarefa do Amazon ECS. É possível criar o perfil usando o caso de uso **Tarefa do Elastic Container Service** no console do IAM. Em seguida, você pode anexar a política do IAM específica ao perfil que concede as permissões desejadas aos contêineres da tarefa. Os procedimentos a seguir descrevem como fazer isso.

Se você tiver várias definições ou serviços de tarefas que exigem permissões do IAM, deverá considerar a criação de uma função para cada definição ou serviço de tarefa específico com as permissões mínimas necessárias para que as tarefas operem, de modo que você possa minimizar o acesso que fornece para cada tarefa. 

Para obter informações sobre o endpoint de serviço da sua região, consulte [Service endpoints](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#ecs_region) no *Guia de Referência geral da Amazon Web Services*.

A função de tarefa do IAM deve ter uma política de confiança que especifique o serviço `ecs-tasks.amazonaws.com`. A permissão `sts:AssumeRole` permite que suas tarefas assumam uma função do IAM diferente daquela que a instância do Amazon EC2 usa. Dessa forma, sua tarefa não herda a função associada à instância do Amazon EC2. Veja a seguir um exemplo de política de confiança. Substitua o identificador de região e especifique o número da conta da AWS usada ao executar tarefas.

**Importante**  
Ao criar o perfil do IAM da tarefa, é recomendável usar as chaves de condição `aws:SourceAccount` ou `aws:SourceArn` na relação de confiança ou na política associada ao perfil para definir ainda mais o escopo das permissões e evitar o problema de segurança de confused deputy. Atualmente, não há suporte para o uso da chave de condição `aws:SourceArn` para especificar um cluster específico. É necessário usar o curinga para especificar todos os clusters. Para saber mais sobre o problema “confused deputy” e como proteger sua conta da AWS, consulte [O problema “confused deputy”](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) no *Guia do usuário do IAM*.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":[
               "ecs-tasks.amazonaws.com"
            ]
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "ArnLike":{
            "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
            },
            "StringEquals":{
               "aws:SourceAccount":"111122223333"
            }
         }
      }
   ]
}
```

------

Use o procedimentos a seguir para criar uma política para recuperar objetos do Amazon S3 usando um exemplo de política. Substitua cada *entrada do usuário* por seus próprios valores.

------
#### [ 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":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

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.

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

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

1. Crie um arquivo denominado `s3-policy.json` com o seguinte conteúdo.

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

------

1. Use o comando da a seguir para criar a política do IAM usando o arquivo de documento da política JSON. Substitua cada *entrada do usuário* por seus próprios valores.

   ```
   aws iam create-policy \
         --policy-name taskRolePolicy \
         --policy-document file://s3-policy.json
   ```

------

Use o procedimento a seguir para criar o perfil de serviço.

------
#### [ 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 da **Tarefa do Elastic Container Service**.

1. Escolha **Próximo**.

1. Em **Adicionar permissões**, pesquise e selecione a política que você criou.

1. Escolha **Próximo**.

1. Em **Role name (Nome da função)**, digite um nome para sua função. Para este exemplo, insira `AmazonECSTaskS3BucketRole` para o nome da função.

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

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

1. Crie um arquivo denominado `ecs-tasks-trust-policy.json` que contenha a política de confiança a ser usada no perfil do IAM. O arquivo deve ter o conteúdo a seguir. Substitua o identificador de região e especifique o número da conta da AWS usada ao executar tarefas.

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Principal":{
               "Service":[
                  "ecs-tasks.amazonaws.com"
               ]
            },
            "Action":"sts:AssumeRole",
            "Condition":{
               "ArnLike":{
               "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
               },
               "StringEquals":{
                  "aws:SourceAccount":"111122223333"
               }
            }
         }
      ]
   }
   ```

------

1. Crie uma função do IAM denominada `ecsTaskRole` usando a política de confiança criada na etapa anterior.

   ```
   aws iam create-role \
         --role-name ecsTaskRole \
         --assume-role-policy-document file://ecs-tasks-trust-policy.json
   ```

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

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

1. Anexe a política do IAM criada ao perfil `ecsTaskRole`. Substitua `policy-arn` pelo ARN da política que você criou.

   ```
   aws iam attach-role-policy \
         --role-name ecsTaskRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy
   ```

------

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


|  Recurso  |  Permissões adicionais  | 
| --- | --- | 
|  Usar o ECS Exec  |  [Permissões do ECS Exec](#ecs-exec-required-iam-permissions)  | 
| Usar uma imagem de um repositório privado do Amazon ECR | [Permissões do Amazon ECR](#ecr-required-iam-permissions) | 
| Usar instâncias do EC2 (Windows e Linux) | [Configuração adicional de instâncias do Amazon EC2](#task-iam-role-considerations) | 
| Usar instâncias externas | [Configuração adicional para instância externa](#enable_task_iam_roles) | 
| Usar instâncias Windows no EC2 | [Configuração adicional de instância do Windows no Amazon EC2](#windows_task_IAM_roles) | 

## Permissões do Amazon ECR
<a name="ecr-required-iam-permissions"></a>

As permissões a seguir são necessárias quando o código do seu aplicativo precisa interagir diretamente com os repositórios do Amazon ECR. Observe que essas permissões não são necessárias no nível do perfil do IAM da tarefa para uma implementação básica na qual você só precise extrair imagens do Amazon ECR. Em vez disso, o perfil de execução de tarefas do Amazon ECS deverá ter essas permissões. Para obter mais informações sobre a função de execução de tarefas, consulte [Função do IAM de execução de tarefas do Amazon ECS](task_execution_IAM_role.md).

Se o código da sua aplicação em execução no contêiner precisar interagir diretamente com as APIs do Amazon ECR, você deverá adicionar as seguintes permissões a um perfil do IAM de tarefa e incluir o perfil do IAM de tarefa na sua definição de tarefa. Para mais informações, consulte [Adicionando e Removendo Políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) no *Guia de Usuário do IAM*.

Use a seguinte política para seu perfil do IAM de tarefa para adicionar as permissões necessárias do Amazon ECR para aplicações em contêiner que precisem interagir diretamente com o Amazon ECR: 

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

****  

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

------

## Permissões do ECS Exec
<a name="ecs-exec-required-iam-permissions"></a>

O recurso [ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) requer um perfil do IAM de tarefas para conceder aos contêineres as permissões necessárias à comunicação entre o SSM Agent gerenciado (agente do `execute-command`) e o serviço do SSM. Você deve adicionar as seguintes permissões a uma função do IAM de tarefa e incluir a função do IAM de tarefa na definição de tarefa. Para mais informações, consulte [Adicionando e Removendo Políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) no *Guia de Usuário do IAM*.

Use a política a seguir para sua função do IAM de tarefa para adicionar as permissões necessárias do SSM. 

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}
```

------

## Configuração adicional de instâncias do Amazon EC2
<a name="task-iam-role-considerations"></a>

Recomendamos que você limite as permissões na função de instância de contêiner à lista mínima de permissões usadas na política gerenciada do IAM `AmazonEC2ContainerServiceforEC2Role`. 

As instâncias do Amazon EC2 exigem pelo menos a versão `1.11.0` do agente de contêiner para usar os perfis de tarefas. Contudo, recomendamos usar a versão mais recente do agente de contêiner. Para obter informações sobre como verificar a versão do agente e atualizar para a versão mais recente, consulte [Atualizar o agente de contêiner do Amazon ECS](ecs-agent-update.md). Se você usa uma AMI otimizada para o Amazon ECS, sua instância precisa, pelo menos, da versão `1.11.0-1` do pacote `ecs-init`. Se as instâncias estiverem usando a AMI otimizada para o Amazon ECS mais recente, elas conterão as versões necessárias do agente de contêiner e do `ecs-init`. Para obter mais informações, consulte [AMIs do Linux otimizadas para o Amazon ECS](ecs-optimized_AMI.md).

Se não estiver usando a AMI otimizada para o Amazon ECS nas instâncias de contêiner, adicione a opção `--net=host` ao comando **docker run** que inicia o agente e as seguintes variáveis de configuração de agente na configuração desejada (para obter mais informações, consulte [Configuração do agente de contêiner do Amazon ECS](ecs-agent-config.md)):

`ECS_ENABLE_TASK_IAM_ROLE=true`  
Usa os perfis do IAM para tarefas em contêineres com os modos de rede `bridge` e `default`.

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
Usa os perfis do IAM para tarefas em contêineres com o modo de rede `host`. A variável é aceita somente em nas versões 1.12.0 e posteriores do agente.

Para um exemplo do comando run, consulte [Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)](manually_update_agent.md). Você também precisará definir os seguintes comandos de rede na sua instância de contêiner para que os contêineres das suas tarefas possam recuperar as credenciais da AWS:

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

Você deve salvar essas regras **iptables** em sua instância de contêiner para elas sobreviverem a uma reinicialização. É possível usar os comandos **iptables-save** e **iptables-restore** para salvar as regras **iptables** e restaurá-las na inicialização. Para obter mais informações, consulte a documentação específica do seu sistema operacional.

Para evitar que contêineres executados por tarefas que usam o modo de rede `awsvpc` acessem as informações de credenciais fornecidas ao perfil de instância do Amazon EC2, e ainda permitindo que as permissões fornecidas pela função da tarefa, defina a variável de configuração de agente `ECS_AWSVPC_BLOCK_IMDS` como `true` no arquivo de configuração do agente e reinicie o agente. Para obter mais informações, consulte [Configuração do agente de contêiner do Amazon ECS](ecs-agent-config.md).

Para evitar que contêineres executados por tarefas que usam o modo de rede `bridge` acessem as informações de credenciais fornecidas ao perfil de instância do Amazon EC2, e ainda permitindo que as permissões fornecidas pela função da tarefa, executando o seguinte comando **iptables** nas instâncias do Amazon EC2. Esse comando não afeta contêineres nas tarefas que usam os modos de rede `host` ou `awsvpc`. Para obter mais informações, consulte [Modo de rede](task_definition_parameters.md#network_mode).
+ 

  ```
  sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
  ```

  Você deve salvar essa regra de **iptables** em sua instância do Amazon EC2 para ela sobreviver a uma reinicialização. Ao usar a AMI otimizada para Amazon ECS, você pode usar o comando a seguir. Para outros sistemas operacionais, consulte a documentação do sistema operacional em questão.

  ```
  sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  ```

## Configuração adicional para instância externa
<a name="enable_task_iam_roles"></a>

Suas instâncias externas exigem pelo menos uma versão `1.11.0` do agente de contêiner para usar perfis do IAM de tarefa; no entanto, recomendamos usar a versão mais recente do agente de contêiner. Para obter informações sobre como verificar a versão do agente e atualizar para a versão mais recente, consulte [Atualizar o agente de contêiner do Amazon ECS](ecs-agent-update.md). Se você estiver usando a AMI do Linux otimizada para o Amazon ECS, sua instância também precisará, pelo menos, da versão `1.11.0-1` do pacote `ecs-init`. Se as instâncias estiverem usando a AMI otimizada para o Amazon ECS mais recente, elas conterão as versões necessárias do agente de contêiner e do `ecs-init`. Para obter mais informações, consulte [AMIs do Linux otimizadas para o Amazon ECS](ecs-optimized_AMI.md).

Se não estiver usando a AMI otimizada para o Amazon ECS nas instâncias de contêiner, adicione a opção `--net=host` ao comando **docker run** que inicia o agente e as seguintes variáveis de configuração de agente na configuração desejada (para obter mais informações, consulte [Configuração do agente de contêiner do Amazon ECS](ecs-agent-config.md)):

`ECS_ENABLE_TASK_IAM_ROLE=true`  
Usa os perfis do IAM para tarefas em contêineres com os modos de rede `bridge` e `default`.

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
Usa os perfis do IAM para tarefas em contêineres com o modo de rede `host`. A variável é aceita somente em nas versões 1.12.0 e posteriores do agente.

Para um exemplo do comando run, consulte [Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)](manually_update_agent.md). Você também precisará definir os seguintes comandos de rede na sua instância de contêiner para que os contêineres das suas tarefas possam recuperar as credenciais da AWS:

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

Você deve salvar essas regras **iptables** em sua instância de contêiner para elas sobreviverem a uma reinicialização. É possível usar os comandos **iptables-save** e **iptables-restore** para salvar as regras **iptables** e restaurá-las na inicialização. Para obter mais informações, consulte a documentação específica do seu sistema operacional.

## Configuração adicional de instância do Windows no Amazon EC2
<a name="windows_task_IAM_roles"></a>

**Importante**  
Isso se aplica somente a contêineres do Windows no EC2 que usem perfil de tarefas.

O perfil de tarefas com recursos do Windows requer configuração adicional no EC2.
+ Ao iniciar as instâncias de contêiner, você deve definir a opção `-EnableTaskIAMRole` no script de dados de usuário das instâncias de contêiner. O `EnableTaskIAMRole` ativa o recurso de funções de tarefas do IAM para as tarefas. Por exemplo:

  ```
  <powershell>
  Import-Module ECSTools
  Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole 
  </powershell>
  ```
+ Você deve executar bootstrap no contêiner com os comandos de rede fornecidos em [Script de inicialização do contêiner para o Amazon ECS](#windows_task_IAM_roles_bootstrap).
+ Você deve criar uma função e uma política do IAM para as tarefas. Para obter mais informações, consulte [Criar o perfil do IAM de tarefa](#create_task_iam_policy_and_role).
+ As funções do IAM do provedor de credencial da tarefa usam a porta 80 da instância de contêiner. Portanto, se você configurar funções do IAM para tarefas na instância de contêiner, os contêineres não poderão usar a porta 80 como porta do host em qualquer mapeamento de porta. Para expor os contêineres na porta 80, recomendamos configurar um serviço para eles que use o balanceamento de carga. É possível usar a porta 80 no balanceador de carga. Ao fazer isso, o tráfego pode ser roteado para outra porta do host nas instâncias de contêiner. Para obter mais informações, consulte [Uso do balanceamento de carga para distribuir o tráfego de serviço do Amazon ECS](service-load-balancing.md).
+ Se a instância do Windows for reiniciada, você deverá excluir a interface proxy e reinicializar o agente de contêiner do Amazon ECS para trazer de volta o proxy de credenciais.

### Script de inicialização do contêiner para o Amazon ECS
<a name="windows_task_IAM_roles_bootstrap"></a>

Para os contêineres acessarem o proxy de credencial na instância de contêiner para obter credenciais, o contêiner deve receber bootstrap com os comandos de rede obrigatórios. O script de exemplo de código a seguir deve ser executado nos contêineres quando eles iniciam.

**nota**  
Não é necessário executar esse script quando é usado o modo de rede `awsvpc` no Windows.

Se você executar contêineres do Windows que incluem o Powershell, use o seguinte script:

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
$gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API
New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API
```

Se você executar contêineres do Windows que tenham apenas o shell de comandos, use o seguinte script:

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
for /f "tokens=1" %i  in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i
for /f "tokens=3" %i  in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i
netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API
netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API
```