コンテンツにスキップ

EC2.182

検証日: 2026-04-18 / リージョン: ap-northeast-1

コントロールの説明

EBS スナップショットのブロックパブリックアクセス(BPA)設定がアカウントレベルで有効かどうかをチェックする。BPA が unblocked(無効)または block-new-sharing の場合に FAILED となる。block-all-sharing が設定されている場合のみ PASSED となる。

block-new-sharing が FAILED になる理由:Security Hub のドキュメントには「block public access is not enabled to block sharing of Amazon EBS snapshots to all」の場合に FAILED と明記されている。block-new-sharing は新規のパブリック共有をブロックするが、「全てのパブリック共有をブロック(to all)」ではないため NON_COMPLIANT と評価される。

BPA の設定値と意味:

設定値意味
unblockedBPA 無効。スナップショットをパブリック共有できる
block-new-sharing新規のパブリック共有をブロック。既存のパブリック共有は維持される
block-all-sharing全てのパブリック共有をブロック。既存のパブリック共有もアクセス不可になる

対応する Config ルール: EBS_SNAPSHOT_BLOCK_PUBLIC_ACCESS(評価頻度: 変更トリガー)

検証環境

検証環境の構成図

--profile 指定がない場合は Workload アカウントで実行する。export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。

結果

  • デフォルト状態(unblocked)では FAILED
  • block-new-sharing に設定しても FAILED のまま変化しない
  • block-all-sharing に設定すると PASSED
  • unblocked に戻すと FAILED に復帰
  • CT.EC2.PV.3(SCP 型)は ec2:ModifySnapshotAttribute をブロックするだけで BPA 設定を変更しないため、finding には影響しない
  • CT.EC2.PV.7(Declarative Policy 型)を有効化すると finding は PASSED に変化。ただし ebs-snapshot-block-public-accessConfiguration changes 型ルールのため、Declarative Policy による変更は Config が設定変更として認識しない。Security Hub の定期スキャンによる自動更新を待つ必要があり、反映には数時間かかる場合がある
  • CT.EC2.PV.7 は内部的に Organizations ポリシーを使用しているが、Control Tower を使わない環境では Organizations ポリシーを直接設定する方法もある。宣言型ポリシー(EBS Snapshot BPA)を Organizations で直接適用した場合の finding への影響は EBS Snapshot Block Public Access を参照

検証の流れ

    flowchart LR
    A[1. デフォルト状態の確認<br>FAILED] --> B[2. block-all-sharing に設定]
    B --> C[3. PASSED 確認]
    C --> D[4. unblocked に戻す]
    D --> E[5. FAILED 復帰確認]
    E --> F[6. CT.EC2.PV.7 有効化]
    F --> G[7. PASSED に変化することを確認]
    G --> H[8. クリーンアップ]
  

1. デフォルト状態の確認

EBS Snapshot BPA の現在の設定を確認

aws ec2 get-snapshot-block-public-access-state \
  --region ap-northeast-1
{
    "State": "unblocked",
    "ManagedBy": "account"
}

unblocked(BPA 無効)。デフォルトでは保護されていない。

Security Hub finding の現在の状態を確認

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "EC2.182"}],
    "AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
    "WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
    "RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
  }' \
  --query 'Findings[].{ControlId:Compliance.SecurityControlId,Status:Compliance.Status,ResourceId:Resources[0].Id}' \
  --region ap-northeast-1
[
    {
        "ControlId": "EC2.182",
        "Status": "FAILED",
        "ResourceId": "arn:aws:ec2:ap-northeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    },
    {
        "ControlId": "EC2.182",
        "Status": "FAILED",
        "ResourceId": "arn:aws:ec2:ap-southeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    }
]

Security Hub が有効なリージョンごとに finding が生成される。ResourceId はリージョンごとのアカウントレベルリソース(snapshotblockpublicaccess/<アカウント ID>)。

出力件数は Security Hub が有効なリージョン数に依存する。本検証環境では 2 リージョンが有効なため 2 件表示されるが、実際の件数は環境によって異なる。
EC2.182 の ResourceId はスナップショット ARN ではなく、リージョンごとのアカウントレベルリソース(arn:aws:ec2:<リージョン>:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>)である。EBS Snapshot BPA はスナップショット単位ではなくアカウント単位の設定であるため、ResourceId もアカウントレベルになる。Security Hub が有効なリージョンごとに finding が生成される。

2. block-all-sharing に設定

EBS Snapshot BPA はリージョン単位の設定のため、Security Hub が有効な全リージョンで設定する必要がある。

Security Hub が有効なリージョンごとに finding が生成される。設定変更は Security Hub が有効な全リージョンで実施すること。

ap-northeast-1

aws ec2 enable-snapshot-block-public-access \
  --state block-all-sharing \
  --region ap-northeast-1
{
    "State": "block-all-sharing"
}

ap-southeast-1 でも同じコマンドを実行する(--region ap-southeast-1)。

設定の確認

aws ec2 get-snapshot-block-public-access-state \
  --region ap-northeast-1
{
    "State": "block-all-sharing",
    "ManagedBy": "account"
}

3. PASSED 確認

EBS Snapshot BPA はリージョン単位の設定のため、Config ルールのトリガーも全リージョンで実施する。

Config ルール名はリージョンごとに異なるサフィックスが付く。各リージョンのルール名は aws configservice describe-config-rules --query 'ConfigRules[?contains(Source.SourceIdentifier,\EBS_SNAPSHOT_BLOCK_PUBLIC_ACCESS`)].ConfigRuleName’` で確認できる。

Config ルールの手動トリガー(全リージョン)

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ebs-snapshot-block-public-access-6026c41a \
  --region ap-northeast-1
(出力なし)
aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ebs-snapshot-block-public-access-acadb690 \
  --region ap-southeast-1
(出力なし)

Config 評価結果の確認(各リージョン)

aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ebs-snapshot-block-public-access-6026c41a \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<アカウント ID>",
        "ComplianceType": "COMPLIANT"
    }
]

Security Hub finding の PASSED 確認

Config → Security Hub の反映には数分かかる。

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "EC2.182"}],
    "AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
    "WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
    "RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
  }' \
  --query 'Findings[].{ControlId:Compliance.SecurityControlId,Status:Compliance.Status,ResourceId:Resources[0].Id}' \
  --region ap-northeast-1
[
    {
        "ControlId": "EC2.182",
        "Status": "PASSED",
        "ResourceId": "arn:aws:ec2:ap-northeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    },
    {
        "ControlId": "EC2.182",
        "Status": "PASSED",
        "ResourceId": "arn:aws:ec2:ap-southeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    }
]

4. unblocked に戻す

aws ec2 disable-snapshot-block-public-access \
  --region ap-northeast-1
{
    "State": "unblocked"
}

ap-southeast-1 でも同じコマンドを実行する(--region ap-southeast-1)。

設定の確認

aws ec2 get-snapshot-block-public-access-state \
  --region ap-northeast-1
{
    "State": "unblocked",
    "ManagedBy": "account"
}

5. FAILED 復帰確認

Config ルールの手動トリガー

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ebs-snapshot-block-public-access-6026c41a \
  --region ap-northeast-1
(出力なし)

Config 評価結果の確認

aws configservice get-compliance-details-by-config-rule \
  --config-rule-name securityhub-ebs-snapshot-block-public-access-6026c41a \
  --query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
  --region ap-northeast-1
[
    {
        "ResourceId": "<アカウント ID>",
        "ComplianceType": "NON_COMPLIANT"
    }
]

Security Hub finding の FAILED 復帰確認

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "EC2.182"}],
    "AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
    "WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
    "RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
  }' \
  --query 'Findings[].{ControlId:Compliance.SecurityControlId,Status:Compliance.Status,ResourceId:Resources[0].Id}' \
  --region ap-northeast-1
[
    {
        "ControlId": "EC2.182",
        "Status": "FAILED",
        "ResourceId": "arn:aws:ec2:ap-northeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    },
    {
        "ControlId": "EC2.182",
        "Status": "FAILED",
        "ResourceId": "arn:aws:ec2:ap-southeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    }
]

6. CT.EC2.PV.7 有効化

CT.EC2.PV.7 は Declarative Policy 型の予防コントロールであり、アカウントレベルの BPA 設定を block-all-sharing に強制する。finding が PASSED に変化するはずである。

aws controltower enable-control \
  --control-identifier arn:aws:controlcatalog:::control/ek6wc2bmgzmho1kk6bn236mqt \
  --target-identifier arn:aws:organizations::<マスターアカウント ID>:ou/<Organization ID>/<OU ID> \
  --region ap-northeast-1 --profile Master
{
    "arn": "<有効化 ARN>",
    "operationIdentifier": "<オペレーション ID>"
}
aws controltower get-control-operation \
  --operation-identifier <オペレーション ID> \
  --query 'controlOperation.{operationType:operationType,status:status}' \
  --region ap-northeast-1 --profile Master
{
    "operationType": "ENABLE_CONTROL",
    "status": "SUCCEEDED"
}

BPA 設定の変化を確認

aws ec2 get-snapshot-block-public-access-state \
  --region ap-northeast-1
{
    "State": "block-all-sharing",
    "ManagedBy": "declarative-policy"
}

7. PASSED に変化することを確認

Declarative Policy による BPA 変更は Config が設定変更として認識しない。Config 手動トリガーでは評価されないため、Security Hub の定期スキャンによる自動更新を待つ必要がある。反映には数時間かかる場合がある。

Security Hub が定期スキャンを実行すると、finding が PASSED に変化する。反映には数時間かかる場合があり、リージョンによってタイミングが異なる。

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "EC2.182"}],
    "AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
    "WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
    "RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
  }' \
  --query 'Findings[].{ControlId:Compliance.SecurityControlId,Status:Compliance.Status,ResourceId:Resources[0].Id}' \
  --region ap-northeast-1
[
    {
        "ControlId": "EC2.182",
        "Status": "PASSED",
        "ResourceId": "arn:aws:ec2:ap-northeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    },
    {
        "ControlId": "EC2.182",
        "Status": "FAILED",
        "ResourceId": "arn:aws:ec2:ap-southeast-1:<アカウント ID>:snapshotblockpublicaccess/<アカウント ID>"
    }
]
リージョン 2 は CT.EC2.PV.7 有効化から数時間以上経過しても FAILED のままだった。リージョン 1 で PASSED に変化したことで、CT.EC2.PV.7 有効化による finding の変化を確認済みとする。
リージョン間の差異について:CT.EC2.PV.7 は Organizations の宣言型ポリシーとして OU 全体に適用されるため、BPA 設定自体は両リージョンで同時に block-all-sharing に変化する(ポリシー伝播の問題ではない)。リージョンによって反映タイミングが大きく異なる場合があり、いつ反映されるか予測できない。ebs-snapshot-block-public-access は Configuration changes 型ルールのため Declarative Policy による変更は Config が設定変更として認識せず、Security Hub の定期スキャンを待つ必要がある。

8. クリーンアップ

CT.EC2.PV.7 の無効化

aws controltower disable-control \
  --control-identifier arn:aws:controlcatalog:::control/ek6wc2bmgzmho1kk6bn236mqt \
  --target-identifier <OU の ARN> \
  --query '{operationIdentifier:operationIdentifier}' \
  --region ap-northeast-1 --profile Master
{
    "operationIdentifier": "<オペレーション ID>"
}
aws controltower get-control-operation \
  --operation-identifier <オペレーション ID> \
  --query 'controlOperation.{operationType:operationType,status:status}' \
  --region ap-northeast-1 --profile Master
{
    "operationType": "DISABLE_CONTROL",
    "status": "SUCCEEDED"
}

補足:Config ルールと Security Hub の反映について

ebs-snapshot-block-public-access は Configuration changes 型ルールである。

手動で BPA を変更した場合enable-snapshot-block-public-access / disable-snapshot-block-public-access)は Config が変更を検知して自動評価される。すぐに確認したい場合は Config ルールを手動でトリガーする。

aws configservice start-config-rules-evaluation \
  --config-rule-names securityhub-ebs-snapshot-block-public-access-6026c41a \
  --region ap-northeast-1
(出力なし)

Config の評価結果が更新された後、Security Hub への反映にさらに数分かかる。

Declarative Policy による BPA 変更(CT.EC2.PV.7 または宣言型ポリシー直接適用)は Config が設定変更として認識しない。手動トリガーを実行しても Config が記録した古い状態で評価されるため NON_COMPLIANT のままとなる。Security Hub の定期スキャンによる自動更新を待つ必要があり、反映には数時間かかる場合がある。

Amazonアソシエイトリンク