Comment puis-je accéder aux ressources d'un autre compte à partir d'une tâche Amazon ECS ?
Je souhaite que mes tâches Amazon Elastic Container Service (Amazon ECS) accèdent aux ressources d'un autre compte AWS.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Pour configurer l'accès intercompte pour une tâche Amazon ECS, utilisez les rôles AWS Identity and Access Management (IAM) et l'hypothèse de rôles intercompte.
Cette résolution utilise les configurations suivantes :
- Le compte A est le compte propriétaire de la ressource.
- Le compte B est le compte associé à la tâche Amazon ECS.
Prérequis : La définition de tâche Amazon ECS dans le compte B doit comporter un rôle de tâche IAM. Après avoir créé le rôle de tâche IAM, mettez à jour la définition de tâche Amazon ECS pour inclure l'ARN du rôle de tâche.
Configurer le compte A
Procédez comme suit :
- Créez un rôle IAM pour accéder à la ressource et entrez la relation d’approbation suivante pour la politique de confiance personnalisée :
Remarque : Remplacez Account_B_ID par l'ID du compte B, et ECS_Task_Role_Name par le nom du rôle de tâche Amazon ECS pour le compte B.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account_B_ID:role/ECS_Task_Role_Name" }, "Action": "sts:AssumeRole" } ] } - Associez une politique en ligne au nouveau rôle IAM avec les autorisations requises pour accéder à la ressource. L'exemple de politique suivant permet au rôle IAM d'envoyer des messages à une file d'attente Amazon Simple Queue Service (Amazon SQS) :
Remarque : Si votre tâche s'exécute sur AWS Fargate, assurez-vous que le rôle IAM dispose des autorisations ECS Exec.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:region:Account_A_ID:QueueName" } ] }
Configurer le compte B
Attachez une politique en ligne au rôle de tâche Amazon ECS dans la définition de tâche qui permet à la tâche d'endosser le rôle IAM dans le compte A :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::Account_A_ID:role/cross-account-role" } ] }
Remarque : Remplacez Account_A_ID par l'ID de compte du compte A.
S’assurer que le conteneur de la tâche dans le compte B peut accéder à la ressource dans le compte A
Procédez comme suit :
-
Si vous exécutez la tâche sur Amazon Elastic Compute Cloud (Amazon EC2), utilisez la commande docker exec depuis l'instance de conteneur de la tâche. Pour plus d'informations, consultez la page Exécuter docker exec sur un conteneur en cours d'exécution sur le site Web de Docker Docs. Puis, passez à l'étape 3.
Si vous exécutez la tâche sur Fargate, activez ECS Exec pour votre tâche ou service autonome.
Remarque : Dans les commandes suivantes, remplacez cluster-name par le nom de votre cluster, your-task-definition par la définition de tâche dans le compte B et region-name par votre région AWS. Remplacez également FARGATE par votre type de lancement.
Pour une tâche autonome, exécutez la commande run-task suivante :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 FARGATEPour un service, exécutez la commande update-service suivante :
aws ecs update-service --service service-name --cluster cluster-name --enable-execute-command --region region-name --force-new-deployment -
Pour utiliser ECS Exec afin de vous connecter à distance à l'instance de conteneur, exécutez la commande execute-command suivante :
aws ecs execute-command --cluster cluster-name --task taskID --container container-name --interactive --command "/bin/bash"Remarque : Remplacez cluster-name par le nom de votre cluster, taskID par votre ID de tâche et container-name par le nom de votre conteneur.
-
Dans le conteneur, exécutez la commande suivante pour créer un profil intercompte dans le fichier de configuration :
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 EOFRemarque : Remplacez Account_A_ID par l'ID de compte du compte A.
-
Pour vérifier le rôle endossé par le conteneur, exécutez la commande suivante :
bash-4.2# aws sts get-caller-identityDans la sortie, vérifiez que le rôle est le rôle de tâche dans le compte B.
Exemple de sortie :{ "Account": "Account_B_ID", "UserId": "AROATCLZDNI7EB3PZGY56:8db9330e660542b7b55595b06fef82cd", "Arn": "arn:aws:sts::Account_B_ID:assumed-role/task-role/8db9330e660542b7b55595b06fef82cd" } -
Pour confirmer que le conteneur peut endosser le rôle intercompte, exécutez la commande suivante :
bash-4.2# aws sts get-caller-identity --profile cross-accountExemple de sortie :
{ "Account": "Account_A_ID", "UserId": "AROA4T5UFR272UVSKSA2Y:botocore-session-1736260779", "Arn": "arn:aws:sts::Account_A_ID:assumed-role/cross-account-role/botocore-session-1736260779" } -
Vérifiez si vous pouvez accéder à la ressource du compte A à partir du compte B. L'exemple de commande suivant permet d'accéder à une file d'attente 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-accountRemarque : Remplacez region par votre région, Account_A_ID par l'ID de compte du compte A et QueueName par le nom de votre file d'attente SQS.
Exemple de sortie :{ "MD5OfMessageBody": "2b9297ac831d0f8aa655f41e6782898d", "MessageId": "4d5baf64-abb0-4f06-af95-d602a45326d2" }La sortie confirme que la tâche Amazon ECS du compte B peut envoyer des messages à la file d'attente SQS du compte A.
Informations connexes
Didacticiel IAM : Déléguer l’accès entre les comptes AWS à l’aide des rôles IAM
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
demandé il y a un an
demandé il y a un an
demandé il y a 3 ans
demandé il y a 7 mois
demandé il y a 2 ans