同一アカウントのIAMロールには対象バケットのオブジェクトにs3:GetObjectのAllowがあり、他の許可前提も成立している。指定VPC Endpointを通らないGetObjectは、IAMのAllowがあっても拒否したい。
対象はIAMロールから直接行うGetObjectであり、AWSサービスの代理呼び出しの扱いは本問の範囲外とする。コンソール読み取りの例外は不要。Endpointとルートは準備済みで、指定Endpoint経由の正当な読み取りは維持する。
要件を満たすバケットポリシーの変更はどれか。
対象GetObjectに経路外を拒否する明示Denyを適用し、指定Endpoint経由の既存許可を維持する。
詳細解説
Endpoint policyはそのEndpointを使う要求を制御する。Endpointを経由しない要求をバケット側で拒否する代わりにはならず、IAMやbucket policyも置き換えない。
条件の向きが逆で、維持したいEndpoint経由の読み取りを拒否する。指定IDと一致しない要求を拒否する条件にし、両経路の実結果を確認する。
明示Denyは既存のIAM Allowより優先される。指定Endpoint以外やSourceVpceがない直接要求を拒否し、指定Endpointでは既存の許可と他の前提で読み取りを評価する。Denyの対象外であるだけでは許可を新設したことにならない。
同一アカウントの既存IAM Allowが他経路でも有効なため、条件付きAllowを追加しただけでは他経路の許可を消せない。経路外を拒否するDenyが必要である。
公式資料で確認する
以下の項目を公式資料の記述と照合して確認します。
公式資料の条件評価とポリシー例を確認し、承認された検証バケットで同じロール・オブジェクトを指定Endpoint、別Endpoint、Endpointなしの経路から読み取った結果を比較する。
参考にした公式資料
確認できる内容
指定Endpoint経由は既存権限で許可され、別EndpointまたはSourceVpceがない直接要求は拒否される。管理コンソールのGetObjectも例外ではなく、条件付きAllowやEndpoint policyだけで全経路を制限したとは扱わない。
理解のポイント
- aws:SourceVpce
- StringNotEquals
- S3 bucket policy
確認時の注意
- 確認環境: AWS公式SOA-C03試験ガイドとAWS公式ドキュメントの確認
- AWS公式SOA-C03試験ガイドと各サービスの公式ドキュメントを確認する。
基礎のおさらい
許可の追加と経路外の拒否を区別する
本問の同一アカウントではIAMとリソースポリシーのAllowが評価される。Endpoint条件付きAllowを追加するだけでは、既存IAM Allowによる他経路の読み取りは消えない。対象オブジェクトのs3:GetObjectにEffect=DenyとStringNotEqualsのaws:SourceVpce条件を設定する。明示DenyはAllowより優先される。
Endpoint IDとキーの有無を確認する
aws:SourceVpceはEndpointを使う要求だけに含まれるIDであり、Endpoint ARNを指定する条件ではない。StringNotEqualsでは異なるIDだけでなくキーのない要求も拒否条件に一致する。正しいIDに一致してDeny対象外でも、それ自体はAllowではない。IAM、Endpoint policy、他の拒否・経路の前提も成立している必要がある。
適用範囲と利用経路を確認する
Endpoint policyはそのEndpoint経由の要求を制御し、Endpoint外の要求を拒否するbucket policyを代替しない。本問のDenyはGetObjectが対象なので、コンソールのオブジェクト読み取りも例外ではない。AWSサービスの代理呼び出しは本問の対象外で、実運用ではネットワークcontextが失われる場合の例外・条件を別に設計する。正当な経路と拒否する経路を両方検証する。