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:
Sua tarefa está hospedada no AWS Fargate ou em instâncias do Amazon EC2 e:
|
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. |
|
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
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
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 clusterdefault
, 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 APISubmitAttachmentStateChanges
,SubmitContainerStateChange
eSubmitTaskStateChange
. 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ãoSubmitContainerStateChange
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
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.