コンテンツにスキップ

S3

本ページは構成と方針を整理した段階です。個別コントロールの検証は今後実施し、結果に基づいてブラッシュアップしていきます。

対象コントロール(5 件)

コントロール重大度タイトル評価方式記事
S3.2CRITICALS3 汎用バケットでパブリック読み取りアクセスをブロックする結果ベース(BPA + ポリシー + ACL の総合判断)検証済み
S3.3CRITICALS3 汎用バケットでパブリック書き込みアクセスをブロックする結果ベース(BPA + ポリシー + ACL の総合判断)検証予定
S3.19CRITICALS3 アクセスポイントで BPA 設定を有効にする設定ベース(アクセスポイントの BPA)検証予定
S3.6HIGHS3 汎用バケットポリシーで他の AWS アカウントからのアクセスを制限するポリシーベース(Principal のみ評価、Condition は評価しない)検証予定
S3.8HIGHS3 汎用バケットで BPA を有効にする設定ベース(BPA の 4 設定すべてが有効か)検証予定

保護レイヤーの整理

S3 のパブリックアクセス防止には複数のレイヤーが存在する。Security Hub CSPM の 5 件のコントロールがそれぞれどのレイヤーをチェックしているかを整理する。各コントロールの評価ロジックは AWS Config ルールの公式ドキュメントで確認できる。

評価方式の違い

5 件のコントロールは、評価方式が大きく 3 種類に分かれる。

評価方式コントロール説明
結果ベース(総合判断)S3.2, S3.3BPA、バケットポリシー、ACL を総合的に評価し、実際にパブリックアクセスが可能かを判断する。BPA を無効化しただけでは FAILED にならない
設定ベースS3.8, S3.19BPA の設定値を直接チェックする。設定が無効であれば即 FAILED
ポリシーベースS3.6バケットポリシーの Principal に他の AWS アカウントが含まれていないかをチェックする。Condition は評価しない

S3.2 / S3.3 の評価ロジック

S3.2(読み取り)と S3.3(書き込み)は同じ構造で、以下の両方が満たされれば COMPLIANT となる。

  • BPA がパブリックポリシーを制限している、またはバケットポリシーがパブリックアクセスを許可していない
  • BPA がパブリック ACL を制限している、またはバケット ACL がパブリックアクセスを許可していない

BPA はガードレールであり、BPA を無効化しても、ポリシーと ACL の両方がパブリックアクセスを許可していなければ COMPLIANT のままとなる。

BPA の 4 設定

BPA は「ACL 経路/ポリシー経路」×「予防/事後対応」で分類される(公式ドキュメント)。

経路予防(新規設定をブロック)事後対応(既存設定の効果を無効化)
ACL 経路BlockPublicAclsIgnorePublicAcls
ポリシー経路BlockPublicPolicyRestrictPublicBuckets
  • ACL は 2023 年 4 月以降のバケットではデフォルト無効(BucketOwnerEnforced)のため、実質的にはポリシー経路が主
  • S3.2 と S3.3 の違いは BPA のどの設定を見るかではなく、最終的に「読み取りが可能か」「書き込みが可能か」という判定結果の違い

BPA 設定と S3.2 / S3.3 の関係(検証結果

バケットポリシーでパブリック読み書きを許可した状態で、ポリシー経路の BPA 設定を変えた場合の検証結果:

#レベルBlockPublicPolicyRestrictPublicBucketsS3.2S3.3
1バケットfalsefalseNON_COMPLIANTNON_COMPLIANT
2バケットfalsetrueCOMPLIANTCOMPLIANT
3バケットtruefalseCOMPLIANTCOMPLIANT
4バケットtruetrueCOMPLIANTCOMPLIANT
5アカウントtruetrueCOMPLIANTCOMPLIANT
  • BlockPublicPolicy または RestrictPublicBuckets のどちらか一方が true であれば COMPLIANT
  • ただし BlockPublicPolicy=true, RestrictPublicBuckets=false の組み合わせは、既存のパブリックポリシーが有効なままアクセス可能であり COMPLIANT だが安全ではない(偽陰性)
  • バケットレベルとアカウントレベルのどちらで設定しても有効
  • 両方 false の場合のみ、バケットポリシーの内容が評価され NON_COMPLIANT となる

S3.8 の評価ロジック

BPA の 4 設定BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets)がすべて有効かをチェックする。1 つでも無効であれば NON_COMPLIANT。

S3.19 の評価ロジック

アクセスポイントの BPA 設定が有効かをチェックする。設定ベースの評価。

S3.6 の評価ロジック

バケットポリシーが他の AWS アカウントにブラックリストのアクションs3:DeleteBucketPolicy, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutEncryptionConfiguration, s3:PutObjectAcl)を許可していないかをチェックする。Principal のみを評価し、Condition は評価しない。BPA とは異なるレイヤーであり、BPA が有効でもバケットポリシーの内容自体は変わらない。

予防手段との対応

予防手段種別関連コントロール備考
Declarative Policies — S3 BPADeclarative PolicyS3.2, S3.3, S3.8, S3.19組織レベルで BPA を強制。finding への影響は検証で確認
CT.S3.PV.4RCPS3.6組織外アクセスをブロック。RCP はリソースポリシーを書き換えないため finding は PASSED に変わらない

検証の観点

S3 の 5 件はすべてデフォルトで保護済み(要検証)に分類されている。Security Hub CSPM のまとめページで定義したパターン A に従い、以下の観点で検証する。

  1. 検出対象が何か(何の設定をチェックしているか)
  2. パブリックアクセスのみか、クロスアカウントアクセスも検出するか
  3. IAM Access Analyzer の対象リソースであれば、検出範囲の対比
  4. デフォルトで保護されているか
  5. 何をやったら検出するか(ユーザーの誤操作を想定した設定変更)
  6. Config ルールで強制的に finding 生成 → FAILED 確認
  7. 設定を戻す → PASSED に戻るか確認
  8. 設定変更を防ぐための手段(予防コントロール → カスタム SCP → Config ルールと修復)
  9. 予防手段を適用した後、Security Hub finding の状態はどうなるか