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ページが表示されるので、このページベースで進めていきます。
設定手順は大きく2つ。
- AWS CloudFormationテンプレート実行による、CloudWatch Eventと、関連するLambdaのスタブや動作に必要なIAMロールの作成
- 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側に転送されているのが確認できます。
お疲れ様でした!!
よくあるトラブルについて
よくあるトラブルについて、列挙します。
- 検索するときは、
sourcetype="aws:securityhub
になっていること。また検索日付がログの時間に合致していること - Security HubとCloudFormationテンプレートの実行リージョンが同じであること
- Security Hubに検出結果がなくて、Splunk転送が試せない場合は、GuardDutyのサンプルイベント作成機能を利用しましょう(Amazon GuardDutyでサンプルイベントを作成してみた)
- 何故かうまく動かない場合は、とりあえずLambda(SecurityHubToSplunkLambda)のモニタリングタブをクリックし、ログを確認すること
- 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)でした。