S3 Block Public Accessとバケットポリシーのシナリオ判断
社内資料の公開事故とAccessDeniedを題材に、どの制御層が原因かを判定します。
この単元で学ぶこと
- BPA変更の影響を判断する
- 必要最小限の業務許可を選ぶ
- アクセス拒否の原因を切り分ける
本文解説
1. 最初に要求を書く 設計レビューでは「誰が、どのキーに、何をするか」を先に固定します。給与計算ロールがpayroll/の入力を読み取る要件と、不特定多数へWeb画像を配る要件は異なります。同じバケット設定を理由なく使い回さないでください。
2. 新しい公開ACLが拒否された アップロード処理がpublic-readを付けようとして拒否された場合、公開ACLを求める実装とBlockPublicAclsを確認します。業務要件が非公開ならBPAを解除する前に公開ACLの指定を除く方針を検討します。
3. 残ったACLの評価 過去に付けた公開ACLが残っていてもIgnorePublicAclsが有効ならその公開許可は無視されます。設定を解除すると露出が再発し得るため、既存ACLと所有権設定を点検します。無視と削除は同じではありません。
4. 上位制限を追う バケットで設定を変えてもアカウントや組織等の制限が残ればアクセスは制限されます。障害対策としてすべてのBPAを解除するのではなく、拒否理由と必要な非公開アクセスの許可を区別します。
5. 配下だけ読ませる 報告書アプリがreports/配下だけを読むなら、オブジェクトARNをその配下へ絞ります。一覧が不要ならListBucketは独立して判断します。書込みや削除の許可は読取りのためには不要です。アプリのロールを特定して許可します。
6. Allow追加で直らない例 バケットポリシーが非TLS通信を明示的に拒否している場合、IAMにAllowを追加してもHTTP要求は失敗します。要求をHTTPSへ変更して条件を満たします。Denyの解除ではなく正しい要求へ修正できるかを考えます。
7. 鍵の拒否を区別する SSE-KMSオブジェクトを読むときはKMSキーのポリシーとIAMを含む鍵の使用権限も確認します。S3のGetObjectを許可することだけで全ての復号要求が許されるわけではありません。ログで拒否された操作を特定します。
8. 解除前の試験 BPAを変える前に現行ポリシーを評価し、想定する業務ロール、別ロール、匿名要求の各結果を確認します。公開防止と業務継続の両方を試験します。保存時暗号化が有効であることを匿名読取りの代替試験にしないでください。
図解
重要ポイント
- 拒否された操作と適用された制御を特定する。
- BPA解除前に残存ポリシーを確認する。
- 最小権限は主体・操作・資源を具体化する。
間違えやすい点
- AccessDeniedならBPAを全解除する。
- ListBucketだけで本文が読めると考える。
- 明示的DenyをAllow追加で打ち消す。
用語解説
- AccessDenied
- 要求が認可されないことを表す拒否。
- オブジェクトARN
- バケット内の対象キーを含む資源識別子。
- 最小権限
- 業務に必要な主体・操作・対象だけを許可する考え方。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://docs.aws.amazon.com/aws-certification/latest/solutions-architect-associate-03/solutions-architect-associate-03.html
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。