Como configuro minha tarefa do Amazon ECS para assumir uma função do IAM em outra conta da AWS?

5 minuto de leitura
0

Quero configurar minha tarefa do Amazon Elastic Container Service (Amazon ECS) para assumir uma função do AWS Identity and Access Management (IAM) em outra conta.

Breve descrição

Você pode configurar sua tarefa do Amazon ECS para assumir uma função do IAM em outra conta para fazer o seguinte:

  • Acessar recursos, como um bucket do Amazon Simple Storage Service (Amazon S3).
  • Executar tarefas, como descrever um recurso e iniciar ou interromper instâncias, por meio de chamadas de API.

Para permitir que sua tarefa do Amazon ECS assuma uma função do IAM em outra conta da AWS, faça o seguinte:

  1. Configure uma função do IAM na conta de origem.
  2. Modifique a política de confiança da função do IAM da conta de destino para permitir que a função do IAM da conta de origem assuma a função do IAM na conta de destino.
  3. Crie uma definição de tarefa na conta de origem e defina a função do IAM criada na etapa 1 como a função de tarefa do Amazon ECS.

Resolução

Os exemplos usados neste artigo fazem referência a duas contas diferentes da AWS:

  • Uma conta de origem que hospeda a tarefa do Amazon ECS (exemplo: 1111222233334444)
  • Uma conta de destino que inclui a função do IAM (exemplo: destination-account-role) que a tarefa do Amazon ECS assume (exemplo: 5555666677778888)

Configurar a função do IAM na conta de origem

Use as instruções em Adicionar e remover permissões de identidade do IAM para adicionar a seguinte instrução de política à sua função de tarefa do Amazon ECS (exemplo: my-ECS-task-role). Isso permite que a função de tarefa do ECS assuma a função do IAM na conta de destino.

Observação:

  • Substitua 5555666677778888 pelo ID da conta da função entre contas que sua tarefa precisa assumir.
  • Substitua destination-account-role pelo nome da função assumida.
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::5555666677778888:role/destination-account-role"
  }
}

Modificar a política de confiança da função do IAM na conta de destino

Use as instruções em Modificar uma política de confiança de função (console) para adicionar a instrução de política a seguir à política de confiança da função do IAM (destination-account-role) entre contas na conta de destino.

Observação:

  • Substitua1111222233334444 pelo ID da conta de origem em que a função do IAM da tarefa do ECS existe.
  • Substitua my-ECS-task-role pelo nome da função de tarefa do IAM do ECS.
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
    },
    "Action": "sts:AssumeRole"
  }]
}

Criar a definição de tarefa

Crie um arquivo de definição de tarefa semelhante ao seguinte (example-task-def.json) e use o ARN da função do IAM da conta de origem (my-ECS-task-role) para taskRoleArn:

{
  "containerDefinitions": [
    {
      "name": "test",
      "image": "your-test-image",
      "cpu": 100,
      "memory": 200,
      "essential": true
    }
  ],
  "family": "verify-assume-cross-account-role",
  "taskRoleArn": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
}

Execute o seguinte comando para registrar a definição da tarefa usando o arquivo example-task-def.json:

aws ecs register-task-definition —cli-input-json file://example-task-def.json

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Depois de concluir as etapas anteriores, você pode executar uma tarefa autônoma para assumir uma função do IAM na conta de destino usando a AWS Command Line Interface (AWS CLI). Ou você pode usar as configurações de credential_source no arquivo de configuração da AWS CLI para especificar onde a ela pode encontrar credenciais para assumir a função do IAM anexada ao contêiner do ECS. Com essa configuração, a tarefa pode assumir a função sem precisar exportar novas credenciais. Para obter mais informações, consulte Assume role credentials (Assumir credenciais de função).

Verifique se o contêiner dentro da tarefa pode assumir a função do IAM na conta de destino e acessar o recurso

1.    Execute a tarefa usando a definição de tarefa que você criou.

  • Se você estiver executando a tarefa no Amazon Elastic Compute Cloud (Amazon EC2), use o comando docker exec para acessar o contêiner e realizar o teste.
  • Se você estiver executando uma tarefa no AWS Fargate, use o recurso ECS Exec para acessar o contêiner e realizar o teste.

2.    Ajuste o arquivo de configuração da AWS CLI e verifique se a tarefa assume a função do IAM na conta de destino:

Using the ECS exec command to access the container
$ aws ecs execute-command --cluster example-cluster --task example-taskID --container test --interactive --command "/bin/bash"

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-064a40c5149cecc32

# Create AWS CLI config file
bash-4.2# mkdir /root/.aws
bash-4.2# cat <<EOF > /root/.aws/config
[profile cross-account]
role_arn = arn:aws:iam::5555666677778888:role/destination-account-role
credential_source = EcsContainer
EOF

# Check the current task IAM role
bash-4.2# aws sts get-caller-identity
{
  "UserId": "AROA4SHE6JAGEAYNUH6ST:8ee54a7f5c474a3f93ee28474486402f",
  "Account": "1111222233334444",
  "Arn": "arn:aws:sts::1111222233334444:assumed-role/my-ECS-task-role/8ee54a7f5c474a3f93ee28474486402f"
}

# Assume the cross-account IAM role
bash-4.2# aws sts get-caller-identity --profile cross-account
{
  "UserId": "AROA3A44JRHY6FFSMMJKN:botocore-session-1647426859",
  "Account": "5555666677778888",
  "Arn": "arn:aws:sts::5555666677778888:assumed-role/destination-account-role/botocore-session-1647426859"
}

# Verify that you can list the resources in cross-account in the task
bash-4.2# aws ecs list-clusters --profile cross-account
{
  "clusterArns": [
    "arn:aws:ecs:us-east-1:5555666677778888:cluster/default"
  ]
}

Se as saídas forem semelhantes às listadas, a tarefa do ECS na conta 1111222233334444 poderá assumir a função do IAM na conta 5555666677778888 para listar os recursos do cluster do ECS.


Informações relacionadas

Funções do IAM para tarefas

Tutorial do IAM: Delegar acesso entre contas da AWS usando funções do IAM

AWS SDKs and tools that use the shared config and credentials files (AWS SDKs e ferramentas que usam os arquivos compartilhados de configuração e credenciais)

Credential file settings (Configurações do arquivo de credenciais)

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos