クロスアカウントの AWS Identity and Access Management (IAM) ロールを引き受けようとしました。しかし、次のようなエラーが表示されました。 「An error occurred (AccessDenied) when calling the AssumeRole operation.Check your information or contact your administrator.」
解決策
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
クロスアカウントで IAM ロールを引き受けるには、まず IAM ロールを引き受けたアカウントの権限を編集します。次に、IAM ロールを引き継ぐことを許可する他の AWS アカウントの信頼ポリシーを編集します。
次の例では、2 つのアカウントがあります。1 つは Account_Bob という名前で、もう 1 つは Account_Aliceという名前です。また、Account_Bob には Bob という名前の IAM ユーザーまたはロールがあり、Account_Aliceには Alice という名前の IAM ロールがあります。このシナリオでは、ボブが Alice という名前の IAM ロールを引き受けます。
AssumeRole API コールを複数の AWS アカウントまたはクロスアカウントで使用するには、ロールを引き受ける権限を付与する信頼ポリシーが必要です。
Bobに必要な権限の例:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "PermissionToAssumeAlice",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::Account_Alice:role/Alice"
}
]
}
Aliceに必要な信頼ポリシーの例:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_Bob:user/Bob"
},
"Action": "sts:AssumeRole"
}
]
}
クロスアカウントの IAM ロールを引き受けるための AWS CLI コマンドの例:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name assume-cross-account
詳細については、「AWS CLI を使用して IAM ロールを引き受けるにはどうすればよいですか?」を参照してください。
クロスアカウントの IAM ロールを引き受ける際のエラーを避けるため、ユースケースに合った以下のベストプラクティスに従うようにしてください。
- 引き受けロールの Bob には、API アクション AssumeRoleの権限が必要です。
- Bobとして AWS アカウントにサインインする必要があります。詳細については、「AWS アカウント ID のエイリアスの使用」を参照してください。
- 引き受けている役目、Alice は存在している必要があります。削除されていないことと、Amazon リソースネーム (ARN) が正しく設定されていることを確認してください。
- ロールチェーンを使用する場合は、以前のセッションの IAM 認証情報を使用しないようにしてください。詳しくは、ロールの用語と概念の「ロールチェイニング」セクションを参照してください。
- Account_Bob が AWS Organizations の一部である場合、Account_Bob または Account_Aliceによる AssumeRole アクセスを制限するサービスコントロールポリシー (SCP) が存在する可能性があります。Account_Bob または Account_Aliceによるアクセスを制限する SCP を必ず編集または削除してください。詳細については、SCPを参照してください。
関連情報
IAM 権限のアクセス拒否または不正エラーのトラブルシューティングに役立つデータを取得するにはどうすればよいですか
ユーザーから IAM ロールに切り替える (コンソール)
IAM ロールへの切り替え (AWS CLI)