Quero configurar meu perfil de tarefa do AWS Identity and Access Management (AWS IAM) no Amazon Elastic Container Service (Amazon ECS) para não receber erros "Access Denied" ao fazer chamadas de API.
Breve descrição
Para evitar o erro Access Denied, inclua seu perfil do IAM na definição de tarefa do Amazon ECS.
Você deve ativar o perfil do IAM em seu arquivo de configuração do atendente de contêiner do ECS. Além disso, certifique-se de que seu perfil do IAM tenha todas as permissões necessárias para que sua tarefa possa usar o perfil para fazer as chamadas de API.
Observação: Se uma tarefa não conseguir encontrar o perfil de tarefa do IAM devido a problemas de configuração, a tarefa usará o perfil de instância do Amazon Elastic Compute Cloud (Amazon EC2).
Resolução
Confirme se o atendente de contêiner do ECS está em execução
Execute o comando docker ps:
docker ps
Observação: Se você reiniciar a instância, as regras do iptables serão redefinidas para o padrão. Para evitar uma reinicialização, execute um dos comandos a seguir para salvar as regras.
Imagem de máquina da Amazon (AMI) do Amazon Linux otimizada para Amazon ECS:
sudo service iptables save
AMI do Amazon Linux 2 otimizada para Amazon ECS:
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Ative seu perfil do IAM em seu arquivo de configuração do atendente de contêiner do ECS
Conclua as etapas a seguir:
-
Abra seu arquivo /etc/ecs/ecs.config.
-
Para ativar o perfil do IAM para tarefas em contêineres com os modos de rede bridge e default, defina ECS_ENABLE_TASK_IAM_ROLE como verdadeiro:
ECS_ENABLE_TASK_IAM_ROLE=true
-
Para ativar o perfil do IAM para tarefas em contêineres com o modo de rede host, defina ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST como verdadeiro:
ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Para atualizar o arquivo de configuração, execute um dos seguintes comandos para reiniciar o atendente de contêiner do ECS:
AMI do Amazon Linux otimizada para Amazon ECS:
sudo stop ecs
sudo start ecs
AMI do Amazon Linux 2 otimizada para Amazon ECS:
sudo systemctl restart ecs
Atualize a política de confiança do perfil do IAM
Para atribuir seu perfil do IAM às suas tarefas do Amazon ECS, atualize sua política de confiança do perfil do IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Atualize as configurações HTTP_PROXY para o atendente de contêiner do ECS
Se você usar HTTP_PROXY na sua configuração do atendente de contêiner do Amazon ECS, aplique a seguinte configuração NO_PROXY:
NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock
Use a versão mais recente do AWS SDK
a aplicação executado em seu contêiner deve usar a versão 2016 ou posterior do AWS SDK. Para atualizar sua AWS, consulte Suporte de versão para SDKs e ferramentas da AWS e Ferramentas para criar na AWS.
Configure regras de iptables para uma AMI não otimizada para Amazon ECS
Se você usa uma AMI não otimizada para Amazon ECS, defina as regras necessárias para iptables.
Disponibilize a variável de ambiente para processos não PID 1
A variável de ambiente AWS_CONTAINER_CREDENTIALS_RELATIVE_URI está disponível somente para processos PID 1 em um contêiner. Se o contêiner estiver executando vários processos ou processos de inicialização, a variável de ambiente não estará disponível para processos não PID 1.
Para definir sua variável de ambiente para estar disponível para processos não PID 1, exporte a variável de ambiente no arquivo .profile. Por exemplo, execute o comando a seguir para exportar a variável de ambiente no Dockerfile para sua imagem de contêiner:
RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile
Observação: Quando você exporta a variável de ambiente, há uma dependência nas strings e nos comandos grep.
Informações relacionadas
Configuração adicional de instância do Windows no Amazon EC2