type
status
date
slug
summary
tags
category
icon
password
书籍
理論
AWS IAM ロールと信頼ポリシーの理解
IAM ロール(Identity and Access Management Role)は、AWS リソースやユーザーに権限を付与するためのものです。特定のロールを他の AWS アカウントのユーザーやサービスが「引き受ける」(assume)ことができるように、信頼ポリシーを設定する必要があります。
信頼ポリシー(Trust Policy)の役割
- 信頼ポリシーは、ロールを引き受けることができるエンティティ(ユーザー、サービス、アカウントなど)を定義します。
- ロールが引き受けられるためには、信頼ポリシーでそのエンティティに対して
sts:AssumeRole
アクションを許可する必要があります。
親アカウントと子アカウント間でのロールの引き受け
- クロスアカウントアクセスの場合、子アカウントのリソース(例:EC2 インスタンス)が親アカウントのロールを引き受けるには、親アカウントのロールの信頼ポリシーで 子アカウントのリソースに対する
sts:AssumeRole
許可が必要です。
- 信頼ポリシーには、子アカウントの AWS アカウント ID もしくは IAM ユーザーやロール を指定し、アクセスを許可します。
ロール引き受けのための設定
- 親アカウントでロールを作成する際、子アカウントの EC2 インスタンスやリソースがそのロールを引き受けられるように設定することが重要です。
- もし、EC2 インスタンスが特定のロールを引き受ける権限がない場合、信頼ポリシーの設定ミスが原因です。
解決策:
- 信頼ポリシーの修正: 親アカウントのロールに対して、子アカウントの EC2 インスタンスが引き受けられるように
sts:AssumeRole
権限を追加します。
- 必要な権限の明示的指定: 子アカウントに対する権限を明示的に許可することが重要です。
結論
クロスアカウントのロール引き受けを正しく設定するには、信頼ポリシーで対象のリソースに対して
sts:AssumeRole
を許可する設定を行う必要があります。この設定が適切でない場合、権限不足のエラーが発生します。実践
略
一問道場
質問 #480
ソリューションアーキテクトは、既存の手動で作成された非本番環境からAWS CloudFormationテンプレートを作成しています。このCloudFormationテンプレートは必要に応じて削除および再作成できます。環境にはAmazon EC2インスタンスが含まれています。EC2インスタンスには、親アカウントでロールを引き受けるために使用されるインスタンスプロファイルがあります。
ソリューションアーキテクトはCloudFormationテンプレートでロールを再作成し、同じロール名を使用します。CloudFormationテンプレートが子アカウントで起動されると、EC2インスタンスは親アカウントでロールを引き受けることができなくなり、権限が不十分だというエラーが発生します。
この問題を解決するためにソリューションアーキテクトは何をすべきですか?
A. 親アカウントで、EC2インスタンスが引き受ける必要のあるロールの信頼ポリシーを編集します。
sts:AssumeRole
アクションを許可する既存のステートメントでターゲットロールARNが正しいことを確認し、信頼ポリシーを保存します。B. 親アカウントで、EC2インスタンスが引き受ける必要のあるロールの信頼ポリシーを編集します。子アカウントのルートプリンシパルに対して
sts:AssumeRole
アクションを許可するステートメントを追加し、信頼ポリシーを保存します。C. CloudFormationスタックを再度更新します。
CAPABILITY_NAMED_IAM
機能のみを指定します。D. CloudFormationスタックを再度更新します。
CAPABILITY_IAM
機能と CAPABILITY_NAMED_IAM
機能の両方を指定します。解説
背景:
- AWS CloudFormation を使って、既存の手動で作成した非本番環境を再現しようとしています。
- この環境には Amazon EC2 インスタンス があり、インスタンスには インスタンスプロファイル が設定されており、これを使って 親アカウント のロール(役割)を引き受ける(assume)ことができます。
- その後、CloudFormation テンプレートでこのロールを再作成し、同じロール名を使用しています。
- しかし、CloudFormation テンプレートを 子アカウント で起動すると、EC2 インスタンスは親アカウントのロールを引き受けられなくなり、「権限不足」 というエラーが表示されます。
問題の本質:
親アカウントのロールに設定されている 信頼ポリシー(trust policy)が、子アカウントの EC2 インスタンスがそのロールを引き受けることを許可していないため、権限エラーが発生しています。
解決方法:
この問題を解決するには、親アカウントのロールの 信頼ポリシー を修正して、子アカウントの EC2 インスタンスがそのロールを引き受けられるようにする必要があります。
各選択肢の説明:
- A. 親アカウントで、EC2 インスタンスが引き受ける必要のあるロールの信頼ポリシーを編集する
- 正しい設定を確認して、ロールが正常に引き受けられるようにする方法です。ターゲットロール ARN(役割の識別子)が正しいことを確認し、設定を保存します。ターゲットロール ARN が正しいかを確認するだけでは、子アカウントからのアクセスを許可する設定にはなりません。
- B. 親アカウントで、EC2 インスタンスが引き受ける必要のあるロールの信頼ポリシーを編集し、子アカウントのルートプリンシパルに対して
sts:AssumeRole
アクションを許可する - これは 正解 です。親アカウントのロールの信頼ポリシーを修正し、子アカウント全体(または子アカウントのルートユーザー)がそのロールを引き受けられるようにする方法です。
- C. CloudFormationスタックを再度更新し、
CAPABILITY_NAMED_IAM
機能のみを指定する - これは 解決策ではありません。
CAPABILITY_NAMED_IAM
は IAM リソースに関連する変更を許可するオプションですが、権限不足の問題の解決には関係ありません。
- D. CloudFormationスタックを再度更新し、
CAPABILITY_IAM
とCAPABILITY_NAMED_IAM
の両方を指定する - これも 解決策ではありません。
CAPABILITY_IAM
とCAPABILITY_NAMED_IAM
を指定することで IAM リソースの変更が許可されますが、根本的な権限不足の問題には関係しません。
正しい解決策:
- B の選択肢が正解です。親アカウントのロールの信頼ポリシーを編集して、子アカウントの EC2 インスタンスがロールを引き受けられるように設定を変更することで、問題を解決できます。
まとめ:
- 親アカウントのロールの信頼ポリシーに 子アカウントの EC2 インスタンスがロールを引き受けることを許可する設定を追加することが、最も効果的な解決方法です。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/17cd7ae8-88e2-8096-885c-eed8b7313b90
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章