同一AWSアカウントのEC2アプリ用ロールを作成する。ロールの操作権限は承認済みS3プレフィックスのGetObjectだけで、他のアクセス前提は成立している。ロールはEC2サービスだけが引き受け、人やLambdaには許可しない。
instance profileにロールを含め、承認されたEC2へ割り当てる。担当者には対象ロールだけのiam:PassRoleと必要なEC2操作権限がある。操作権限を広げずに信頼ポリシーを設定したい。
目的に合う信頼設定はどれか。
EC2への信頼はロールのtrust policy、アプリのGetObjectは操作ポリシー、割り当て担当者はPassRoleとEC2操作権限で制御する。
詳細解説
ロールの操作権限にAssumeRoleを追加しても、EC2がそのロールを引き受ける信頼は設定されない。信頼ポリシーのサービス主体と操作を設定する必要がある。
信頼ポリシーは引き受けるサービスを定義する。引き受けた後のGetObject権限は別の操作ポリシーが定義し、instance profileと割り当て担当者の権限も別途必要になる。
アカウントのroot ARNはそのアカウントへの権限委任を表す。EC2サービスだけを表す指定ではなく、各IAM主体の引き受け権限も別に評価される。
PassRoleは担当者がサービスへロールを渡す許可である。ロール自身の信頼ポリシーや、アプリがS3で行う操作の権限を代わりに設定するものではない。
公式資料で確認する
以下の項目を公式資料の記述と照合して確認します。
検証用ロールの信頼・操作ポリシーとinstance profileの関連付け、担当者のPassRole対象を確認する。EC2上のGetCallerIdentityで使用ロールを確認し、承認済みGetObjectの結果と不要な権限の有無を調べる。
参考にした公式資料
確認できる内容
EC2サービスを信頼し、アプリは対象ロールの一時認証情報で承認済みGetObjectを実行する。サービス信頼、操作権限、割り当て権限が別の設定であると説明できる。
理解のポイント
- trust policy
- instance profile
- iam:PassRole
確認時の注意
- 確認環境: AWS公式SOA-C03試験ガイドとAWS公式ドキュメントの確認
- AWS公式SOA-C03試験ガイドと各サービスの公式ドキュメントを確認する。
基礎のおさらい
信頼と操作権限は別の問いに答える
Effect=Allow、Principal.Service=ec2.amazonaws.com、Action=sts:AssumeRoleはEC2への信頼を表す。S3のGetObjectはロールの操作ポリシーで対象オブジェクトに限定する。信頼を設定してもS3操作を自動で許可するわけではなく、GetObjectを許可してもEC2への信頼にはならない。
ロールをEC2へ渡す経路を確認する
instance profileはEC2に関連付けるロールのコンテナーである。CLIやAPIではロールとprofileの作成・関連付けを区別する。担当者のiam:PassRoleは承認済みロールARNへ限定し、必要なEC2操作権限も確認する。EC2サービスへの信頼だけでは、特定のインスタンスへの割り当てまで限定したことにならない。
主体と実際に使われた権限を確認する
アカウントのroot ARNへの信頼は、そのアカウントへの委任であり、EC2サービス限定ではない。EC2アプリ用ロールとインスタンスの自動生成identity roleも区別する。使用ロール・profile・ポリシーとアプリ操作の結果を確認し、アクセス障害では信頼、割り当て、操作権限を分けて調べる。