Amazon EventBridge の API Destinations で Amazon GuardDuty のログを Splunk Cloud に取り込んでみた
10/3、Splunk 社のパートナー向けオフライン勉強会を開催いただき、AWS のデータ取り込みについてセッションを受講してきました。
本ブログでは、セッション内でご説明いただいた Amazon GuardDuty がイベントを検知し、 EventBridge 経由で Splunk Cloud にデータを送信する方法についてご紹介します。
講師およびハンズオンの概要
- 講師: Splunk APAC クラウドテクニカルストラテジスト Trav Kane(T-REX)さん
- 所要時間: 20分
- 前提知識: Splunk Basic Workshop受講済みレベルの知識(Splunkの不定期開催ワークショップから申し込み可)、AWSサービスに関する一般知識
- ハンズオン資料: こちらに公開されています
- コンテンツ: Lab2 - Setup Eventbridge to send Amazon GuardDuty logs to Splunk using native EventBrirdge PUSH method
- ※本ブログは上記ハンズオン内容に沿った内容となっております。
設定の流れ
- EventBridge に設定する HEC トークンを作成する
- EventBridge で Splunk を API 宛先として設定する
- GuardDuty イベント用に EventBridge ルールを設定する
- ログが流れていることを確認する
構成図
HTTP Event Collector (HEC) を使用します。HTTPS プロトコルで Splunk Cloud のエンドポイントにデータを送信していきます。
それでは早速やってみましょう!
EventBridge に設定する HEC トークンを作成する
まず、HEC トークンを作成するには、HTTP Event Collector を作成します。
- Setting(設定) > Data Input(データ入力)を選択
- HTTP Event Collector を選択
- New Token(新規トークン)を選択
- HEC Token の Name を入力(例:画像)
- 任意で Enable Indexer ack knowledgement を設定する
Enable Indexer ack knowledgement は、取り込だデータの重複や欠落を防ぐための機能です。有効にすることで、Splunk がデータを Indexer に登録した後、ackID というものを発行し、フォワーダーへ通知をする仕組みになっており、ユーザ環境と Splunk Cloud 間での NW 断絶や Splunk インスタンスの停止などに備え、ackID を受けたデータが Indexer に登録されていることを証明するように動作させることができます。
参考:About HTTP Event Collector Indexer Acknowledgment | Splunk Docs
-
NEXT を選択
-
ソースタイプの欄で select(選択)の項目を選択する
-
Select Source Type(ソースタイプの選択)を選択し、既存のソースタイプを選択するか、ここで新たに作成する
-
任意のインデックスを選択する
-
review(確認)して問題なければ Submit(実行)する
- 払い出された HEC Token をどこかにコピーする
EventBridge で Splunk を API 宛先として設定する
EventBridgeでキャプチャしたイベントを Splunk Cloud の RESTful API エンドポイントに送信するために EventBridge で API 送信先の設定を行います。
-
AWS コンソールの Amazon EventBridge 画面で API Destinations(APIの送信先)を選択する
-
Create API Destination(API 送信先を作成)を選択する
-
「API 送信先エンドポイント」に次の形式で入力する
<protocol>://http-inputs-<host>.splunkcloud.com:<port>/<endpoint>
- protocol は、http か https です。サーバ設定に依存します。
- host は、「.splunkcloud.com」の前にあるサブドメイン部分のことです。
- port は、8088 か 443 になります。サーバ設定とライセンスに依存します。
- endpoint は、次の3つのいずれかです。取り込むログ形式に依存します。
- /services/collector/event
- /services/collector/raw
- /services/collector/*
項目 3. の参考元:Splunk Cloud Platform の HTTP イベント コレクターにデータを送信する | Splunk Docs
- 「新しい接続」を選択し、接続先の名前を入力する(画像の例:SplunkConnection)
- 「送信先タイプ」を「パートナー」としてチェック
- 「パートナーの送信先」を「Splunk」として選択
- 「認証タイプ」を「API Key」としてチェック
- 「API キー名」に「Authorization」として入力
- 「値」に「Splunk <HEC Token>」として入力
値の部分は、Splunk の後ろに半角スペースが入ります。また、HEC Token は、「EventBridge に設定する HEC トークンを作成する」の章でコピーしたトークンを使用します。
これで、EventBridge から Splunk に API 送信先の設定が完了しました。
GuardDuty イベント用に EventBridge ルールを設定する
次に EventBridge がどのイベントを監視するのかを決めるルールを作成します。
- Amazon EventBridge の画面で「ルール」を選択する
- 「ルールを作成」を選択する
- 「名前」を入力する(画像の例:SplunkGuardDutyRule)
- 他はデフォルトのまま「次へ」を選択する
- イベントソースの欄で「AWS イベントまたは EventBridge パートナーイベント」を選択する
- イベントパターンの欄でイベントソースに「AWS のサービス」を選択する
- AWS のサービスで「GuardDuty」として選択する
- イベントタイプで「すべてのイベント」として選択して「次へ」を選択する
なお、7, 8 の項目は任意の値に変更することで、他の AWS リソースやサービスのイベントを Splunk に連携出来ます。
- ターゲットタイプで「EventBridge API の宛先」を選択する
- API 送信先で「既存の API 送信先を使用」を選択し、先ほど「EventBridge で Splunk を API 宛先として設定する」で作成した API 送信先を選択する
- 実行ロールで「この特定のリソースについて新しいロールを作成」もしくは「既存のロールを使用」を選択する
11 の実行ロールは新規作成すると AWS アカウントに EventBridge のロールが作成されます。
ここまで出来れば、ログ連携の設定は完了です。
ログを確認してみましょう!Splunk Cloud の Search & Reporting で、最初に HEC の設定で指定したインデックス名とソースタイプを検索。
index=aws-data sourcetype="aws:cloudwatch:guardduty"
すると、GuardDuty のログ(サンプルイベント)を確認することができました!
これでログ取り込みの手順は完了です。お疲れ様でした!
もしも、ログが流れてこない場合は..
次の2つを確認してみてください!
- 1つ目:GuardDuty の設定
設定の「検出結果のエクスポートオプション」を確認します。
時間間隔によって、Event Bridge の更新頻度が変わりますので確認してみてください。
- 2つ目:HEC エントポイントの確認
途中でもお伝えしましたが、Splunk Cloud のトライアル版か有料ライセンス版か、ポートはあってるか、プロトコルはあっているか、「http-input」は入っているか。見てみてください。
Send data to HTTP Event Collector on Splunk Cloud Platform | Splunk Docs
まとめ
今回は HEC を使って Amazon GuardDuty のログ取り込みについて、Splunk Cloud での設定方法をご紹介しました。
Amazon EventBridge の料金
によると、EventBridge の API Destinations は次の料金例の様に低コストでイベントを発行できるのも嬉しいポイントですね!
料金の例
EventBus エンドポイントから HTTP エンドポイントまで 1 か月で 200 万のイベントを呼び出す場合、料金は次のようになります。
月間のイベント = 200 万件のイベント
毎月の API Destination の料金 = 200 万 * 0.20 USD/100 万 = 0.40 USD/月