[小ネタ]Security Hub CSPMで利用リージョン以外の検出結果をアーカイブするスクリプト

[小ネタ]Security Hub CSPMで利用リージョン以外の検出結果をアーカイブするスクリプト

2025.11.05

Security Hub CSPM を全リージョン有効化した後に SCP によるリージョン制限を入れたことってありますよね。
こうしたケースの時、制限対象のリージョンの結果が集約リージョンに出力されたまま放置されていることありませんか?

リージョン制限により使用しなくなった検出結果が過去に集約されている場合、それらを SUPPRESSED(アーカイブ)状態に更新することで、現在使用中のリージョンの検出結果のみに絞り込むことができます。

今回は制限されたリージョンの検出結果を一気にアーカイブするスクリプトを作成しました。

作成したスクリプトは Gist に保存してあります。

https://gist.github.com/jun-suzuki1028/f8b95e74d38d9883a2a98b247b5b9982

使用シーン

  • 全リージョンで有効化していた Security Hub CSPM を特定リージョンのみに制限した後
  • 過去に集約された不要なリージョンの検出結果を整理したい場合
  • Security Hub CSPM の検出結果を使用中のリージョンのみに絞りたい場合

AWS CloudShellでの使用方法

AWS CloudShell で以下のコマンドを実行してスクリプトをダウンロードしてください。

curl -O https://gist.githubusercontent.com/jun-suzuki1028/f8b95e74d38d9883a2a98b247b5b9982/raw/archive_security_hub_findings.py

ドライランによる動作確認

スクリプトがダウンロードされたら、一度ドライランで動作を確認しましょう。 --dry-runをつけることで実際の更新はせずに動作の確認が可能です。

$ python3 archive_security_hub_findings.py --dry-run

以下のようなログが出力されるので、問題がないか確認しておきましょう。

2025-11-05 04:35:13,420 - INFO - Security Hub検出結果のアーカイブ処理を開始します(リージョン: ap-northeast-1)
2025-11-05 04:35:13,420 - INFO - 保持対象のリージョン: ap-northeast-1, ap-northeast-3, us-east-1
2025-11-05 04:35:13,915 - INFO - Security Hub検出結果を取得中...
2025-11-05 04:35:14,803 - INFO - 検出結果の取得完了: 合計285件
2025-11-05 04:35:14,804 - INFO - リージョン別検出結果:
2025-11-05 04:35:14,804 - INFO -   ap-northeast-1: 49件 ✓ 保持対象
2025-11-05 04:35:14,804 - INFO -   ap-northeast-2: 11件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   ap-northeast-3: 13件 ✓ 保持対象
2025-11-05 04:35:14,804 - INFO -   ap-south-1: 13件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   ap-southeast-1: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   ap-southeast-2: 24件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   ca-central-1: 13件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   eu-central-1: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   eu-north-1: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   eu-west-1: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   eu-west-2: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   eu-west-3: 13件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   sa-east-1: 13件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   us-east-1: 25件 ✓ 保持対象
2025-11-05 04:35:14,804 - INFO -   us-east-2: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   us-west-1: 13件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO -   us-west-2: 14件 ✗ アーカイブ対象
2025-11-05 04:35:14,804 - INFO - アーカイブ対象の検出結果: 198件(非アクティブリージョン)
2025-11-05 04:35:14,804 - INFO - [ドライラン] 100件の検出結果をアーカイブします
2025-11-05 04:35:14,804 - INFO - アーカイブ進捗: 100/198件
2025-11-05 04:35:14,804 - INFO - [ドライラン] 98件の検出結果をアーカイブします
2025-11-05 04:35:14,804 - INFO - アーカイブ進捗: 198/198

アーカイブ実行

問題なければドライランのオプションを外して実行してください。

$ python3 archive_security_hub_findings.py

実行結果が以下のようにログで出力されます。

2025-11-05 04:41:56,406 - INFO - Security Hub検出結果のアーカイブ処理を開始します(リージョン: ap-northeast-1)
2025-11-05 04:41:56,406 - INFO - 保持対象のリージョン: ap-northeast-1, ap-northeast-3, us-east-1
2025-11-05 04:41:56,491 - INFO - Security Hub検出結果を取得中...
2025-11-05 04:41:57,297 - INFO - 検出結果の取得完了: 合計285件
2025-11-05 04:41:57,297 - INFO - リージョン別検出結果:
2025-11-05 04:41:57,297 - INFO -   ap-northeast-1: 49件 ✓ 保持対象
2025-11-05 04:41:57,298 - INFO -   ap-northeast-2: 11件 ✗ アーカイブ対象
2025-11-05 04:41:57,298 - INFO -   ap-northeast-3: 13件 ✓ 保持対象
2025-11-05 04:41:57,298 - INFO -   ap-south-1: 13件 ✗ アーカイブ対象
2025-11-05 04:41:57,298 - INFO -   ap-southeast-1: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,298 - INFO -   ap-southeast-2: 24件 ✗ アーカイブ対象
2025-11-05 04:41:57,298 - INFO -   ca-central-1: 13件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   eu-central-1: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   eu-north-1: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   eu-west-1: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   eu-west-2: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   eu-west-3: 13件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   sa-east-1: 13件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   us-east-1: 25件 ✓ 保持対象
2025-11-05 04:41:57,299 - INFO -   us-east-2: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   us-west-1: 13件 ✗ アーカイブ対象
2025-11-05 04:41:57,299 - INFO -   us-west-2: 14件 ✗ アーカイブ対象
2025-11-05 04:41:57,300 - INFO - アーカイブ対象の検出結果: 198件(非アクティブリージョン)
2025-11-05 04:41:58,176 - INFO - 100件の検出結果をアーカイブしました
2025-11-05 04:41:58,176 - INFO - アーカイブ進捗: 100/198件
2025-11-05 04:41:58,934 - INFO - 98件の検出結果をアーカイブしました
2025-11-05 04:41:58,935 - INFO - アーカイブ進捗: 198/198

全ての結果がアーカイブされると、再度実行しても対象がないため処理を終了します。

$ python3 archive_security_hub_findings.py --dry-run
2025-11-05 04:44:43,596 - INFO - Security Hub検出結果のアーカイブ処理を開始します(リージョン: ap-northeast-1)
2025-11-05 04:44:43,596 - INFO - 保持対象のリージョン: ap-northeast-1, ap-northeast-3, us-east-1
2025-11-05 04:44:43,681 - INFO - Security Hub検出結果を取得中...
2025-11-05 04:44:43,992 - INFO - 検出結果の取得完了: 合計87件
2025-11-05 04:44:43,993 - INFO - リージョン別検出結果:
2025-11-05 04:44:43,993 - INFO -   ap-northeast-1: 49件 ✓ 保持対象
2025-11-05 04:44:43,993 - INFO -   ap-northeast-3: 13件 ✓ 保持対象
2025-11-05 04:44:43,993 - INFO -   us-east-1: 25件 ✓ 保持対象
2025-11-05 04:44:43,993 - INFO - アーカイブ対象の検出結果: 0件(非アクティブリージョン)
2025-11-05 04:44:43,993 - INFO - アーカイブ対象の検出結果がありません。処理を終了します

コマンドラインオプション

基本オプション

オプション 説明 デフォルト値
--region Security Hubの集約リージョン ap-northeast-1
--active-regions 使用中のリージョンリスト(スペース区切り) ap-northeast-1 ap-northeast-3 us-east-1
--dry-run ドライランモード(実際には更新しない) False

使用例

東京リージョンと大阪リージョンのみを使用してドライランする場合

python3 archive_security_hub_findings.py \
  --active-regions ap-northeast-1 ap-northeast-3 \
  --dry-run

東京リージョンとバージニア北部のみを使用する場合

python3 archive_security_hub_findings.py --active-regions ap-northeast-1 us-east-1

集約リージョンがバージニア北部の場合

python3 archive_security_hub_findings.py --region us-east-1

まとめ

リージョン制限などを追加すると、検出結果を集約していると制限したリージョンの検出結果が残ってしまうケースがあります。
こうしたスクリプトで一気に綺麗にしておくと、Security Hub CSPM の運用のノイズが減るので対応しておきましょう。

この記事をシェアする

FacebookHatena blogX

関連記事