Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
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 タスクロールとして定義します。
解決策
この記事で使用されている例では、2 つの異なる AWS アカウントを参照しています。
- Amazon ECS タスクをホストするソースアカウント: 1111222233334444
- Amazon ECS タスクが引き継ぐ destination-account-role など、IAM ロールを含む宛先アカウント: 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 コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、必ず AWS CLI の最新バージョンを使用してください。
前のステップが完了したら、AWS CLI を使用してスタンドアロンタスクを実行し、宛先アカウントで IAM ロールを引き継ぎます。または、設定ファイルで credential_source 設定を使用することもできます。ECS コンテナにアタッチされた IAM ロールを引き継ぐための認証情報を AWS CLI が検索できる場所を指定します。詳しくは、「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 <<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" ] }
出力が前の例と似ている場合、アカウント1111222233334444 の ECS タスクはアカウント 5555666677778888 の IAM ロールを引き継ぐことができます。ECS タスクは、ECS クラスターリソースを一覧表示するための IAM ロールを引き継ぐことができます。
関連情報
IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任

関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 4年前lg...
- AWS公式更新しました 2ヶ月前
- AWS公式更新しました 2ヶ月前
- AWS公式更新しました 20日前
- AWS公式更新しました 3年前