如何將我的 Amazon ECS 任務設定為在另一個 AWS 帳戶中承擔 IAM 角色?
我希望我的 Amazon Elastic Container Service (Amazon ECS) 任務在另一個帳戶中承擔 AWS Identity and Access Management (IAM) 角色。
簡短說明
您可以將 Amazon ECS 任務設定為在另一個帳戶中承擔 IAM 角色,以執行下列操作:
- 存取資源,例如 Amazon Simple Storage Service (Amazon S3) 儲存貯體
- 透過 API 呼叫執行任務,例如描述資源以及啟動或停止執行個體。
若要允許您的 Amazon ECS 任務在其他 AWS 帳戶中承擔 IAM 角色,請完成下列步驟:
- 在來源帳戶中設定 IAM 角色。
- 修改目標帳戶 IAM 角色的信任政策,以允許來源帳戶的 IAM 角色承擔目標帳戶的 IAM 角色。
- 在來源帳戶中建立工作定義,並將在步驟 1 中建立的 IAM 角色定義為 Amazon ECS 任務角色。
解決方法
本文中使用的範例參考兩個不同的 AWS 帳戶:
- 託管 Amazon ECS 任務的來源帳戶: 1111222233334444
- 包含 Amazon ECS 任務所承擔的 IAM 角色 (例如 destination-account-role) 的目的地帳戶: 5555666677778888
在來源帳戶中設定 IAM 角色
將下列政策聲明新增至您的 Amazon ECS 任務角色,以允許該角色在目的地帳戶中承擔 IAM 角色:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::5555666677778888:role/destination-account-role" } }
注意: 請將 5555666677778888 替換為您的任務需要承擔的跨帳戶角色的帳戶 ID,並將 destination-account-role 替換為承擔的角色的名稱。
修改目的地帳戶中 IAM 角色的信任政策
將下列政策聲明新增至目的地帳戶中跨帳戶 IAM 角色的 (destination-account-role) 信任政策:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role" }, "Action": "sts:AssumeRole" }] }
注意: 請將 1111222233334444 替換為存在 ECS 工作 IAM 角色之來源帳戶的帳戶 ID,並將 my-ECS-task-role 替換為您的 ECS IAM 任務角色的名稱。
建立任務定義
建立如下所示的任務定義檔案:
{ "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" }
注意: 對於 taskRoleArn,請使用來源帳戶 IAM 角色的 ARN。
若要註冊任務定義,請對 example-task-def.json 檔案執行下列命令:
aws ecs register-task-definition --cli-input-json file://example-task-def.json
注意: AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 Troubleshoot AWS CLI errors (對 AWS CLI 錯誤進行疑難排解)。此外,請務必使用最新版 AWS CLI。
完成上述步驟後,使用 AWS CLI 執行獨立任務,以在目的地帳戶上承擔 IAM 角色。或者,您可以使用組態檔中的 credential_source 設定。指定 AWS CLI 可在哪裡尋找憑證以承擔附加至 ECS 容器的 IAM 角色。如需更多資訊,請參閱 Assume role credential provider (承擔角色憑證供應商)。
確認任務中的容器可以在目的地帳戶中承擔 IAM 角色並存取資源
-
使用您建立的任務定義來執行任務:
如果您正在 Amazon Elastic Compute Cloud (Amazon EC2) 上執行任務,請使用 docker exec 命令來執行測試。
如果您正在 AWS Fargate 上執行任務,請使用 ECS Exec 執行測試。 -
設定 AWS CLI 組態檔,然後確認任務是否在目的地帳戶中承擔 IAM 角色:
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 < /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" ] }
如果您的輸出類似於上述範例,則帳戶 1111222233334444 中的 ECS 任務可以在帳戶 5555666677778888 中承擔 IAM 角色。ECS 任務可以承擔 IAM 角色來列出 ECS 叢集資源。
相關資訊
Amazon ECS task IAM role (Amazon ECS 任務 IAM 角色)
IAM tutorial: Delegate access across AWS accounts using IAM roles (IAM 教學課程:使用 IAM 角色在 AWS 帳戶之間委派存取權)
What is covered in the AWS SDKs and Tools Reference Guide (AWS SDK 和工具參考指南涵蓋的內容)
Using an IAM role in the AWS CLI (在 AWS CLI 中使用 IAM 角色)
- 語言
- 中文 (繁體)

This article was reviewed and updated on 2026-03-10.