Security HubとSplunkの連携でセキュリティアラートを一元管理する

先日、AWS Security HubがGA(一般公開)となり、DevelopersIOでも記事になってます!

【祝リリース】Security HubがGAになったので特徴と使い方まとめてみた | DevelopersIO

AWS Security Hubは、セキュリティアラートを一元的に表示して管理し、コンプライアンスチェックを自動化する超便利なものですが、さらに特徴として、サードパーティ製品との連携も可能です。

統合されているサードパーティ製品の一覧はこちら(Product Integrations in AWS Security Hub)にまとめられていますが、その中になんと我らがSplunkが!

Securtiy Hubで統合されたセキュリティインシデントをSplunkに転送することで、手間を省力化しつつ、Splunk上での統合管理が実現できます。Security HubとSplunkの相性は抜群と言えるので、普段SplunkでAWSのログを集約している方は、是非、Security Hubとの統合も試していただければと思います。

セキュリティがハブでSplunkごっつええ感じか…!!

  ( ゚д゚) ガタッ
  /   ヾ
__L| / ̄ ̄ ̄/_
  \/   /

AWS Security Hubとは

AWS Security Hub(統合されたセキュリティ & コンプライアンスセンター)| AWS

AWSで発生する、セキュリテイアラートを一元的に表示して管理し、コンプライアンスチェックを自動化するサービスです。概要は、こちらの記事を参照ください。

Security HubとSplunkの統合手順

WebコンソールからSecurity Hubを開いて、左側メニューの「統合」をクリックすると、連携するサードパーティーの一覧が表示され、その中に、「Splunk:Splunk Enterprise」があります。

まずは、「設定」をクリックし、設定方法を確認していきます。下記GitHubページが表示されるので、このページベースで進めていきます。

splunk/splunk-for-securityHub

設定手順は大きく2つ。

  1. AWS CloudFormationテンプレート実行による、CloudWatch Eventと、関連するLambdaのスタブや動作に必要なIAMロールの作成
  2. Lambda関数のアップロードと転送動作確認

Splunk側の前提条件の確認

Splunk側には、事前に以下の設定が必要となります。

  • HTTP Event Collectorのエンドポイントが稼働している
  • HTTP Event Collector Tokenが以下の設定となっている
    • (必須)グローバル設定で、SSLが有効化されている
    • インデックス確認が有効化されていない
    • sourcetypeはコレクタの設定にかかわらず、aws:securityhubで送信される
    • 他の設定はデフォルトでOK
    • ダッシュボードで確認するために、default index(main)を利用する

以上の条件を満たすように、HTTP Event Collectorを用意しておきます。基本は初期値のままで大丈夫なので、サクッとつくって、トークンの値をメモしておきましょう。

HTTP Event Collectorの設定方法は、こちらを参照してください。上にも書きましたが、SSLの有効化は必須です。

AWS側関連リソースの作成

AWS側関連リソース(CloudWatch Event、Lambda、IAM Role)を作成していきます。専用のCloudFormationが用意されているので、それを実行します。

上で紹介したGitHubページから、security_hub_to_splunk.templateをダウンロード。CloudFormationのメニューからスタック作成します。テンプレートファイルのアップロードで、当該ファイルを指定。

スタックの名前は任意で設定。以下のパラメータを指定して、スタックを作成します。

  • SplunkHECHost
    • HECのURL
    • 例)https://demo.example.com:8088
  • SplunkHECToken
    • HECのToken

CloudFormationの画面に戻り、しばらく待ちます。Stackの状態がCREATE_COMPLETEになり、関連リソースが全て正常に作成されていればOKです。

SecurityHub連携用Lambdaのアップロード

GitHubページより、SecurityHubToSplunkLambda.zipファイルをダウンロードします。

CloudFormationのスタックのリソースタブから、論理IDSecurityHubToSplunkLambdaを探し、物理IDをクリックして、Lambdaコンソールを開きます。こんな画面になりましたかね。

関数コードの「.zipファイルをアップロード」を選択し、SecurityHubToSplunkLambda.zipをアップロードし、右上から、Lambdaを保存します。

設定はこれにて完了。あとは、15分おきにCloudWatch EventからこのLambdaが起動され、うまく行けば、HEC経由でSecurity Hubの内容が、Splunkに転送されます。

CloudWatchLogsにこのように表示されていますでしょうか。

Splunk側でのデータ転送結果確認

Security Hub経由のHECコレクタは、全てsourcetypeが強制的にaws:securityhubになります。

新規サーチ画面を起動し、クエリに以下を入力し検索してみます。

sourcetype="aws:securityhub"

無事、Splunk側にデータが取り込まれていれば、以下のようにSecurity Hubのイベント結果がSplunk側に転送されているのが確認できます。

お疲れ様でした!!

よくあるトラブルについて

よくあるトラブルについて、列挙します。

  1. 検索するときは、sourcetype="aws:securityhubになっていること。また検索日付がログの時間に合致していること
  2. Security HubとCloudFormationテンプレートの実行リージョンが同じであること
  3. Security Hubに検出結果がなくて、Splunk転送が試せない場合は、GuardDutyのサンプルイベント作成機能を利用しましょう(Amazon GuardDutyでサンプルイベントを作成してみた
  4. 何故かうまく動かない場合は、とりあえずLambda(SecurityHubToSplunkLambda)のモニタリングタブをクリックし、ログを確認すること
  5. HTTP Event Collector接続用のトークンは、Lambdaの環境変数で設定されているので、トークンが間違っている場合は、ここを更新すること

Security HubとSplunkの統合で、一括セキュリティログ監視システムを構築しよう

「全てまとめて楽に運用しよう」

Security Hubでは、以下のAWSマネージドサービスの検出結果を集約できます。

  • Amazon GuardDuty
  • Amazon Inspector
  • Amazon Macie

また、Security Hubの固有のチェック機能で、CIS AWS Foundations Benchmarkに基づいたコンプライアンスチェックも実現可能です。

これらセキュリティのコンプライアンスチェックを、普段使い慣れたSplunkで統合的に管理できるのは大きなメリットと言えます。普段、AWSログをSplunk運用されている方は、設定も特に複雑ではないので、一度試してみてはいかがでしょうか。

それでは、今日はこのへんで。濱田(@hamako9999)でした。