Ir para o conteúdo

Como configuro minha tarefa do Amazon ECS para assumir um perfil do IAM em outra conta da AWS?

5 minuto de leitura
0

Quero que minha tarefa do Amazon Elastic Container Service (Amazon ECS) assuma um perfil do AWS Identity and Access Management (IAM) em outra conta.

Breve descrição

Você pode configurar sua tarefa do Amazon ECS para assumir um perfil 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 um perfil do IAM em outra conta da AWS, conclua as seguintes etapas:

  1. Configure um perfil do IAM na conta de origem.
  2. Modifique a política de confiança do perfil do IAM da conta de destino para permitir que o perfil do IAM da conta de origem assuma o perfil do IAM da conta de destino.
  3. Crie uma definição de tarefa na conta de origem e defina o perfil do IAM criado na etapa 1 como o perfil 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: 1111222233334444
  • Uma conta de destino que inclui o perfil do IAM, como destination-account-role, que a tarefa do Amazon ECS assume: 5555666677778888

Configure o perfil do IAM na conta de origem

Adicione a seguinte declaração de política ao seu perfil de tarefa do Amazon ECS para permitir que o perfil assuma o perfil do IAM na conta de destino:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::5555666677778888:role/destination-account-role"
  }
}

Observação:

  • substitua 5555666677778888 pelo ID da conta do perfil entre contas que sua tarefa precisa assumir.
  • Substitua destination-account-role pelo nome do perfil assumido.

Modifique a política de confiança do perfil do IAM na conta de destino

Adicione a seguinte declaração de política à política de confiança do seu perfil do IAM entre contas (destination-account-role) na conta de destino:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
    },
    "Action": "sts:AssumeRole"
  }]
}

Observação:

  • substitua 1111222233334444 pelo ID da conta de origem na qual existe o perfil do IAM da tarefa do ECS.
  • Substitua my-ECS-Task-Role pelo nome do seu perfil de tarefa do IAM do ECS.

Crie a definição da tarefa

Crie um arquivo de definição de tarefa semelhante ao seguinte:

{
  "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"
}

Observação: para taskRoleArn, use o ARN do perfil do IAM da conta de origem.

Para registrar a definição da tarefa, execute o seguinte comando no 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 Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Após as etapas anteriores, use a AWS CLI para executar uma tarefa independente para assumir um perfil do IAM na conta de destino. Ou você pode usar as configurações de credential_source no arquivo de configuração. Especifique onde a AWS CLI pode encontrar credenciais para assumir o perfil do IAM anexado ao contêiner do ECS. Para obter mais informações, consulte Assume role credential provider.

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

  1. Use a definição de tarefa que você criou para executar a tarefa:
    Se você estiver executando a tarefa no Amazon Elastic Compute Cloud (Amazon EC2), use o comando docker exec para realizar o teste.
    Se você estiver executando a tarefa no AWS Fargate, use o ECS Exec para realizar o teste.
  2. Configure o arquivo de configuração da AWS CLI e, em seguida, verifique se a tarefa assume o perfil 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 suas saídas forem semelhantes ao exemplo anterior, a tarefa do ECS na conta 1111222233334444 poderá assumir o perfil do IAM na conta 5555666677778888. A tarefa do ECS pode assumir o perfil do IAM para listar os recursos do cluster do ECS.

Informações relacionadas

Perfil de tarefa do Amazon ECS

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

AWS SDKs and Tools Reference Guide

Use an IAM role in the AWS CLI

AWS OFICIALAtualizada há 2 anos