Práticas recomendadas para perfis do IAM no Amazon ECS - Amazon Elastic Container Service

Práticas recomendadas para perfis do IAM no Amazon ECS

Os perfis exigidos pelo Amazon ECS dependem do tipo de execução da definição da tarefa e dos recursos usados. Recomendamos criar perfis separados na tabela em vez de compartilhar funções.

Função Definição Quando necessário Mais informações
Função de execução de tarefas Esse perfil permite que o Amazon ECS use outros serviços da AWS em seu nome.

Sua tarefa está hospedada no AWS Fargate ou em instâncias externas e:

  • extrai uma imagem de contêiner de um repositório privado do Amazon ECR.

  • extrai uma imagem de contêiner de um repositório privado do Amazon ECR em uma conta diferente daquela que executa a tarefa.

  • envia logs de contêiner ao CloudWatch Logs usando o driver de log awslogs.

Sua tarefa está hospedada no AWS Fargate ou em instâncias do Amazon EC2 e:

  • usa autenticação de registro privado.

  • usa monitoramento de runtime.

  • a definição de tarefa faz referência a dados confidenciais usando segredos do Secrets Manager ou parâmetros do AWS Systems Manager Parameter Store.

Função do IAM de execução de tarefas do Amazon ECS
Função da tarefa Esse perfil permite que o código da aplicação (no contêiner) use outros serviços da AWS. Sua aplicação acessa outros serviços da AWS, como o Amazon S3. Perfil do IAM para tarefas do Amazon ECS
Função de instância de contêiner Esse perfil permite que as instâncias do EC2 ou instâncias externas se registrem no cluster. Sua tarefa está hospedada em instâncias do Amazon EC2 ou em uma instância externa. Função do IAM de instância de contêiner do Amazon ECS
Perfil do Amazon ECS Anywhere Esse perfil permite que as instâncias externas acessem as APIs da AWS. Sua tarefa está hospedada em instâncias externas. Perfil do IAM para o Amazon ECS Anywhere
Perfil para CodeDeploy do Amazon ECS Esse perfil permite que o CodeDeploy faça atualizações nos serviços. Use o tipo de implantação azul/verde do CodeDeDeploy para implantar serviços. Função do IAM para CodeDeploy do Amazon ECS
Perfil para EventBridge do Amazon ECS Esse perfil permite que o EventBridge faça atualizações nos serviços. Use regras e destinos do EventBridge para agendar as tarefas. Perfil do IAM para EventBridge do Amazon ECS
Perfil de infraestrutura do Amazon ECS Esse perfil permite que o Amazon ECS gerencie recursos de infraestrutura nos clusters.
  • Você deseja anexar volumes do Amazon EBS às tarefas do tipo de execução do Fargate ou EC2 do Amazon ECS. O perfil de infraestrutura permite que o Amazon ECS gerencie os volumes do Amazon EBS para as tarefas.

  • Você deseja usar o Transport Layer Security (TLS) para criptografar o tráfego entre os serviços do Amazon ECS Service Connect.

  • Você deseja criar grupos de destino do VPC Lattice.

Perfil do IAM de infraestrutura do Amazon ECS

Função da tarefa

Recomendamos atribuir um perfil de tarefas. Seu perfil pode ser diferenciado do perfil da instância do Amazon EC2 que está sendo executada. A atribuição de um perfil a cada tarefa se alinha ao princípio do acesso de privilégio mínimo e permite um maior controle granular sobre ações e recursos.

Quando você adiciona um perfil de tarefa a uma definição de tarefa, o agente de contêiner do Amazon ECS cria automaticamente um token com um ID de credencial exclusivo (por exemplo, 12345678-90ab-cdef-1234-567890abcdef) para a tarefa. Esse token e as credenciais do perfil são então adicionados ao cache interno do agente. O agente preenche a variável de ambiente AWS_CONTAINER_CREDENTIALS_RELATIVE_URI no contêiner com o URI do ID da credencial (por exemplo, /v2/credentials/12345678-90ab-cdef-1234-567890abcdef).

É possível recuperar manualmente as credenciais do perfil temporário de dentro de um contêiner anexando a variável de ambiente ao endereço IP do agente de contêiner do Amazon ECS e executando o comando curl na string resultante.

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

A saída esperada é a seguinte:

{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }

As versões mais recentes dos AWS SDKs buscam automaticamente essas credenciais da variável de ambiente AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ao fazer chamadas da API da AWS. Para obter informações sobre como renovar credenciais, consulte Renovação de credenciais da AWS no rePost.

A saída inclui um par de chaves de acesso que consiste em um ID de chave de acesso secreto e uma chave secreta que sua aplicação usa para acessar recursos da AWS. Também inclui um token AWS usado para verificar se as credenciais são válidas. Por padrão, as credenciais atribuídas às tarefas usando funções de tarefa são válidas por seis horas. Depois disso, elas serão alternadas automaticamente pelo agente de contêiner do Amazon ECS.

Função de execução de tarefas

O perfil de execução de tarefas é usado para conceder ao agente de contêiner do Amazon ECS permissão para fazer chamar ações específicas da API da AWS em seu nome. Por exemplo, quando você usa AWS Fargate, o Fargate precisa de um perfil do IAM que permita extrair imagens do Amazon ECR e gravar registros no CloudWatch Logs. Um perfil do IAM também é necessária quando uma tarefa faz referência a um segredo armazenado no AWS Secrets Manager, como um segredo de extração de imagem.

nota

Se você estiver obtendo imagens como um usuário autenticado, é menos provável que seja afetado pelas mudanças que ocorreram nos limites da taxa de extração do Docker Hub. Para obter mais informações, consulte Autenticação de registro privado para instâncias de contêiner.

Ao usar o Amazon ECR e o Amazon ECR Public, é possível evitar os limites impostos pelo Docker. Se você extrair imagens do Amazon ECR, isso também ajudará a reduzir os tempos de extração da rede e reduzirá as alterações na transferência de dados quando o tráfego sair da sua VPC.

Importante

Ao usar o Fargate, você deve se autenticar em um registro de imagem privado usando repositoryCredentials. Não é possível definir as variáveis de ambiente ECS_ENGINE_AUTH_TYPE ou ECS_ENGINE_AUTH_DATA do agente de contêiner do Amazon ECS nem modificar o arquivo ecs.config para tarefas hospedadas no Fargate. Para obter mais informações, consulte Autenticação de registro privado para tarefas.

Função de instância de contêiner

A política do IAM gerenciada AmazonEC2ContainerServiceforEC2Role deve incluir as permissões a seguir. Ao seguir o aviso de segurança padrão de concessão de privilégio mínimo, a política gerenciada AmazonEC2ContainerServiceforEC2Role pode ser usada como um guia. Se qualquer permissão concedida na política gerenciada não for necessária para seu caso de uso, crie uma política personalizada e adicione apenas as permissões necessárias.

  • ec2:DescribeTags: (opcional) permite que uma entidade principal descreva as tags associadas a uma instância do Amazon EC2. Essa permissão é usada pelo agente de contêiner do Amazon ECS para oferecer suporte à propagação da etiqueta de recurso. Para obter mais informações, consulte Como os recursos são marcados.

  • ecs:CreateCluster: (Opcional) permite que uma entidade principal crie um cluster do Amazon ECS. Essa permissão é usada pelo agente de contêiner do Amazon ECS para criar um cluster default, se nenhum já existir.

  • ecs:DeregisterContainerInstance: (Opcional) permite que uma entidade principal cancele o registro de uma instância de contêiner do Amazon ECS de um cluster. O agente de contêiner do Amazon ECS não chama essa operação de API, mas essa permissão permanece para garantir a compatibilidade com versões anteriores.

  • ecs:DiscoverPollEndpoint: (Obrigatório) essa ação retorna endpoints que o agente de contêiner do Amazon ECS usa para pesquisar atualizações.

  • ecs:Poll: (Obrigatório) permite que o agente de contêiner do Amazon ECS se comunique com o ambiente de gerenciamento do Amazon ECS para relatar alterações no estado da tarefa.

  • ecs:RegisterContainerInstance: (Obrigatório) permite que uma entidade principal cancele o registro de uma instância de contêiner com um cluster. Essa permissão é usada pelo agente de contêiner do Amazon ECS para registrar a instância do Amazon EC2 em um cluster e para oferecer suporte à propagação de tags de recurso.

  • ecs:StartTelemetrySession: (Opcional) permite que o agente de contêiner do Amazon ECS se comunique com o ambiente de gerenciamento do Amazon ECS para relatar informações e métricas de integridade para cada contêiner e tarefa.

    Embora essa permissão não seja necessária, recomendamos que você a adicione para permitir que as métricas da instância do contêiner iniciem ações de escala e também recebam relatórios relacionados aos comandos de verificação de integridade.

  • ecs:TagResource: (Opcional) permite que o agente de contêiner do Amazon ECS marque o cluster na criação e marque as instâncias de contêiner quando elas são registradas em um cluster.

  • ecs:UpdateContainerInstancesState: permite que uma entidade principal modifique o status de uma instância de contêiner do Amazon ECS. Essa permissão é usada pelo agente de contêiner do Amazon ECS para drenagem de instâncias spot.

  • ecs:Submit*: (Obrigatório) isso inclui as ações da API SubmitAttachmentStateChanges, SubmitContainerStateChange e SubmitTaskStateChange. Elas são usadas pelo agente de contêiner do Amazon ECS para relatar alterações de estado de cada recurso ao ambiente de gerenciamento do Amazon ECS. A permissão SubmitContainerStateChange não é mais usada pelo agente de contêiner do Amazon ECS, mas permanece para garantir a compatibilidade com versões anteriores.

  • ecr:GetAuthorizationToken: (Opcional) permite que uma entidade principal recupere um token de autorização. O token de autorização representa as credenciais de autenticação do IAM e pode ser usado para acessar qualquer registro do Amazon ECR ao qual a entidade principal do IAM tem acesso. O token de autorização recebido é válido por 12 horas.

  • ecr:BatchCheckLayerAvailability: (Opcional) quando uma imagem de contêiner é enviada para um repositório privado do Amazon ECR, cada camada de imagem é conferida para verificar se ela já foi enviada. Se já tiver sido, a camada da imagem será ignorada.

  • ecr:GetDownloadUrlForLayer: (Opcional) quando uma imagem de contêiner é extraída de um repositório privado do Amazon ECR, essa API é chamada uma vez para cada camada de imagem que ainda não está armazenada em cache.

  • ecr:BatchGetImage: (Opcional) quando uma imagem de contêiner é extraída de um repositório privado do Amazon ECR, essa API é chamada uma vez para recuperar o manifesto da imagem.

  • logs:CreateLogStream: (Opcional) permite que uma entidade principal crie um fluxo de log do CloudWatch Logs para um grupo de logs especificado.

  • logs:PutLogEvents: (Opcional) permite que uma entidade principal carregue um lote de eventos de log em um fluxo de log especificado.

Perfis vinculados a serviço

É possível usar o perfil vinculado ao serviço para o Amazon ECS conceder a permissão de serviço do Amazon ECS para chamar outras APIs de serviço em seu nome. O Amazon ECS precisa das permissões para criar e excluir interfaces de rede, registrar e cancelar o registro de destino com um grupo de destino. Ele também precisa das permissões necessárias para criar e excluir políticas de escalabilidade. Essas permissões são concedidas por meio do perfil vinculado ao serviço. Esse perfil é criado em seu nome na primeira vez que você usa o serviço.

nota

Se o perfil vinculado ao serviço for excluído inadvertidamente, será possível recriá-lo. Para obter instruções, consulte Criar o perfil vinculado ao serviço.

Recomendações de perfis

Recomendamos fazer o seguinte ao configurar suas políticas e perfis do IAM de tarefas.

Configurar acesso aos metadados do Amazon EC2

Ao executar suas tarefas em instâncias do Amazon EC2, recomendamos fortemente que você bloqueie o acesso aos metadados do Amazon EC2 para evitar que seus contêineres herdem o perfil atribuído a essas instâncias. Se a suas aplicações precisarem chamar uma ação da API da AWS, use perfis do IAM para tarefas em vez disso.

Para evitar que tarefas executadas no modo bridge acessem os metadados do Amazon EC2, execute o comando a seguir ou atualize os dados do usuário da instância. Para obter mais instruções sobre como atualizar os dados do usuário de uma instância, consulte este Artigo de suporte da AWS. Para obter mais informações sobre o bridge de definição de tarefas, consulte modo de rede de definição de tarefas.

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

Para que essa alteração persista após uma reinicialização, execute o comando específico a seguir da sua imagem de máquina da Amazon (AMI):

  • Amazon Linux 2

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Amazon Linux

    sudo service iptables save

Para tarefas que usem o modo de rede awsvpc, defina a variável de ambiente ECS_AWSVPC_BLOCK_IMDS como true no arquivo /etc/ecs/ecs.config.

Você deve definir a variável ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST como false no arquivo ecs-agent config para evitar que os contêineres em execução na rede do host acessem os metadados do Amazon EC2.

Uso do modo de rede awsvpc

Use o modo de rede awsvpc para restringir o fluxo de tráfego entre tarefas diferentes ou entre suas tarefas e outros serviços executados em sua Amazon VPC. Isso acrescenta um nível adicional de segurança. O modo de rede awsvpc fornece isolamento de rede em nível de tarefa para tarefas executadas no Amazon EC2. É o modo padrão ativado no AWS Fargate. É o único modo de rede que pode ser usado para atribuir um grupo de segurança às tarefas.

Use as informações do último acesso para refinar perfis

Recomendamos que você remova todas as ações que nunca tiverem sido usadas ou que não tiverem sido usadas por algum tempo. Isso evita que acessos indesejados ocorram. Para fazer isso, revise as informações do último acesso fornecidas pelo IAM e remova as ações que nunca foram usadas ou que não foram usadas recentemente. Faça isso seguindo as etapas a seguir.

Use o comando a seguir para gerar um relatório mostrando as informações do último acesso à política referenciada:

aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1

use o JobId que estava na saída para executar o comando a seguir. Após você fazer isso, será possível visualizar os resultados do relatório.

aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9

Para obter mais informações, consulte Refinar permissões na AWS usando as informações do último acesso.

Monitorar o AWS CloudTrail para atividades suspeitas

É possível monitorar o AWS CloudTrail para quaisquer atividades suspeitas. A maioria das chamadas da API da AWS são registradas em log em AWS CloudTrail como eventos. Elas são analisadas pelo AWS CloudTrail Insights, e você será alertado sobre qualquer comportamento suspeito associado às chamadas da API da write. Isso pode incluir um aumento no volume das chamadas. Esses alertas incluem informações como a hora em que a atividade incomum ocorreu e o principal ARN de identidade que contribuiu para as APIs.

É possível identificar ações que sejam executadas por tarefas com um perfil do IAM no AWS CloudTrail examinando a propriedade userIdentity do evento. No exemplo a seguir, o arn inclui o nome do perfil assumido, s3-write-go-bucket-role, seguido pelo nome da tarefa, 7e9894e088ad416eb5cab92afExample.

"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
nota

Quando tarefas que assumem um perfil são executadas em instâncias de contêiner do Amazon EC2, uma solicitação é registrada pelo agente de contêiner do Amazon ECS no log de auditoria do agente que está localizado em um endereço no formato /var/log/ecs/audit.log.YYYY-MM-DD-HH. Para obter mais informações, consulte Log de perfis do IAM de tarefas e Registro em logs de eventos do Insights para trilhas.