S3.8
--profile 指定がない場合は Workload アカウントで実行する。export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。
コントロールの説明
S3 汎用バケットのバケットレベル Block Public Access(BPA)が有効かをチェックする。4 設定(BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets)のいずれかが無効であれば FAILED となる。
S3.2 / S3.3(BPA + ポリシー + ACL の総合判断)とは異なり、BPA の設定値を直接チェックする設定ベースの評価方式である。バケットポリシーや ACL の内容は評価しない。BPA を 1 設定でも無効化すれば即 NON_COMPLIANT になる。
アカウントレベル BPA が有効でも、バケットレベル BPA が無効なら NON_COMPLIANT となる。バケットレベルの設定のみをチェックし、上位レベルは考慮しない(S3.19 と同じ挙動)。
BPA の 4 設定の詳細は BPA について を参照。
対応する Config ルール: S3_BUCKET_LEVEL_PUBLIC_ACCESS_PROHIBITED(変更トリガー)
結果
- デフォルトで作成したバケットは BPA 4 設定すべて有効で PASSED
- 1 設定だけ無効化しても NON_COMPLIANT(4 設定すべて有効でないと COMPLIANT にならない)
- アカウントレベル BPA が有効でも、バケットレベル BPA が無効なら NON_COMPLIANT のまま
- BPA 再有効化で COMPLIANT に復帰
- S3 ポリシー(S3 BPA) を有効化しても NON_COMPLIANT のまま(バケットレベル BPA は変更されないため)
前提条件
| 項目 | 状態 |
|---|---|
| アカウントレベル BPA | 未設定 |
| バケットレベル BPA | 4 設定すべて有効(デフォルト) |
検証の流れ
flowchart LR
A[1. デフォルト状態の確認] --> B[2. テストバケット作成]
B --> C[3. BPA 無効化 →<br>NON_COMPLIANT 確認]
C --> D[4. アカウントレベル<br>BPA の影響確認]
D --> E[5. BPA 再有効化 →<br>COMPLIANT 復帰確認]
E --> F[6. クリーンアップ]
1. デフォルト状態の確認
Security Hub finding の現在の状態を確認
aws securityhub get-findings \
--filters '{
"ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "S3.8"}],
"ComplianceStatus": [{"Comparison": "EQUALS", "Value": "PASSED"}]
}' \
--query 'Findings[*].{ResourceId:Resources[0].Id,Status:Compliance.Status}' \
--region ap-northeast-1[
{
"ResourceId": "arn:aws:s3:::<バケット名>",
"Status": "PASSED"
},
...
]全バケット PASSED。
2. テストバケット作成
aws s3api create-bucket \
--bucket <テストバケット名> \
--create-bucket-configuration LocationConstraint=ap-northeast-1 \
--region ap-northeast-1{
"Location": "http://<テストバケット名>.s3.amazonaws.com/",
"BucketArn": "arn:aws:s3:::<テストバケット名>"
}デフォルトの BPA 設定を確認
aws s3api get-public-access-block \
--bucket <テストバケット名> \
--region ap-northeast-1{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}3. BPA 無効化 → NON_COMPLIANT 確認
BPA を 1 設定だけ無効化
aws s3api put-public-access-block \
--bucket <テストバケット名> \
--public-access-block-configuration \
BlockPublicAcls=false,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true \
--region ap-northeast-1
(出力なし)BPA 設定の確認
aws s3api get-public-access-block \
--bucket <テストバケット名> \
--region ap-northeast-1{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": false,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}Config ルールの手動トリガー
aws configservice start-config-rules-evaluation \
--config-rule-names securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--region ap-northeast-1
(出力なし)Config 評価結果の確認
aws configservice get-compliance-details-by-config-rule \
--config-rule-name securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--query 'EvaluationResults[?EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId==`<テストバケット名>`].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
--region ap-northeast-1[
{
"ResourceId": "<テストバケット名>",
"ComplianceType": "NON_COMPLIANT"
}
]1 設定だけ無効化しても NON_COMPLIANT。S3.2 / S3.3 とは異なり、BPA の設定値を直接チェックするため、バケットポリシーや ACL の有無に関わらず即 NON_COMPLIANT になる。
4. アカウントレベル BPA の影響確認
アカウントレベル BPA が有効でも、バケットレベル BPA が無効なら NON_COMPLIANT のままであることを確認する。
バケットレベル BPA を全無効化
aws s3api put-public-access-block \
--bucket <テストバケット名> \
--public-access-block-configuration \
BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false \
--region ap-northeast-1
(出力なし)バケットレベル BPA の確認
aws s3api get-public-access-block \
--bucket <テストバケット名> \
--region ap-northeast-1{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": false,
"IgnorePublicAcls": false,
"BlockPublicPolicy": false,
"RestrictPublicBuckets": false
}
}アカウントレベル BPA を有効化
aws s3control put-public-access-block \
--account-id <アカウント ID> \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true \
--region ap-northeast-1
(出力なし)アカウントレベル BPA の確認
aws s3control get-public-access-block \
--account-id <アカウント ID> \
--region ap-northeast-1{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}Config ルールの手動トリガー → NON_COMPLIANT のまま確認
aws configservice start-config-rules-evaluation \
--config-rule-names securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--region ap-northeast-1
(出力なし)aws configservice get-compliance-details-by-config-rule \
--config-rule-name securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--query 'EvaluationResults[?EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId==`<テストバケット名>`].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
--region ap-northeast-1[
{
"ResourceId": "<テストバケット名>",
"ComplianceType": "NON_COMPLIANT"
}
]アカウントレベル BPA が有効でも、バケットレベル BPA が無効なら NON_COMPLIANT のまま。S3.8 はバケットレベルの BPA 設定のみをチェックし、上位レベルは考慮しない。
アカウントレベル BPA を元に戻す
aws s3control delete-public-access-block \
--account-id <アカウント ID> \
--region ap-northeast-1
(出力なし)5. BPA 再有効化 → COMPLIANT 復帰確認
BPA 再有効化
aws s3api put-public-access-block \
--bucket <テストバケット名> \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true \
--region ap-northeast-1
(出力なし)BPA 設定の確認
aws s3api get-public-access-block \
--bucket <テストバケット名> \
--region ap-northeast-1{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}Config ルールの手動トリガー
aws configservice start-config-rules-evaluation \
--config-rule-names securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--region ap-northeast-1
(出力なし)Config 評価結果の確認
aws configservice get-compliance-details-by-config-rule \
--config-rule-name securityhub-s3-bucket-level-public-access-prohibited-<サフィックス> \
--query 'EvaluationResults[?EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId==`<テストバケット名>`].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
--region ap-northeast-1[
{
"ResourceId": "<テストバケット名>",
"ComplianceType": "COMPLIANT"
}
]BPA 再有効化で COMPLIANT に復帰。
6. クリーンアップ
aws s3api delete-bucket \
--bucket <テストバケット名> \
--region ap-northeast-1
(出力なし)