AWS Security Hub の検出結果を S3 に CSV/JSON エクスポートしてみた

記事タイトルとURLをコピーする

今日誕生日の人、おめでとうございます🎉 エデュケーショナルサービス課の森純子です。

Security Hub の検出結果(findings)は、コンソールで確認するだけでなく、コンプライアンス報告書や監査証跡として社内共有したい場面も多いはずです。これまでは自前でデータ抽出パイプラインを構築・維持してましたが、2026年10月9日のアップデートで、Security Hub のコンソールからワンクリックで S3 に CSV または JSON(OCSF 形式)としてエクスポートできるようになりました🎉

AWS Security Hub now exports findings to S3 in CSV or JSON format(2026年10月9日):

aws.amazon.com

ということで、やってみました。

本記事の登場サービス

略称 正式名称
Security Hub AWS Security Hub
S3 Amazon Simple Storage Service
KMS AWS Key Management Service
OCSF Open Cybersecurity Schema Framework
IAM AWS Identity and Access Management

対象読者

  • Security Hub の検出結果を Excel や BI ツールで活用したい方
  • コンプライアンス報告・監査証跡として検出結果を定期的に保管したい方
  • Security Hub を運用しているシステム管理者・セキュリティ担当者の方

本記事で分かること

  • Security Hub の検出結果を S3 に CSV または JSON(OCSF 形式)でエクスポートする手順
  • エクスポートに必要な前提条件(S3 バケットポリシー・KMS キーポリシー)の正確な設定内容
  • エクスポートされた CSV の列構成と、各列の意味
  • エクスポート結果を Excel でフィルターして活用する方法
  • 出力ファイルに含まれる機密情報についての注意点

アップデートの内容

What's New の原文を要素ごとに整理します。

  • Security Hub が、検出結果を Amazon S3 に CSV または JSON(OCSF 形式)でエクスポートする機能をサポートするようになった
  • コンプライアンス報告や監査証跡といった用途で、コンソール外での検出結果の活用が必要なセキュリティチームが対象
  • エクスポートは、Security Hub コンソールの全ての検出結果ページ(Threats、Exposure、Vulnerabilities、Posture Management、Sensitive Data、All Findings)から実行できる
  • 自前のデータ抽出パイプラインを構築・維持しなくてよくなる
  • オンデマンドで開始し、結果は指定した S3 バケットに書き込まれる
  • CSV は スプレッドシートでの確認・共有に、JSON(OCSF 形式)は Open Cybersecurity Schema Framework フォーマットが必要な場合に使う
  • Security Hub が利用可能な全ての AWS リージョンで利用可能

前提条件

エクスポートを実行するには、以下の4つが必要です。

  1. Security Hub が有効になっていること
  2. エクスポート先の S3 バケット(Security Hub が書き込める S3 バケットポリシーの設定が必要)
  3. エクスポートファイルの暗号化に使う KMS キー(カスタマーマネージドキーが必要。AWS マネージドキーは使用不可)
  4. エクスポートを実行する IAM ロール・ユーザーの適切な権限(今回は管理者ロールのため問題なし)

検証環境

項目 設定
リージョン ap-northeast-1(アジアパシフィック(東京)リージョン)
エクスポート形式 CSV
エクスポート対象 All Findings(すべての検出結果)
エクスポート先 S3 バケット 今回検証のために新規作成
KMS キー 今回検証のために新規作成(カスタマーマネージドキー)

検証手順と結果

手順1: 前提条件を準備する

エクスポートを実行する前に、S3 バケット、KMS キー、それぞれのポリシーを設定します。

1-1: カスタマーマネージドキー(CMK)を作成する

Security Hub がエクスポートファイルを暗号化するために使う KMS キーを作成します。キーポリシーには、以下の3つのステートメントが必要です。

  • ルートアカウントへの全権限付与
  • Security Hub のエクスポートサービスプリンシパル(exportv2.securityhub.amazonaws.com)への kms:GenerateDataKey、kms:Decrypt の許可(kms:ViaService、aws:SourceAccount、kms:EncryptionContext:aws:s3:arn の条件付き)
  • エクスポートを実行する IAM ロールへの kms:GenerateDataKey、kms:Decrypt の許可(kms:EncryptionContext:aws:s3:arn の条件付き)

重要: サービスプリンシパルは securityhub.amazonaws.com ではなく exportv2.securityhub.amazonaws.com です。誤ったプリンシパルを設定するとエクスポートが失敗します(後述「つまずきポイント」参照)。

キーポリシーの例(各値は環境に合わせて置き換えてください):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnableIAMUserPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::<アカウントID>:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowSecurityHubExportSseKmsWriteViaS3",
      "Effect": "Allow",
      "Principal": {"Service": "exportv2.securityhub.amazonaws.com"},
      "Action": ["kms:GenerateDataKey", "kms:Decrypt"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "s3.<リージョン>.amazonaws.com",
          "aws:SourceAccount": "<アカウントID>",
          "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::<バケット名>"
        }
      }
    },
    {
      "Sid": "AllowSecurityHubExportCallerKeyAccess",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::<アカウントID>:role/<エクスポートを実行するロール名>"},
      "Action": ["kms:GenerateDataKey", "kms:Decrypt"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::<バケット名>"
        }
      }
    }
  ]
}

出典: AWS Security Hub User Guide「Exporting findings from Security Hub to Amazon S3」の「Example – Give Security Hub permission to use a KMS key」セクション 記載 https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-v2-findings-export.html

kms:ViaService – Restricts the export service principal to use the key only through Amazon S3 in the Region you specify.

1-2: S3 バケットを作成し、バケットポリシーを設定する

エクスポート先の S3 バケットを作成し、以下のバケットポリシーを設定します。

バケットポリシーの例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSecurityHubExportsWrite",
      "Effect": "Allow",
      "Principal": {"Service": "exportv2.securityhub.amazonaws.com"},
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:AbortMultipartUpload",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<バケット名>",
        "arn:aws:s3:::<バケット名>/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<アカウントID>"
        }
      }
    }
  ]
}

重要: s3:PutObject だけでなく、s3:GetObject、s3:AbortMultipartUpload、s3:ListBucket も必要です。また、Principal のサービスプリンシパルは exportv2.securityhub.amazonaws.com です。

出典: AWS Security Hub User Guide「Exporting findings from Security Hub to Amazon S3」の「Example – Give Security Hub write access to an S3 bucket」セクション 記載 https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-v2-findings-export.html

s3:GetObject or s3:ListBucket: The export job requires these permissions when writing its output. Without these permissions, the export fails.

手順2: Security Hub を開く

AWS マネジメントコンソールの検索バーで「security hub」と入力し、「Security Hub」を選択します。「Security Hub CSPM」ではなく「Security Hub」を選んでください。

「Security Hub」を選択する

手順3: 「すべての検出結果」ページに移動する

左サイドバーの「すべての検出結果」をクリックします。

「すべての検出結果」ページ、20件以上の検出結果が表示されている

手順4: エクスポートを開始する

右上の「エクスポート」ボタンをクリックします。「エクスポートを作成」画面が開きます。

「エクスポートを作成」画面(設定前)

手順5: スコープを確認する

「スコープ」セクションを展開すると、エクスポートの対象範囲とフィルター条件が確認できます。「すべての検出結果」ページで設定していたフィルターがそのまま引き継がれます。

スコープ展開画面。「輸出範囲: すべての検出結果」「フィルター条件: ステータス = New or In Progress or Other or Unknown, and プロバイダーのステータス != Close」が表示されている

スコープやフィルターを変更したい場合は、元の検出結果ページに戻ってフィルターを調整してから「エクスポート」ボタンをクリックしてください。

手順6: エクスポート設定を入力する

以下の項目を設定して「エクスポートを作成」ボタンをクリックします。

項目 設定内容
エクスポート名 自動で all-findings-YYYYMMDDhhmm 形式の名前が提案される。そのままでよい
エクスポート形式 CSV または JSON(OCSF)を選択する。今回は CSV を選択
S3 送信先 「S3 の参照」ボタンからバケットを選択し、プレフィックスを入力する(例: securityhub/findings/)
KMS キー 作成したカスタマーマネージドキーの ARN を入力する

プレフィックスは S3 コンソール上で事前にフォルダを作成しておく必要はありません。エクスポート時に自動で作成されます。将来的に GuardDuty や Config のエクスポートも同じバケットにまとめる場合は、securityhub/findings/ のようにサービス名をプレフィックスに含めておくと管理しやすくなります。

エクスポートを作成画面(設定後)。S3 送信先と KMS キーが入力されている

手順7: エクスポートの完了を確認する

「エクスポートが正常に作成されました」のバナーが表示され、画面が「輸出」一覧ページに遷移します。ステータスが「実行中」から「成功」に変わるまで数分待ちます。

エクスポート成功バナーとステータス「実行中」

ステータス「成功」、フォーマット CSV、開始から5分で完了

手順8: S3 バケットにファイルが届いていることを確認する

「輸出」一覧の「目的地」列のリンクをクリックして S3 コンソールを開きます。指定したプレフィックスの配下に、エクスポートジョブ ID 名のフォルダが作成され、その中に CSV ファイルが格納されています。

S3 コンソール。「securityhub/findings/`」の中にフォルダが1つ作成されている

フォルダの中に CSV ファイル(249.6 KB)が格納されている

手順9: CSV を Excel で開く

S3 コンソールでオブジェクトを選択して「開く」をクリックすると自動でダウンロードされます。ダウンロードした CSV を Excel で開きます。

Excel で開いた CSV。Finding title、Severity、Resource ID 等の列が確認できる

エクスポートされた CSV の列構成

エクスポートされた CSV にはデフォルトで以下の9列が含まれます。

列名 内容
Finding title 検出結果の名称。どのセキュリティチェックに引っかかったかが分かる
Severity 重大度。Critical、High、Medium、Low、Informational の5段階
Resource ID 検出対象のリソース識別子。リソースの種類によって形式が異なる。EC2 インスタンスや S3 バケットはリソース ID が入るが、IAM ロールや IAM ユーザーの場合はアカウント番号を含む ARN(例: arn:aws:iam::123456789012:role/example-role)がそのまま入る
Created at 検出結果が最初に作成された日時(UTC)
Status ワークフローのステータス。New、In Progress、Resolved、Suppressed などが入る
Finding account 検出結果が属する AWS アカウント ID
Finding region 検出結果が属する AWS リージョン
Findings source 検出結果を生成したサービス(例: AWS)
Finding type 検出結果のカテゴリ。OCSF の分類に基づく値が入る(例: Software and Configuration Checks/Industry and Regulatory Standards、Posture Management)

CSV でエクスポートする場合は、コンソール上で列を追加・削除できます(最大25列)。JSON(OCSF)形式の場合は検出結果の全フィールドが含まれ、列の選択はできません。

CSV をフィルターして活用する

今回の検証環境では合計 967 件の検出結果が出力されました。Excel の Severity 列でフィルターをかけると、重大度ごとの件数と傾向が一目で確認できます。

High(5件)のフィルター結果。VPC セキュリティグループの設定不備、EC2 の IMDSv2 未設定など

Medium(64件)のフィルター結果の一部。MFA 未設定、VPC エンドポイント未設定など

Low(81件)のフィルター結果の一部。検証環境の為IAM ロール・ユーザーの過剰権限が多数だった。お掃除予定

Informational(817件)のフィルター結果の一部。暗号化設定やアクセス制限のベストプラクティス確認項目が大半

  • High(5件): VPC セキュリティグループの設定不備や EC2 の IMDSv2 未設定など、直接的な侵害リスクに繋がる設定ミスが検出されました。件数は少ないですが、優先的に対応すべき項目です。

  • Medium(64件): MFA 未設定、VPC エンドポイント未設定、KMS ポリシーの過剰権限など、複数のサービスにまたがる設定不備が中心でした。

  • Low(81件): IAM ロール・ユーザーの過剰権限や S3 バケットの設定不備が多数を占めました。

  • Informational(817件): 暗号化設定やアクセス制限など、AWS ベストプラクティスへの準拠確認項目が大半を占めました。件数が多く見えますが、情報提供が目的の項目のため、直ちに対応が必要というわけではありません。

CSV にはリソース ID や検出日時も含まれているため、チームで分担して対応する際の一覧表としてそのまま活用できます。

つまずきポイント

エクスポートが「Destination S3 bucket or KMS key policy does not authorize this service to write the export.」で失敗する

S3 バケットポリシーまたは KMS キーポリシーのサービスプリンシパルを誤ると、このエラーになります。

誤り: securityhub.amazonaws.com 正しい: exportv2.securityhub.amazonaws.com

また、S3 バケットポリシーには s3:PutObject だけでなく、s3:GetObject、s3:AbortMultipartUpload、s3:ListBucket も必要です。KMS キーポリシーには kms:ViaService(S3 経由に限定)と kms:EncryptionContext:aws:s3:arn(バケット単位に限定)の条件も必要です。

出典: AWS Security Hub User Guide「Exporting findings from Security Hub to Amazon S3」の「Example – Give Security Hub write access to an S3 bucket」セクション 記載 https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-v2-findings-export.html

exportv2.securityhub.amazonaws.com

コスト

項目 料金
Security Hub のエクスポート機能(本機能) 不明(公式料金ページに記載なし)
S3 への保存 標準ストレージ料金(アジアパシフィック(東京)リージョン: 最初の 50 TB まで $0.025/GB/月)が発生する
KMS カスタマーマネージドキー 月 $1/キー(時間単位で按分)。削除予約中のキーには課金されない

料金: Security Hub のエクスポート機能自体の料金は公式料金ページ(https://aws.amazon.com/security-hub/pricing/)に記載が見当たらず、不明です。S3 への保存(ストレージ料金)と KMS キーの維持費(月 $1/キー)が発生します。今回の検証で出力されたファイルは 249.6 KB であり、ストレージ料金はごくわずかです。S3 ストレージ料金の詳細は Amazon S3 pricing、KMS キー料金の詳細は AWS Key Management Service pricing で確認してください。

利用時の注意点

  1. 1 アカウントで同時に実行できるエクスポートは1つのみ。実行中のエクスポートがある場合は、完了を待つかキャンセルしてから新しいエクスポートを開始する
  2. エクスポートはオンデマンドのみ。定期的な自動エクスポートはサポートされていない(定期エクスポートが必要な場合は Amazon EventBridge + AWS Lambda 等で自動化を検討する)
  3. エクスポートされた CSV の Resource ID 列には、IAM ロール・ユーザーの場合にアカウント番号を含む ARN がそのまま入る。ファイルを社内外に共有する際は、アカウント番号などの機密情報が含まれていないか事前に確認すること

まとめ

  • 2026年10月9日のアップデートで、Security Hub の検出結果を S3 に CSV または JSON(OCSF 形式)でオンデマンドエクスポートできるようになった
  • Threats、Exposure、Vulnerabilities、Posture Management、Sensitive Data、All Findings の全ての検出結果ページからエクスポートを開始でき、そのページのフィルター条件がそのまま引き継がれる
  • 自前のデータ抽出パイプラインが不要になり、コンソールのボタン操作だけで CSV を取得できる
  • エクスポートには S3 バケットポリシーと KMS キーポリシーの事前設定が必要。サービスプリンシパルは exportv2.securityhub.amazonaws.com を使う点に注意
  • エクスポートされた CSV を Excel でフィルターすることで、重大度ごとの傾向把握や対応優先順位付けに活用できる
  • エクスポートファイルには AWS アカウント番号を含む ARN 等の機密情報が含まれる場合があるため、ファイルの取り扱いと共有先には注意が必要

後片付け

本検証で作成したリソースを削除する場合は、以下の順で対応してください。

  1. S3 バケット内のオブジェクトを削除してからバケットを削除する(S3 コンソール → バケットを選択 → 「空にする」→「削除」)
  2. KMS キーを削除予約する(KMS コンソール → キーを選択 → 「キーの削除をスケジュール」→ 最小待機期間7日を設定。待機期間中は料金が発生しない)

参考