SCSアイデンティティとアクセス管理
アカウントA のIAMロールから、アカウントB の S3 バケット内オブジェクトを取得する処理が AccessDenied で失敗します。確認したところ、アカウントB のバケットポリシーはアカウントA のロールに s3:GetObject を許可し、アカウントA のロールのIAMポリシーにも s3:GetObject の Allow があります。オブジェクトはアカウントB の顧客管理キー(CMK)による SSE-KMS で暗号化されており、監査要件のため暗号化方式は CMK のまま変更できません。最小権限を保ちつつアクセスを成立させる対応はどれですか。
AアカウントB のバケットポリシーに s3:GetObject に加えて s3:GetEncryptionConfiguration と s3:GetBucketPolicy を追加し、アカウントA のロールが暗号化設定を読み取れるようにする
s3:GetEncryptionConfiguration などのバケットレベル権限は暗号化設定の読み取り用で、オブジェクト復号に必要な KMS 権限とは無関係であり、KMS 権限不足による AccessDenied は解消されない。
BアカウントB の CMK のキーポリシーでアカウントA のロールに kms:Decrypt を許可し、アカウントA 側のIAMポリシーにも当該キーに対する kms:Decrypt を付与する
✓ 正解
SSE-KMS オブジェクトの取得には s3:GetObject に加え KMS の kms:Decrypt が必要で、クロスアカウントではキーポリシーと呼び出し側IAMポリシーの両方で kms:Decrypt を許可する必要があるため、これが正しい対応となる。
CアカウントB でバケットの既定暗号化を SSE-KMS から SSE-S3 に変更し、S3 バケットキーを有効化してクロスアカウントの復号権限が不要になるようにする
SSE-S3 への変更は確かに復号権限を不要にするが、CMK のまま暗号化方式を変更できないという監査要件に明確に違反するため採用できない。
DアカウントB のバケットで「バケット所有者の強制(Bucket owner enforced)」を設定して ACL を無効化し、オブジェクト所有権をアカウントB に統一する
バケット所有者の強制と ACL 無効化はオブジェクト所有権・ACL の取り扱いに関する設定で、KMS の復号権限不足が原因の本件 AccessDenied には効果がなく問題を解決しない。
解説
SSE-KMS(CMK)で暗号化されたオブジェクトを取得するには、S3 の s3:GetObject 権限に加えて、復号のための KMS キーへのアクセス(kms:Decrypt)が必要です。
クロスアカウントでは、リソースベースである CMK のキーポリシーで相手アカウント(またはそのロール)に kms:Decrypt を許可し、かつ呼び出し側であるアカウントA のIAMポリシーでも同キーへの kms:Decrypt を付与する「両側の許可」が必須です。S3 側の権限が揃っていても KMS 権限が欠けると AccessDenied になります。これが暗号化方式を変えずに最小権限でアクセスを成立させる正しい対応です。
選択肢s3:GetEncryptionConfiguration 等の追加は、復号に必要な KMS 権限とは無関係で、AccessDenied は解消しません。
選択肢SSE-S3 への変更は、CMK のまま維持するという監査要件に反するため採用できません。
選択肢バケット所有者の強制(ACL無効化)はオブジェクト所有権・ACL の問題に対する設定で、KMS 復号権限の不足とは無関係であり今回の AccessDenied を解決しません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでSCSを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →