Ir para o conteúdo

Como faço para acessar recursos em outra conta a partir de uma tarefa do Amazon ECS?

5 minuto de leitura
0

Quero que minhas tarefas do Amazon Elastic Container Service (Amazon ECS) acessem recursos em uma conta diferente da AWS.

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para configurar o acesso entre contas para uma tarefa do Amazon ECS, use os perfis do AWS Identity and Access Management (AWS IAM) e a suposição de perfil entre contas.

Essa resolução usa as configurações a seguir:

  • A conta A é a conta do proprietário do recurso.
  • A conta B é a conta com a tarefa do Amazon ECS.

Pré-requisito: a definição de tarefa do Amazon ECS na Conta B deve ter uma função de perfil do IAM. Depois de criar a função de perfil do IAM, atualize a definição da tarefa do Amazon ECS para incluir o ARN do perfil de tarefa.

Configurar a conta A

Conclua as etapas a seguir:

  1. Crie um perfil do IAM para acessar o recurso e insira a seguinte relação de confiança para a política de confiança personalizada:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::Account_B_ID:role/ECS_Task_Role_Name"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    Observação: substitua a Account_B_ID pelo ID da conta B e ECS_Task_Role_Name pelo nome do perfil de tarefa do Amazon ECS para a Conta B.
  2. Anexe uma política embutida ao novo perfil do IAM com as permissões necessárias para acessar o recurso. O exemplo de política a seguir permite que o perfil do IAM envie mensagens para uma fila do Amazon Simple Queue Service (Amazon SQS):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "sqs:SendMessage"
                ],
                "Resource": "arn:aws:sqs:region:Account_A_ID:QueueName"
            }
        ]
    }
    Observação: se sua tarefa for executada no AWS Fargate, certifique-se de que o perfil do IAM tenha permissões ECS Exec.

Configurar conta B

Anexe uma política em linha à função de tarefa do Amazon ECS na definição da tarefa que permite que a tarefa assuma o perfil do IAM na Conta A:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::Account_A_ID:role/cross-account-role"
        }
    ]
}

Observação: substitua Account_A_ID pela ID da Conta A.

Certifique-se de que o contêiner da tarefa na Conta B possa acessar o recurso na Conta A

Conclua as etapas a seguir:

  1. Se você estiver executando a tarefa no Amazon Elastic Compute Cloud (Amazon EC2), use o comando docker exec de dentro da instância do contêiner da tarefa. Para obter mais informações, consulte Executar docker exec em um contêiner em execução no site do Docker Docs. Em seguida, prossiga para a etapa 3.
    Se você estiver executando a tarefa no Fargate, ative o ECS Exec para sua tarefa ou serviço autônomo.
    Observação: Nos comandos a seguir, substitua cluster-name pelo nome do cluster, your-task-definition pela definição da tarefa na Conta B e region-name pela sua região da AWS. Além disso, substitua FARGATE pelo seu tipo de inicialização.
    Para uma tarefa independente, execute o comando run-task:

    aws ecs run-task --cluster cluster-name --task-definition your-task-definition:revision --enable-execute-command --network-configuration "awsvpcConfiguration={subnets=[subnet-12345678],securityGroups=[sg-12345678]}" --launch-type FARGATE

    Para um serviço, execute o comando update-service:

    aws ecs update-service --service service-name --cluster cluster-name --enable-execute-command --region region-name --force-new-deployment
  2. Para usar o ECS Exec para se conectar remotamente à instância do contêiner, execute o comando execute-command:

    aws ecs execute-command --cluster cluster-name --task taskID --container container-name --interactive --command "/bin/bash"

    Observação: Substitua cluster-name pelo nome do cluster, TaskID pela ID da tarefa e container-name pelo nome do contêiner.

  3. Dentro do contêiner, execute o seguinte comando para criar um perfil entre contas no arquivo de configuração:

    bash-4.2# mkdir /root/.aws
    bash-4.2# cat <<EOF > /root/.aws/config
    [profile cross-account]
    role_arn = arn:aws:iam::Account_A_ID:role/cross-account-role
    credential_source = EcsContainer
    EOF

    Observação: substitua Account_A_ID pela ID da Conta A.

  4. Para verificar o perfil que o contêiner assume, execute o seguinte comando:

    bash-4.2# aws sts get-caller-identity

    Na saída, verifique se o perfil é o perfil de tarefa na Conta B.
    Exemplo de saída:

    {
        "Account": "Account_B_ID",
        "UserId": "AROATCLZDNI7EB3PZGY56:8db9330e660542b7b55595b06fef82cd",
        "Arn": "arn:aws:sts::Account_B_ID:assumed-role/task-role/8db9330e660542b7b55595b06fef82cd"
    }
  5. Para confirmar se o contêiner pode assumir o perfil de várias contas, execute o seguinte comando:

    bash-4.2# aws sts get-caller-identity --profile cross-account

    Exemplo de saída:

    {
        "Account": "Account_A_ID",
        "UserId": "AROA4T5UFR272UVSKSA2Y:botocore-session-1736260779",
        "Arn": "arn:aws:sts::Account_A_ID:assumed-role/cross-account-role/botocore-session-1736260779"
    }
  6. Verifique se é possível acessar o recurso na Conta A a partir da Conta B. O comando exemplificado a seguir acessa uma fila do SQS:

    bash-4.2# aws sqs send-message --queue-url https://sqs.region.amazonaws.com/Account_A_ID/QueueName --message-body "Test message from ECS Task in Account B" --profile cross-account

    Observação: Substitua região pela sua região, Account_A_ID pelo ID da conta da Conta A e QueueName pelo nome da sua fila do SQS.
    Exemplo de saída:

    {
        "MD5OfMessageBody": "2b9297ac831d0f8aa655f41e6782898d",
        "MessageId": "4d5baf64-abb0-4f06-af95-d602a45326d2"
    }

    O resultado confirma que a tarefa do Amazon ECS na Conta B pode enviar mensagens para a fila do SQS na Conta A.

Informações relacionadas

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

Tutorial do IAM: Delegue acesso entre contas da AWS usando perfis do IAM

Usar um perfil do IAM na AWS CLI

AWS OFICIALAtualizada há 2 anos