Security Hubの脅威検出をAmazon Managed Grafanaで可視化してみた

Security Hubの脅威検出をAmazon Managed Grafanaで可視化してみた

Clock Icon2025.01.21

クラウド事業本部の梶原@福岡オフィスです。

AWS公式ブログ「Detect and respond to security threats in near real-time using Amazon Managed Grafana」を参考に、実際に環境を構築してみましたので、その手順とカスタマイズした内容などを共有したいと思います。

作成するGrafana Dashboard

securityhub-amazon-managed-grafana-15

はじめに

AWSではセキュリティを最優先事項("job zero")として位置づけています。AWS環境のセキュリティ状態を一元的に監視・可視化できれば、脅威や脆弱性をより早く特定できます。

今回は、公式ブログで紹介されているAWS Security HubとAmazon Managed Grafanaを連携させる方法を実際に試してみました。

なるべく公式ブログと内容が重複しないようにしていますが、テンプレートファイル、ダッシュボードのJSONなどは、公式ブログから変更を加えており、同じものではありませんので、ご留意ください。

また、公式ブログではニアリアルタイムで検出、画面表示が更新されていますが、本ブログではコスト見合いで設定を1日1回に変更しています。リアルタイム性が必要な場合は、クローラーの設定などを調整してみてください。

アーキテクチャ概要

公式ブログの構成と同様に以下のアーキテクチャを構築しました。

主なコンポーネントは:

  • AWS Security Hub: セキュリティ検出結果を集約
  • Amazon EventBridge: 新規/更新された検出結果をトリガー
  • AWS Lambda: 検出結果をJSON形式に変換
  • Amazon S3: 変換されたデータを保存
  • AWS Glue: データカタログ化
  • Amazon Athena: S3データのクエリ実行
  • Amazon Managed Grafana: ダッシュボード表示

事前準備

環境構築の前に以下の準備が必要となります。なお、Security Hub の統合設定、Amazon Managed Grafana の認証(AWS IAM Identity Center を使用) のため、Organizations環境下で構築しています。

  1. AWS Security Hubの有効化
  2. Security Hub管理者アカウントの設定
  3. リージョン間集約の有効化
  4. Amazon Athenaワークグループの設定
  5. Amazon Managed Grafanaワークスペースの作成

簡単にですが、設定手順、確認内容を記載します。

1. AWS Security Hubの有効化

集約したいアカウント毎にAWS Security Hubが有効化されていることを確認します。

手順

  1. AWS Management Consoleにログイン
  2. Security Hubのコンソールに移動
  3. 「Security Hubを有効化」ボタンをクリック

securityhub-amazon-managed-grafana-1

確認ポイント

  • 有効化後、以下の画面が表示されることを確認
  • なんらかセキュリティ標準が有効化されていることを確認
    • AWS基礎セキュリティのベストプラクティス
    • CIS AWS Foundations Benchmark
    • PCI DSS

なお、各セキュリティ標準は必須ではないので、有効になっている事を確認してください。

2. Security Hub管理者アカウントの設定

手順

  1. Organizations管理アカウントにログイン
  2. Security Hubコンソールで「管理者アカウント」タブを選択
  3. 委任する管理者アカウントを選択

securityhub-amazon-managed-grafana-2

確認ポイント

  • 委任された管理者アカウントに以下の権限があることを確認
    • メンバーアカウントの招待/管理
    • 集約された結果の表示
    • セキュリティスコアの確認

3. リージョン間集約の有効化

手順

  1. Security Hubコンソールの設定に移動
  2. 「リージョン間集約」を選択
  3. 集約リージョンを選択(例:us-east-1)
  4. リンクするリージョンを選択

securityhub-amazon-managed-grafana-3

確認ポイント

  • 集約リージョンに検出結果が表示されることを確認

4. Amazon Athenaワークグループの設定

手順

  1. Athenaコンソールに移動
  2. 「ワークグループ」を選択
  3. 以下の設定を行う
    • ワークグループ名: primary
    • クエリ結果の場所: s3://aws-athena-query-results-ap-northeast-1-XXXXXXXX/
    • バケット所有者にクエリ結果に対する完全なコントロールを割り当てる ON

securityhub-amazon-managed-grafana-4

securityhub-amazon-managed-grafana-5

確認ポイント

  • クエリ実行権限が正しく設定されていることを確認
  • 結果出力用のS3バケットにアクセス可能なことを確認
  • バケット所有者にクエリ結果に対する完全なコントロールを割り当てる
    • Grafanaからクエリを実施した後に、結果を取得するために必要です

5. Amazon Managed Grafanaワークスペースの作成

手順

  1. Amazon Managed Grafanaコンソールに移動
  2. 「ワークスペースの作成」をクリック
  3. 以下の設定を行う
    • ワークスペース名: SecurityMonitoring (何でもいいです)
    • 認証方式: AWS IAM Identity Center
    • サービスマネージドIAMロール: 有効化
    • プラグイン管理をオンにする
    • データソース
      • Amazon Athena を選択

securityhub-amazon-managed-grafana-6

securityhub-amazon-managed-grafana-7

securityhub-amazon-managed-grafana-8

確認ポイント

  • ワークスペースのステータスが「ACTIVE」になることを確認
  • IAM Identity Centerでのユーザー認証が機能することを確認
  • 必要なIAMロールとポリシーが作成されていることを確認

確認用チェックリスト

  • Security Hubが正常に有効化されている
  • 管理者アカウント(もしくは委任アカウント)で他アカウントの検出結果が表示される
  • リージョン間の検出結果が正しく集約されている
  • Athenaでテストクエリが実行できる
  • Grafanaワークスペースにログインできる

これらの準備が整えば、次のステップであるCloudFormationテンプレートのデプロイに進むことができます。

構築手順

1. CloudFormationテンプレートのデプロイ

こちらのCloudFormationテンプレートを使用して、管理アカウントもしくは、委任アカウントに必要なリソースをデプロイします。

なお、公式ブログより以下の変更を行っています。

Glue Crawler

公式ブログではFindingsが検出されたタイミングでLambdaよりクローリングが予備だされていましたが、1日1回の実行に変更しています。また、タイミングによってはGrafanaでスキーマの不一致が検出されますので、クローリング時にスキーマとデータベースカタログの更新を実施しています。

SecurityHubGlueCrawler:
  Type: AWS::Glue::Crawler
  Properties:
    Name: aws-securityhub
    Role: !Ref SecurityHubGlueCrawlerRole
    DatabaseName: aws-securityhub-db
    Targets:
      S3Targets:
        - Path: !Ref AWSSecurityHubBucket
    Schedule:
      ScheduleExpression: "cron(0 15 * * ? *)" 
    SchemaChangePolicy:
      UpdateBehavior: "UPDATE_IN_DATABASE"

Lambda関数

  • Findingsが検出されるたびに、クローリングを呼び出していましたが、上記コスト見合いでクローリング開始関数 start_crawler() をコメントアウトしています。
  • なお、ニアリアルタイムで検出したい場合は、更新が必要ですので、コメントアウトを外し、クローリングを行ってください。

Athena 名前付きクエリ

  • LinkedAccountId を AccountId としています。
    • Grafanaダッシュボードでの参照と調整しました。
  • Created_At を CreatedAt としています。
    • Grafanaダッシュボードでの参照と調整しました。
  • テーブルの${AWS::Region} 参照箇所
    • AthenaでGlueでテーブルが作成される際は-は_で変換され、テーブル作成が失敗しますので、調整しました。

2. Amazon Athenaでビューの作成

デプロイが正常に行われると、Athenaに保存されたクエリがありますので実行して、security_hub_findings ビューを作成します。

  • 保存したクエリを選択

securityhub-amazon-managed-grafana-9

  • ワークグループを確認
  • データベースを確認
  • クエリを実行してください

securityhub-amazon-managed-grafana-10

  • 正常に実行されるとsecuriy_hub_findings のビューが作成されます。

3. Grafanaでデータソース設定

Amazon Athenaをデータソースとして設定します。

  • プラグインのページよりAmazon Athena をインストールします

securityhub-amazon-managed-grafana-11

  • 「Add new datasouce」 を選択し、データソースを設定します
  • default のトグルをON
  • Datasource AwsDataCatalog
  • Database aws-security-db
  • Workgroup primary
  • Output Location s3://grafana-athena-query-result-xxxxxx/

securityhub-amazon-managed-grafana-12

4. ダッシュボードの作成

こちらのJSONファイルをインポートしてダッシュボードを作成します。

なお、公式ブログのJSONよりいくつか調整を行っています。

  • Dashboards よりNew -> Importを選択
    securityhub-amazon-managed-grafana-13

  • DownloadしたJSONファイルをUpLoadしてください

securityhub-amazon-managed-grafana-14

クエリ範囲をダッシュボードの設定から取得

$__timeFilter(createdat) を使って、Where 句を絞り込んでいます。

日付処理を修正

動作確認

ダッシュボードが表示されることを確認してください。なお、公式ブログでは最新の検出に追従するようになっていますが、Glueの課金を抑えるために、1日1回としていますので、Lambdaでクローラを呼ぶ、もしくは、実行回数の設定を見直してください。

securityhub-amazon-managed-grafana-15

動かないときは

Dashborad 上のグラフよりEdit を選択し、クエリーを確認してください

securityhub-amazon-managed-grafana-16

該当するクエリーをGrafana上で実施、もしくは、Athenaじょうのクエリーを実施して、エラー内容を確認して、権限等を修正してください

securityhub-amazon-managed-grafana-17

まとめ

公式ブログの内容を実際に試してみることで、AWS Security HubとAmazon Managed Grafanaの連携させて、可視化させることができました。
Athenaとの連携設定などつまづく部分もありましたが、AWS Security Hubの検出状況がGrafanaで可視化でき、イマドキなダッシュボードだなと思いました。

必要なダッシュボードなども、追加カスタマイズできますので、有用なダッシュボードができたらまた共有したいと思います。
また、今回は Amazon Managed Grafanaで作成しましたが、Organizations環境が用意できない場合(SAML, IAM Identity Center での認証が用意できない場合)Grafana Cloudでも同様に作成できますので、機会があれば、試したいと思います。

補足ですが、SecurityHubの情報をGrafanaから直接参照しているわけではなく、検出した内容をS3に保存して、そのデータを可視化していますので、AWSコンソールのSecurityHubの集計とは一致しない場合はありますのでご留意ください。

参考文献

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.