AWS Security Hub の FAILED コントロールを CSV 経由で抑制(SUPPRESSED、理由メモ付き)するスクリプトです。CSV をエクスポート、Excel 等で理由を書き込み、再取り込みして一括反映する運用を想定しています。
Security Hub のコントロールを一括で無効化(抑制)する - クラスメソッド発「やってみた」ブログ
このリポジトリのスクリプトは、上記ブログ掲載スクリプトを uv で実行しやすく整えたものです。フィルタ条件・CSV 列構成・UpdateText の判定ロジックはブログ版から変更していません。
- uv
- AWS 認証情報(環境変数、
~/.aws/credentialsの profile、SSO など) - 対象アカウントで以下の IAM 権限
securityhub:GetFindingssecurityhub:BatchUpdateFindingssts:GetCallerIdentity
uv run https://raw.githubusercontent.com/nyankotaro/securityhub-suppress/main/securityhub_suppress.py --help
curl -O https://raw.githubusercontent.com/nyankotaro/securityhub-suppress/main/securityhub_suppress.py
uv run securityhub_suppress.py --help
-
FAILED(WorkflowStatus: NEW)のコントロールを CSV に出力する
uv run securityhub_suppress.py --export findings.csv -
findings.csvのUpdateText列を編集する- 空のまま → 何もしない(そのまま NEW を維持)
解除と入力 → 該当リソースの抑制を解除する(Workflow を NEW に戻す)- それ以外の文字列を入力 → その文字列を抑制理由として Note.Text に記録し、Workflow を SUPPRESSED にする
-
編集した CSV を読み込んで一括反映する
uv run securityhub_suppress.py --suppress findings.csv "自分の名前" -
抑制済み(WorkflowStatus: SUPPRESSED)のコントロールを CSV に出力して結果を確認する
uv run securityhub_suppress.py --export-suppressed suppressed.csv
uv run securityhub_suppress.py --export findings.csv --profile my-profile --region ap-northeast-1
未指定時は環境変数や ~/.aws/config のデフォルト設定に従います。
| 列名 | 内容 |
|---|---|
| ControlId | Finding ID から抽出したコントロールID |
| Id | Finding ID |
| ProductArn | Finding の ProductArn |
| ResourceId | 先頭リソースの ID(リソースがない場合は空) |
| UpdateText | 編集対象。空欄で出力される |
| 列名 | 内容 |
|---|---|
| ControlId | Finding ID から抽出したコントロールID |
| Id | Finding ID |
| ProductArn | Finding の ProductArn |
| ResourceId | 先頭リソースの ID(リソースがない場合は空) |
| Text | 現在の抑制理由(既存の Note.Text)。読み取り専用の参考情報 |
| UpdateText | 編集対象。空欄で出力される |
- 空文字 → 何もしない
解除→ Workflow を NEW に戻す。Note.Text は"SUPPRESSED -> NEW へ更新"に上書きされる(Note 自体を削除する API がないため)- 上記以外の任意の文字列 → その文字列をそのまま Note.Text として記録し、Workflow を SUPPRESSED にする
CSV の文字コードは utf-8 → cp932 → shift_jis の順で自動判定します。
- PEP 723 インラインメタデータを追加し、
uv runで依存関係インストール不要にした - boto3 クライアント生成(STS / Security Hub)を main() 内、引数パース後に移動し、
--help実行時に AWS 認証が不要になるようにした --profile/--regionオプションを追加したget_findingsの手書き NextToken ループをget_paginator("get_findings")に置き換えた
フィルタ条件・CSV 列構成・UpdateText の判定ロジック・出力メッセージはブログ版と同一です。
MIT License