S3
対象コントロール(5 件)
| コントロール | 重大度 | タイトル | 評価方式 | 記事 |
|---|---|---|---|---|
| S3.2 | CRITICAL | S3 汎用バケットでパブリック読み取りアクセスをブロックする | 結果ベース(BPA + ポリシー + ACL の総合判断) | 検証済み |
| S3.3 | CRITICAL | S3 汎用バケットでパブリック書き込みアクセスをブロックする | 結果ベース(BPA + ポリシー + ACL の総合判断) | 検証予定 |
| S3.19 | CRITICAL | S3 アクセスポイントで BPA 設定を有効にする | 設定ベース(アクセスポイントの BPA) | 検証予定 |
| S3.6 | HIGH | S3 汎用バケットポリシーで他の AWS アカウントからのアクセスを制限する | ポリシーベース(Principal のみ評価、Condition は評価しない) | 検証予定 |
| S3.8 | HIGH | S3 汎用バケットで BPA を有効にする | 設定ベース(BPA の 4 設定すべてが有効か) | 検証予定 |
保護レイヤーの整理
S3 のパブリックアクセス防止には複数のレイヤーが存在する。Security Hub CSPM の 5 件のコントロールがそれぞれどのレイヤーをチェックしているかを整理する。各コントロールの評価ロジックは AWS Config ルールの公式ドキュメントで確認できる。
評価方式の違い
5 件のコントロールは、評価方式が大きく 3 種類に分かれる。
| 評価方式 | コントロール | 説明 |
|---|---|---|
| 結果ベース(総合判断) | S3.2, S3.3 | BPA、バケットポリシー、ACL を総合的に評価し、実際にパブリックアクセスが可能かを判断する。BPA を無効化しただけでは FAILED にならない |
| 設定ベース | S3.8, S3.19 | BPA の設定値を直接チェックする。設定が無効であれば即 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 経路 | BlockPublicAcls | IgnorePublicAcls |
| ポリシー経路 | BlockPublicPolicy | RestrictPublicBuckets |
- ACL は 2023 年 4 月以降のバケットではデフォルト無効(
BucketOwnerEnforced)のため、実質的にはポリシー経路が主 - S3.2 と S3.3 の違いは BPA のどの設定を見るかではなく、最終的に「読み取りが可能か」「書き込みが可能か」という判定結果の違い
BPA 設定と S3.2 / S3.3 の関係(検証結果)
バケットポリシーでパブリック読み書きを許可した状態で、ポリシー経路の BPA 設定を変えた場合の検証結果:
| # | レベル | BlockPublicPolicy | RestrictPublicBuckets | S3.2 | S3.3 |
|---|---|---|---|---|---|
| 1 | バケット | false | false | NON_COMPLIANT | NON_COMPLIANT |
| 2 | バケット | false | true | COMPLIANT | COMPLIANT |
| 3 | バケット | true | false | COMPLIANT | COMPLIANT |
| 4 | バケット | true | true | COMPLIANT | COMPLIANT |
| 5 | アカウント | true | true | COMPLIANT | COMPLIANT |
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 BPA | Declarative Policy | S3.2, S3.3, S3.8, S3.19 | 組織レベルで BPA を強制。finding への影響は検証で確認 |
| CT.S3.PV.4 | RCP | S3.6 | 組織外アクセスをブロック。RCP はリソースポリシーを書き換えないため finding は PASSED に変わらない |
検証の観点
S3 の 5 件はすべてデフォルトで保護済み(要検証)に分類されている。Security Hub CSPM のまとめページで定義したパターン A に従い、以下の観点で検証する。
- 検出対象が何か(何の設定をチェックしているか)
- パブリックアクセスのみか、クロスアカウントアクセスも検出するか
- IAM Access Analyzer の対象リソースであれば、検出範囲の対比
- デフォルトで保護されているか
- 何をやったら検出するか(ユーザーの誤操作を想定した設定変更)
- Config ルールで強制的に finding 生成 → FAILED 確認
- 設定を戻す → PASSED に戻るか確認
- 設定変更を防ぐための手段(予防コントロール → カスタム SCP → Config ルールと修復)
- 予防手段を適用した後、Security Hub finding の状態はどうなるか