Je souhaite que ma tâche Amazon Elastic Container Service (Amazon ECS) assume un rôle Gestion des identités et des accès AWS (AWS IAM) dans un autre compte.
Brève description
Vous pouvez configurer votre tâche Amazon ECS pour qu'elle assume un rôle IAM dans un autre compte afin d'effectuer les opérations suivantes :
- Accéder à des ressources, telles qu'un compartiment Amazon Simple Storage Service (Amazon S3)
- Effectuer des tâches, telles que la description d'une ressource et le démarrage ou l'arrêt d'instances, par le biais d'appels d'API.
Pour permettre à votre tâche Amazon ECS d’assumer un rôle IAM dans un autre compte AWS, procédez comme suit :
- Configurez un rôle IAM dans le compte source.
- Modifiez la politique de confiance du rôle IAM du compte de destination pour permettre au rôle IAM du compte source d'assumer le rôle IAM du compte de destination.
- Créez une définition de tâche dans le compte source et définissez le rôle IAM créé à l'étape 1 en tant que rôle de tâche Amazon ECS.
Résolution
Les exemples utilisés dans cet article font référence à deux comptes AWS différents :
- Un compte source qui héberge la tâche Amazon ECS : 1111222233334444
- Un compte de destination qui inclut le rôle IAM, tel que destination-account-role, que la tâche Amazon ECS assume : 5555666677778888
Configuration du rôle IAM dans le compte source
Ajoutez la déclaration de politique suivante à votre rôle de tâche Amazon ECS pour permettre au rôle d'assumer le rôle IAM dans le compte de destination :
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::5555666677778888:role/destination-account-role"
}
}
Remarque :
- Remplacez 5555666677778888 par l'ID de compte du rôle intercompte que votre tâche doit assumer.
- Remplacez destination-account-role par le nom du rôle qui est assumé.
Modification de la politique de confiance du rôle IAM dans le compte de destination
Ajoutez la déclaration de politique suivante à la politique de confiance de votre rôle IAM intercompte (destination-account-role) dans le compte de destination :
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
},
"Action": "sts:AssumeRole"
}]
}
Remarque :
- Remplacez 1111222233334444 par l'ID du compte source qui contient le rôle IAM de la tâche ECS.
- Remplacez my-ECS-task-role par le nom de votre rôle de tâche IAM ECS.
Création de la définition de la tâche
Créez un fichier de définition de tâche sur la base de l’exemple suivant :
{
"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"
}
Remarque : pour taskRoleArn, utilisez l'ARN du rôle IAM du compte source.
Pour enregistrer la définition de tâche, exécutez la commande suivante pour le fichier example-task-def.json :
aws ecs register-task-definition --cli-input-json file://example-task-def.json
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente d’AWS CLI.
Une fois les opérations précédentes effectuées, utilisez l'AWS CLI pour exécuter une tâche autonome afin d'assumer un rôle IAM sur le compte de destination. Vous pouvez également utiliser les paramètres credential_source dans le fichier de configuration. Vous devez indiquer où l'AWS CLI peut trouver les informations d'identification pour assumer le rôle IAM attaché au conteneur ECS. Pour en savoir plus, consultez la page Assumer le rôle de fournisseur d'informations d'identification.
Vérification que le conteneur de la tâche peut assumer le rôle IAM dans le compte de destination et accéder à la ressource
- Utilisez la définition de tâche que vous avez créée pour exécuter la tâche :
Si vous exécutez la tâche sur Amazon Elastic Compute Cloud (Amazon EC2), utilisez la commande docker exec pour effectuer les tests.
Si vous exécutez la tâche sur AWS Fargate, utilisez ECS Exec pour effectuer les tests.
- Configurez le fichier de configuration de l'AWS CLI, puis vérifiez que la tâche assume le rôle IAM dans le compte de destination :
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 vos résultats ressemblent à ceux de l'exemple ci-dessus, cela signifie que la tâche ECS du compte 1111222233334444 peut assumer le rôle IAM dans le compte 5555666677778888. La tâche ECS peut assumer le rôle IAM pour répertorier les ressources du cluster ECS.
Informations connexes
Rôle de tâche Amazon ECS
Tutoriel IAM : Déléguer l'accès entre des comptes AWS à l'aide de rôles IAM
Guide de référence des outils et kits SDK AWS
Utilisation d’un rôle IAM dans l’AWS CLI