コンテンツにスキップ

CT.EC2.PV.7

検証日: 2026-03-14 / リージョン: ap-northeast-1

コントロールの説明

EBS スナップショットのパブリック共有をアカウントレベルでブロックします。

本コントロールは Declarative Policy により、アカウントの「Block Public Access for EBS Snapshots」設定を block-all-sharing に強制します。同じ目的の [CT.EC2.PV.3](SCP)とは以下の点で異なります。

CT.EC2.PV.3(SCP)CT.EC2.PV.7(Declarative Policy)
実装方式ec2:ModifySnapshotAttribute API を拒否アカウントレベルの Block Public Access 設定を強制
既存のパブリック共有維持される(設定もアクセスもそのまま)設定上はパブリック共有のままだが、他アカウントからアクセスできなくなる
Security Hub [EC2.1]既存のパブリック共有が残るため FAILED のまま(属性が維持されるため)Block Public Access により PASSED に変わる(属性が残っていても)
Security Hub [EC2.182]BPA 設定を変更しないため FAILED のままblock-all-sharing に強制されるため PASSED に変わる(EC2.182 の検証で確認済み)
無効化後即座にパブリック共有が可能に戻る即座には復活せず、パブリック共有の再設定が必要(※)
エラーメッセージexplicit deny in a service control policyDeclarativePolicyViolation
Block Public Access の無効化制限しない制限する

※ 今回の検証での観測結果。AWS ドキュメントでは「Block Public Access を無効化すると、以前パブリック共有されていたスナップショットは再びパブリックに戻る」と記載されているが、検証では即座に復活せず再設定が必要だった。タイミング依存の可能性がある。

Security Hub CSPM の [EC2.1] は「EBS スナップショットがパブリック共有されていないか」をチェック(検出)しますが、本コントロールを有効にすることで、パブリック共有の操作自体をブロックし、既存のパブリック共有も実質的に無効化します。なお、Block Public Access はパブリック共有のみを対象としており、特定アカウント ID へのクロスアカウント共有はブロックしない。

EBS の Block Public Access はアカウントレベルの設定のみであり、S3 のようなリソース(バケット)レベルの設定はない。そのため、アカウントレベルで有効化すれば、個々のスナップショットのパブリック共有設定に関わらずパブリック共有がブロックされる。SCP(PV.3)では既存のパブリック共有がそのまま残るため EC2.1 は FAILED のままですが、Declarative Policy(PV.7)では Block Public Access によりパブリック共有が実質無効化されるため、EC2.1 も PASSED に変わります。

検証環境

検証環境の構成図

本記事のコマンドは、--profile 指定がない場合は Workload アカウントで実行する。事前に export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。

検証の流れ

    flowchart LR
    A[1. 事前準備] --> B[2. パブリック共有成功<br>+ 他アカウントから<br>アクセス成功]
    B --> C[3. Security Hub EC2.1<br>で FAILED を確認]
    C --> D[4. CT.EC2.PV.7<br>有効化]
    D --> E[5. Block Public Access<br>設定の変化を確認]
    D --> F[6. Security Hub EC2.1<br>が PASSED に変化]
    D --> G[7. 他アカウントから<br>アクセス不可]
    D --> H[8. 新規パブリック共有<br>拒否を確認]
    D --> I[9. Block Public Access<br>の無効化も拒否]
    E & F & G & H & I --> J[10. CloudTrail<br>で確認]
    J --> K[11. CT.EC2.PV.7<br>無効化]
    K --> L[12. パブリック共有<br>再設定で復活を確認]
  

結果

  • コントロールの有効化前、EBS スナップショットをパブリック共有に設定でき、他アカウント(Audit)からそのスナップショットを使ってボリュームを作成できることを確認できた。
  • Security Hub [EC2.1] でパブリック共有スナップショットが「FAILED」として検出されることを確認できた。
  • コントロールの有効化後、アカウントの Block Public Access 設定が block-all-sharingManagedBy: declarative-policy)に変わることを確認できた。
  • コントロール有効化後、Security Hub [EC2.1] の検出結果が FAILED から PASSED に変わることを確認できた。スナップショットの createVolumePermission 属性(Group: all)自体は残ったままだが、Block Public Access によりパブリック共有が実質的に無効化されるため、EC2.1 は PASSED と判定される。なお、AWS Config ルールの評価は手動トリガー後すぐに COMPLIANT となるが、Config から Security Hub への反映にはさらに数分かかる。
  • 有効化前にパブリック共有されていたスナップショットの属性(Group: all)は残るが、他アカウントからはスナップショットが見えなくなり、ボリューム作成が InvalidSnapshot.NotFound で失敗することを確認できた。
  • 有効化中に新規パブリック共有を試みると、DeclarativePolicyViolation エラーで拒否されることを確認できた。SCP の explicit deny in a service control policy とは異なるエラーメッセージとなる。
  • Block Public Access 設定を手動で無効化しようとしても、同様に DeclarativePolicyViolation で拒否されることを確認できた。
  • コントロールの無効化後、Block Public Access 設定が unblockedManagedBy: account)に戻ることを確認できた。ただし、属性が残っていたスナップショットが即座にパブリックに復活するわけではなく、パブリック共有の再設定が必要だった。
  • 拒否されたイベントが CloudTrail に記録されること、および管理アカウントの Organization Trail(CloudWatch Logs)からも確認できることを確認できた。
  • 有効化中でも、特定アカウント ID への共有(--user-ids)はブロックされないことを確認できた。Block Public Access はパブリック共有のみを制御対象としており、クロスアカウント共有は制御対象外である。

1. 事前準備

アカウントの Block Public Access 設定がデフォルト(unblocked)であることを確認する。

aws ec2 get-snapshot-block-public-access-state
{
    "State": "unblocked",
    "ManagedBy": "account"
}

検証用の EBS ボリュームを作成し、スナップショットを取得する。

aws ec2 create-volume \
  --availability-zone ap-northeast-1a \
  --size 1 \
  --volume-type gp3 \
  --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=ct-ec2-pv7-test}]' \
  --query '{VolumeId:VolumeId,State:State}'
{
    "VolumeId": "<ボリューム ID>",
    "State": "creating"
}

ボリュームが利用可能になったことを確認する。

aws ec2 describe-volumes \
  --volume-ids <ボリューム ID> \
  --query 'Volumes[0].{VolumeId:VolumeId,State:State}'
{
    "VolumeId": "<ボリューム ID>",
    "State": "available"
}

スナップショットを作成する。

aws ec2 create-snapshot \
  --volume-id <ボリューム ID> \
  --description "ct-ec2-pv7-test" \
  --tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=ct-ec2-pv7-test}]' \
  --query '{SnapshotId:SnapshotId,State:State}'
{
    "SnapshotId": "<スナップショット ID>",
    "State": "pending"
}

スナップショットの作成が完了するまで待機する。

aws ec2 describe-snapshots \
  --snapshot-ids <スナップショット ID> \
  --query 'Snapshots[0].{SnapshotId:SnapshotId,State:State}'
{
    "SnapshotId": "<スナップショット ID>",
    "State": "completed"
}

2. コントロール有効化前の確認

スナップショットをパブリック共有に設定する。

aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type add \
  --group-names all
aws ec2 describe-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission
{
    "SnapshotId": "<スナップショット ID>",
    "CreateVolumePermissions": [
        {
            "Group": "all"
        }
    ]
}

他アカウント(Audit)から、パブリック共有されたスナップショットを使ってボリュームを作成できることを確認する。

aws ec2 create-volume \
  --snapshot-id <スナップショット ID> \
  --availability-zone ap-northeast-1a \
  --volume-type gp3 \
  --query '{VolumeId:VolumeId,SnapshotId:SnapshotId,State:State}' \
  --profile Audit
{
    "VolumeId": "<Audit ボリューム 1 ID>",
    "SnapshotId": "<スナップショット ID>",
    "State": "creating"
}

ボリュームが正常に作成されたことを確認する。

aws ec2 describe-volumes \
  --volume-ids <Audit ボリューム 1 ID> \
  --query 'Volumes[0].{VolumeId:VolumeId,State:State}' \
  --profile Audit
{
    "VolumeId": "<Audit ボリューム 1 ID>",
    "State": "available"
}

確認後、このボリュームは削除しておく。

aws ec2 delete-volume --volume-id <Audit ボリューム 1 ID> --profile Audit

3. Security Hub CSPM での検出確認(EC2.1 FAILED)

Security Hub の [EC2.1](EBS snapshots should not be publicly restorable)でパブリック共有スナップショットが検出されることを確認する。

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Value": "EC2.1", "Comparison": "EQUALS"}],
    "AwsAccountId": [{"Value": "<Workload のアカウント ID>", "Comparison": "EQUALS"}],
    "ComplianceStatus": [{"Value": "FAILED", "Comparison": "EQUALS"}]
  }' \
  --query 'Findings[0].{Title:Title,ComplianceStatus:Compliance.Status,Severity:Severity.Label,ResourceId:Resources[0].Id}'
{
    "Title": "EBS snapshots should not be publicly restorable",
    "ComplianceStatus": "FAILED",
    "Severity": "CRITICAL",
    "ResourceId": "AWS::::Account:<Workload のアカウント ID>"
}

EC2.1 の検出結果は個別のスナップショット ARN ではなく、アカウントレベルの ResourceIdAWS::::Account:...)で返る。これは EC2.1 がアカウント内にパブリック共有スナップショットが存在するかどうかをアカウント単位でチェックするためである。

Security Hub の検出はスケジュールベースのため、パブリック共有直後には反映されない場合があります。すぐに確認したい場合は、末尾の「補足: Security Hub の検出を早める方法」を参照してください。

4. 対象の予防コントロールを有効化(例外設定なし)

パブリック共有されたスナップショットが存在する状態のまま、コントロールを有効化する。

Control Tower の管理アカウントで、対象の OU にコントロールが有効になっていないことを確認する。

aws controltower list-enabled-controls \
  --target-identifier <OU の ARN> \
  --profile Master
{
    "enabledControls": []
}

コントロールを有効化する。

aws controltower enable-control \
  --control-identifier arn:aws:controlcatalog:::control/ek6wc2bmgzmho1kk6bn236mqt \
  --target-identifier <OU の ARN> \
  --profile Master
{
    "arn": "arn:aws:controltower:ap-northeast-1:<管理アカウント ID>:enabledcontrol/<enabledcontrol ID>",
    "operationIdentifier": "<オペレーション ID>"
}

有効化が完了するまで待機する。

aws controltower get-control-operation \
  --operation-identifier <オペレーション ID> \
  --query 'controlOperation.{operationType:operationType,status:status,statusMessage:statusMessage}' \
  --profile Master
{
    "operationType": "ENABLE_CONTROL",
    "status": "SUCCEEDED",
    "statusMessage": "Operation was successful."
}

5. Block Public Access 設定の変化を確認

アカウントの Block Public Access 設定が変わったことを確認する。

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

Stateunblockedblock-all-sharing に、ManagedByaccountdeclarative-policy に変わった。Declarative Policy によって設定が強制されていることがわかる。

有効化前にパブリック共有されていたスナップショットの属性を確認する。

aws ec2 describe-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission
{
    "SnapshotId": "<スナップショット ID>",
    "CreateVolumePermissions": [
        {
            "Group": "all"
        }
    ]
}

Group: all の属性はそのまま残っている。ただし、Block Public Access により他アカウントからはアクセスできない状態になっている。

6. Security Hub EC2.1 が PASSED に変化することの確認

コントロール有効化後、Block Public Access が block-all-sharing に変わったことで、パブリック共有スナップショットが実質的にプライベート扱いになる。この状態変化が Security Hub [EC2.1] の検出結果に反映されるかを確認する。

aws securityhub get-findings \
  --filters '{
    "ComplianceSecurityControlId": [{"Value": "EC2.1", "Comparison": "EQUALS"}],
    "AwsAccountId": [{"Value": "<Workload のアカウント ID>", "Comparison": "EQUALS"}],
    "ComplianceStatus": [{"Value": "PASSED", "Comparison": "EQUALS"}]
  }' \
  --query 'Findings[0].{Title:Title,ComplianceStatus:Compliance.Status,Severity:Severity.Label,ResourceId:Resources[0].Id}'
{
    "Title": "EBS snapshots should not be publicly restorable",
    "ComplianceStatus": "PASSED",
    "Severity": "INFORMATIONAL",
    "ResourceId": "AWS::::Account:<Workload のアカウント ID>"
}

ステップ 3 では FAILED / CRITICAL だった検出結果が、PASSED / INFORMATIONAL に変わった。Declarative Policy による Block Public Access の強制により、CSPM の検出が解消されることを確認できた。

Security Hub の検出はスケジュールベースのため、コントロール有効化直後には反映されない場合があります。すぐに確認したい場合は、末尾の「補足: Security Hub の検出を早める方法」を参照してください。

7. 他アカウントからのアクセスがブロックされることの確認

Audit アカウントから、同じスナップショットを使ってボリュームを作成しようとする。

aws ec2 create-volume \
  --snapshot-id <スナップショット ID> \
  --availability-zone ap-northeast-1a \
  --volume-type gp3 \
  --profile Audit
An error occurred (InvalidSnapshot.NotFound) when calling the CreateVolume operation:
Snapshot does not exist

Block Public Access が有効になったことで、他アカウントからはスナップショット自体が見えなくなった。ステップ 2 では同じ操作が成功していたため、Block Public Access によるブロックが機能していることが確認できた。

8. 新規パブリック共有は制限(拒否)されることの確認

aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type add \
  --group-names all
An error occurred (DeclarativePolicyViolation) when calling the ModifySnapshotAttribute operation:
This functionality has been disabled by a Declarative Policy.
Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower.
For details, contact the administrator for your organization.

SCP の場合は explicit deny in a service control policy というメッセージだが、Declarative Policy の場合は DeclarativePolicyViolation というエラーになる。

9. Block Public Access の無効化も拒否されることの確認

aws ec2 disable-snapshot-block-public-access
An error occurred (DeclarativePolicyViolation) when calling the DisableSnapshotBlockPublicAccess operation:
This functionality has been disabled by a Declarative Policy.
Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower.
For details, contact the administrator for your organization.

Declarative Policy で管理されているため、アカウント側で Block Public Access 設定を変更することもできない。

10. CloudTrail での確認

拒否されたイベントが CloudTrail に記録されていることを確認する。

Workload アカウントの CloudTrail イベント履歴から確認する。まずスナップショットのパブリック共有拒否(ステップ 8)のイベントを確認する。

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=ModifySnapshotAttribute \
  --start-time <検索開始時刻> \
  --end-time <検索終了時刻> \
  --query 'Events[].CloudTrailEvent' \
  --output text | jq 'select(.errorCode != null) | {eventName, errorCode, errorMessage}'
{
  "eventName": "ModifySnapshotAttribute",
  "errorCode": "Client.DeclarativePolicyViolation",
  "errorMessage": "This functionality has been disabled by a Declarative Policy. Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower. For details, contact the administrator for your organization."
}

次に Block Public Access の無効化拒否(ステップ 9)のイベントを確認する。

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=DisableSnapshotBlockPublicAccess \
  --start-time <検索開始時刻> \
  --end-time <検索終了時刻> \
  --query 'Events[].CloudTrailEvent' \
  --output text | jq 'select(.errorCode != null) | {eventName, errorCode, errorMessage}'
{
  "eventName": "DisableSnapshotBlockPublicAccess",
  "errorCode": "Client.DeclarativePolicyViolation",
  "errorMessage": "This functionality has been disabled by a Declarative Policy. Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower. For details, contact the administrator for your organization."
}

SCP の場合は errorCodeClient.UnauthorizedOperationerrorMessage にユーザー ARN やリソース ARN が含まれるが、Declarative Policy の場合は Client.DeclarativePolicyViolation で固定メッセージとなる。

管理アカウントの Organization Trail(CloudWatch Logs)からも同じイベントを確認できる。

aws logs start-query \
  --log-group-name "aws-controltower/CloudTrailLogs" \
  --start-time $(date -d '<検索開始時刻>' +%s) \
  --end-time $(date -d '<検索終了時刻>' +%s) \
  --query-string 'fields @timestamp, eventName, errorCode, errorMessage
    | filter errorCode like /DeclarativePolicyViolation/
    | sort @timestamp asc' \
  --profile Master
{
    "queryId": "<クエリ ID>"
}

返却された queryId を指定して結果を取得する。

aws logs get-query-results \
  --query-id <クエリ ID> \
  --query '{results:results,status:status}' \
  --profile Master
{
    "results": [
        [
            {"field": "@timestamp", "value": "2026-03-14 13:54:40.599"},
            {"field": "eventName", "value": "ModifySnapshotAttribute"},
            {"field": "errorCode", "value": "Client.DeclarativePolicyViolation"},
            {"field": "errorMessage", "value": "This functionality has been disabled by a Declarative Policy. Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower. For details, contact the administrator for your organization."},
            {"field": "@ptr", "value": "<ログポインタ>"}
        ],
        [
            {"field": "@timestamp", "value": "2026-03-14 13:55:37.600"},
            {"field": "eventName", "value": "DisableSnapshotBlockPublicAccess"},
            {"field": "errorCode", "value": "Client.DeclarativePolicyViolation"},
            {"field": "errorMessage", "value": "This functionality has been disabled by a Declarative Policy. Custom Message: This action is blocked by a declarative policy that is managed by AWS Control Tower. For details, contact the administrator for your organization."},
            {"field": "@ptr", "value": "<ログポインタ>"}
        ]
    ],
    "status": "Complete"
}

管理アカウントの CloudWatch Logs にも同じ拒否イベントが記録されていることを確認できた。ステップ 8(パブリック共有拒否)とステップ 9(Block Public Access 無効化拒否)の両方のイベントが確認できる。

11. 対象の予防コントロールを無効化

検証完了後、コントロールを無効化する。

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

Block Public Access 設定が元に戻ったことを確認する。

aws ec2 get-snapshot-block-public-access-state
{
    "State": "unblocked",
    "ManagedBy": "account"
}

12. 制限解除の確認

コントロール無効化後、属性に Group: all が残っていたスナップショットが再びパブリックに戻るか確認する。

aws ec2 describe-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission
{
    "SnapshotId": "<スナップショット ID>",
    "CreateVolumePermissions": [
        {
            "Group": "all"
        }
    ]
}

設定上はパブリック共有のままだが、BPA により他アカウントからのアクセスはブロックされた。

aws ec2 create-volume \
  --snapshot-id <スナップショット ID> \
  --availability-zone ap-northeast-1a \
  --volume-type gp3 \
  --profile Audit
An error occurred (InvalidSnapshot.NotFound) when calling the CreateVolume operation:
Snapshot does not exist

パブリック共有を一度解除して再設定すると、他アカウントからアクセスできるようになった。

aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type remove \
  --group-names all

aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type add \
  --group-names all
aws ec2 create-volume \
  --snapshot-id <スナップショット ID> \
  --availability-zone ap-northeast-1a \
  --volume-type gp3 \
  --query '{VolumeId:VolumeId,SnapshotId:SnapshotId,State:State}' \
  --profile Audit
{
    "VolumeId": "<Audit ボリューム 2 ID>",
    "SnapshotId": "<スナップショット ID>",
    "State": "creating"
}

ボリュームが正常に作成されたことを確認する。

aws ec2 describe-volumes \
  --volume-ids <Audit ボリューム 2 ID> \
  --query 'Volumes[0].{VolumeId:VolumeId,State:State}' \
  --profile Audit
{
    "VolumeId": "<Audit ボリューム 2 ID>",
    "State": "available"
}
AWS の公式ドキュメントには「Block Public Access を無効化すると、以前パブリック共有されていたスナップショットは再びパブリックに戻る」と記載されていますが、今回の検証では即座には復活せず、パブリック共有の再設定が必要でした。無効化後の反映タイミングには注意が必要です。

13. クリーンアップ

検証で作成したリソースをすべて削除する。パブリック共有も解除しておく。

# 他アカウントで作成したボリュームを削除
aws ec2 delete-volume --volume-id <Audit ボリューム 2 ID> --profile Audit

# パブリック共有を解除
aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type remove \
  --group-names all

# スナップショットを削除
aws ec2 delete-snapshot --snapshot-id <スナップショット ID>

# EBS ボリュームを削除
aws ec2 delete-volume --volume-id <ボリューム ID>

補足1: クロスアカウント共有はブロックされない

本コントロールの Block Public Access はパブリック共有のみを対象としており、特定アカウント ID への共有はブロックしない。コントロール有効化中に以下を確認した。

aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type add \
  --group-names all
An error occurred (DeclarativePolicyViolation) when calling the ModifySnapshotAttribute operation: This functionality has been disabled by a Declarative Policy. ...
aws ec2 modify-snapshot-attribute \
  --snapshot-id <スナップショット ID> \
  --attribute createVolumePermission \
  --operation-type add \
  --user-ids <組織外アカウント ID>
(出力なし=成功)

Block Public Access は Group: all によるパブリック共有のみを制御対象としており、--user-ids による特定アカウントへの共有は制御対象外である。クロスアカウント共有の制御が必要な場合は、カスタム SCP 等で別途対応する必要がある。

補足2: Security Hub の検出を早める方法

Security Hub のコンプライアンスチェックはスケジュールベース(最大 12 時間間隔)で実行されるため、リソースの変更が即座に反映されない場合がある。検証時など、すぐに検出結果を確認したい場合は、対応する AWS Config ルールの評価を手動でトリガーできる。

Security Hub のコントロールは内部的に AWS Config ルールとして実装されている。EC2.1 に対応する Config ルールは SourceIdentifierEBS_SNAPSHOT_PUBLIC_RESTORABLE_CHECK なので、これを条件にルール名を取得する。

aws configservice describe-config-rules \
  --query 'ConfigRules[?Source.SourceIdentifier==`EBS_SNAPSHOT_PUBLIC_RESTORABLE_CHECK`].ConfigRuleName'

出力例(末尾のハッシュ値は環境ごとに異なる):

[
    "securityhub-ebs-snapshot-public-restorable-check-ab81288f"
]

取得したルール名を指定して、評価を手動トリガーする。

aws configservice start-config-rules-evaluation \
  --config-rule-names <上記で取得したルール名>

数十秒〜数分程度で評価が完了し、結果が Security Hub に反映される。

なお、Security Hub への反映を待たずに Config ルールの評価結果を直接確認することもできる。

aws configservice get-compliance-details-by-config-rule \
  --config-rule-name <上記で取得したルール名> \
  --query 'EvaluationResults[*].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType,ResultRecordedTime:ResultRecordedTime}'
[
    {
        "ResourceId": "<Workload のアカウント ID>",
        "ComplianceType": "COMPLIANT",
        "ResultRecordedTime": "<評価完了時刻>"
    }
]

Config ルールの評価は手動トリガー後すぐに完了するが、Config から Security Hub への反映にはさらに数分かかる。Security Hub が PASSED に変わらない場合は、まず Config の評価結果を確認することで、問題が Config 側か反映ラグかを切り分けられる。

Amazonアソシエイトリンク