Usando funções do IAM com tarefas do Amazon ECS - Amazon ECS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando funções do IAM com tarefas do Amazon ECS

Recomendamos que você atribua a uma tarefa uma função do IAM. Sua função pode ser diferenciada da função da instância do Amazon EC2 na qual 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.

Ao atribuir funções do IAM para uma tarefa, você deve usar a seguinte política de confiança para que cada uma de suas tarefas possa assumir uma função do IAM diferente daquela usada pela sua instância do EC2. Dessa forma, sua tarefa não herda a função da instância do EC2.

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

Quando você adiciona uma função 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 da função 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).


                Esse fluxo de trabalho mostra o processo envolvido quando o agente de contêiner do Amazon ECS armazena em cache as credenciais. Essas credenciais são determinadas pela função da tarefa definida na definição da tarefa.

Você pode recuperar manualmente as credenciais da função temporária 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 curl comando 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 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ambiente ao fazer chamadas de API. 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 seu aplicativo usa para acessar AWS recursos. 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, eles são rotacionados automaticamente pelo agente de contêineres do Amazon ECS.

Função de execução de tarefas

A função de execução da tarefa é usada para conceder permissão ao agente de contêiner do Amazon ECS para chamar ações de AWS API específicas em seu nome. Por exemplo, quando você usaAWS Fargate, o Fargate precisa de uma função do IAM que permita extrair imagens do Amazon ECR e gravar registros em Logs. CloudWatch Uma função do IAM também é necessária quando uma tarefa faz referência a um segredo armazenadoAWS 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, você pode evitar os limites impostos pelo Docker. Se você extrair imagens do Amazon ECR, isso também ajuda a reduzir os tempos de extração da rede e reduz as alterações na transferência de dados quando o tráfego sai 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 do agente de contêiner do Amazon ECS ECS_ENGINE_AUTH_TYPE ECS_ENGINE_AUTH_DATA nem modificar o ecs.config arquivo 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 do Amazon EC2

O agente de contêiner do Amazon ECS é um contêiner executado em cada instância do Amazon EC2 em um cluster do Amazon ECS. Ele é inicializado fora do Amazon ECS usando o init comando que está disponível no sistema operacional. Consequentemente, não é possível conceder permissões por meio de uma função de tarefa. Em vez disso, as permissões devem ser atribuídas às instâncias do Amazon EC2 nas quais os agentes são executados. A lista de ações na AmazonEC2ContainerServiceforEC2Role política de exemplo precisa ser concedida aoecsInstanceRole. Se você não fizer isso, suas instâncias não poderão se juntar ao cluster.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeTags", "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:UpdateContainerInstancesState", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Nessa política, as ações ecr e a logs API permitem que os contêineres que estão sendo executados em suas instâncias extraiam imagens do Amazon ECR e gravem registros na Amazon CloudWatch. As ecs ações permitem que o agente registre e cancele o registro de instâncias e se comunique com o plano de controle do Amazon ECS. Dessas, a ecs:CreateCluster ação é opcional.

Funções vinculadas ao serviço

Você pode usar a função vinculada ao serviço do Amazon ECS para conceder ao serviço Amazon ECS permissão 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 alvos com um grupo-alvo. 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 da função vinculada ao serviço. Essa função é criada em seu nome na primeira vez que você usa o serviço.

nota

Se você excluir inadvertidamente a função vinculada ao serviço, poderá recriá-la. Para obter instruções, consulte Criar a função vinculada ao serviço.

Recomendações

Recomendamos que você faça o seguinte ao configurar suas funções e políticas do IAM de tarefas.

Bloqueie o 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 a função atribuída a essas instâncias. Se seus aplicativos precisarem chamar uma ação de AWS API, use funções do IAM para tarefas.

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 AWS suporte. Para obter mais informações sobre o modo ponte 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 192.0.2.0/32 --jump DROP

Para que essa alteração persista após uma reinicialização, execute o seguinte comando específico para sua Amazon Machine Image (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 usam o modo de awsvpc rede, defina ECS_AWSVPC_BLOCK_IMDS a variável de ambiente como true no /etc/ecs/ecs.config arquivo.

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

Use o modo awsvpc de rede

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

Use o IAM Access Advisor para refinar funções

Recomendamos que você remova todas as ações que nunca foram usadas ou que não foram usadas por algum tempo. Isso evita que o acesso indesejado aconteça. Para fazer isso, analise os resultados produzidos pelo IAM Access Advisor e remova as ações que nunca foram usadas ou que não foram usadas recentemente. Você pode fazer isso seguindo as etapas a seguir.

Execute o comando a seguir para gerar um relatório mostrando as últimas informações de acesso para a 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. Depois de fazer isso, você pode ver 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 IAM Access Advisor.

Monitore AWS CloudTrail atividades suspeitas

Você pode monitorar AWS CloudTrail qualquer atividade suspeita. A maioria das chamadas de AWS API são registradas AWS CloudTrail como eventos. Eles são analisados pelo AWS CloudTrail Insights e você é alertado sobre qualquer comportamento suspeito associado às chamadas de write API. Isso pode incluir um aumento no volume de 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.

Você pode identificar ações que são executadas por tarefas com uma função do IAM AWS CloudTrail examinando a userIdentity propriedade do evento. No exemplo a seguir, as arn inclusões do nome da função assumidas3-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 uma função 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 Task IAM Roles Log e Logging Insights Events for Trails.