¿Cómo puedo configurar mi tarea de Amazon ECS para que asuma un rol de IAM en otra cuenta de AWS?

5 minutos de lectura
0

Quiero que mi tarea de Amazon Elastic Container Service (Amazon ECS) asuma un rol de AWS Identity and Access Management (IAM) en otra cuenta.

Descripción breve

Puede configurar su tarea de Amazon ECS para que asuma un rol de IAM en otra cuenta y haga lo siguiente:

  • Acceder a recursos, como un bucket de Amazon Simple Storage Service (Amazon S3)
  • Llevar a cabo tareas, como describir un recurso e iniciar o detener instancias, mediante llamadas a la API

Para permitir que su tarea de Amazon ECS asuma un rol de IAM en otra cuenta de AWS, siga estos pasos:

  1. Configure un rol de IAM en la cuenta de origen.
  2. Modifique la política de confianza del rol de IAM de la cuenta de destino para permitir que el rol de IAM de la cuenta de origen asuma el rol de IAM de la cuenta de destino.
  3. Cree una definición de tarea en la cuenta de origen y defina el rol de IAM creado en el paso 1 como el rol de tarea de Amazon ECS.

Resolución

Los ejemplos utilizados en este artículo hacen referencia a dos cuentas de AWS diferentes:

  • Una cuenta de origen que aloje la tarea de Amazon ECS: 1111222233334444
  • Una cuenta de destino que incluya el de IAM, como destination-account-role, que asume la tarea de Amazon ECS: 5555666677778888

Configuración del rol de IAM en la cuenta de origen

Agregue la siguiente declaración de política a su rol de tarea de Amazon ECS para permitir que este asuma el rol de IAM en la cuenta de destino:

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

Nota:

  • Sustituya 5555666677778888 por el identificador de cuenta del rol multicuenta que debe asumir su tarea.
  • Sustituya destination-account-role por el nombre del rol asumido.

Cómo modificar la política de confianza del rol de IAM en la cuenta de destino

Agregue la siguiente declaración de política a la política de confianza de su rol de IAM multicuenta (destination-account-role) en la cuenta de destino:

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

Nota:

  • Sustituya 1111222233334444 por el identificador de cuenta de la cuenta de origen en la que existe l rol de IAM de la tarea de ECS.
  • Sustituya my-ECS-task-role por el nombre de su rol de IAM de la tarea de ECS.

Creación de la definición de la tarea

Cree un archivo de definición de tareas similar al siguiente:

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

Nota: Para taskRoleLearn, utilice el ARN del rol de IAM de la cuenta de origen.

Para registrar la definición de la tarea, ejecute el siguiente comando en el archivo example-task-def.json:

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

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Tras los pasos anteriores, utilice la AWS CLI para ejecutar una tarea independiente a fin de asumir un rol de IAM en la cuenta de destino. O bien, puede usar la configuración de credential_source en el archivo de configuración. Especifique dónde la AWS CLI puede encontrar las credenciales para asumir el rol de IAM asociado al contenedor ECS. Para obtener más información, consulte Assume role credential provider.

Cómo verificar que el contenedor de la tarea pueda asumir el rol de IAM en la cuenta de destino y acceder al recurso

  1. Utilice la definición de tarea que ha creado para ejecutarla:
    Si ejecuta la tarea en Amazon Elastic Compute Cloud (Amazon EC2), utilice el comando docker exec para llevar a cabo las pruebas.
    Si ejecuta la tarea en AWS Fargate, utilice ECS Exec para llevar a cabo las pruebas.
  2. Configure el archivo de configuración de la AWS CLI y, a continuación, compruebe que la tarea asume el rol de IAM en la cuenta 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"
      ]
    }

Si los resultados son similares a los del ejemplo anterior, la tarea ECS de la cuenta 1111222233334444 puede asumir el rol de IAM en la cuenta 5555666677778888. La tarea de ECS puede asumir el rol de IAM para enumerar los recursos del clúster de ECS.

Información relacionada

Rol de IAM de tarea de Amazon ECS

Tutorial de IAM: delegación del acceso entre cuentas de AWS mediante roles de IAM

AWS SDKs and Tools Reference Guide

Use an IAM role in the AWS CLI

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año