状況
バッチ用のロールで S3 のオブジェクトを読むと、一部だけ AccessDenied になる。読めないのは SSE-KMS(カスタマー管理キー)で暗号化されたオブジェクトで、SSE-S3 のオブジェクトは同じロールで読める。
最も疑わしいのは?
正答
- ロールの IAM ポリシーに s3:GetObject が無い
- バケットのブロックパブリックアクセスが有効
- そのキーでの kms:Decrypt が許可されていない
- バケットのバージョニングが無効になっている
解説
同じロールで SSE-S3 のオブジェクトは読めるので、s3:GetObject の許可とバケット側の設定は機能している。ブロックパブリックアクセスはパブリックなアクセスを止めるもので、同じアカウントのロールからの読み取りには関係しない。バージョニングも読み取りの可否とは関係しない。違いは暗号化方式だけで、SSE-KMS のオブジェクトを読むには、S3 の権限に加えて、そのキーでの kms:Decrypt がキーポリシー(と、キーポリシーが委ねている場合は IAM ポリシー)で許可されている必要がある。読めるものと読めないものの差分から当たりどころを絞るのが、切り分けの基本。
この問題を含む AWS のテストを制限時間つきで解く
AWSクイズへ