Amazon GuardDutyのイベントをSplunkで検索・可視化

re:Invent 2017で発表されたGuardDutyですが、Splunkでそのデータを取り込んで分析できるとのことなので、さっそく試してみました。

記事（英語）
[Splunk Announces New Integrations With Amazon Kinesis Firehose and Amazon GuardDuty
](https://www.splunk.com/en_us/newsroom/press-releases/2017/splunk-announces-new-integrations-with-amazon-kinesis-firehouse-and-amazon-guardduty.html)

# Amazon GuardDutyって？
[Amazon GuardDuty – 継続したセキュリティ監視と脅威の検知](https://aws.amazon.com/jp/blogs/news/amazon-guarduty-continuous-security-monitoring-threat-detection/)

（抜粋）
> GuardDutyは 脅威情報を含む複数のデータストリームから、悪意のあるIPアドレス、デバイスドメインを認識し、あなたのAWSアカウントで悪意のある、もしくは不正な行動があるか特定するために学習します。VPC Flow Logs、CloudTrail のイベントログ、DNS ログを集め組み合わせることにより、GuardDuty は非常に多くのことなったタイプの危険性のある、悪意のある行動を検知します。

なるほど、AWSリソースの脅威を機械学習で発見するんですね。

# Splunkって？
https://www.splunk.com/
ログ分析のソフトウェア。
あらゆるマシンデータをインデックスして検索や可視化、アラート通知や分析ができるっていう優れモノ。

# 設定してみた
5つのステップで設定できます。
1. SplunkにAppインストール
2. Splunk HTTP Event Collector有効化
3. Amazon GuardDuty有効化
4. AWS Lambdaでテンプレから関数作成
5. AWS CloudWatchでGuardDutyとLambdaを設定したルールを作成

ということで、設定方法を書いていきます。

## Splunk設定
まずはデータの受け口であるSplunkの設定から
App入れてHTTP Event Collector (HEC)有効化するだけです。

### Appインストール
このApp↓をSplunkインスタンスにインストールしましょう。
[AWS GuardDuty Add-on for Splunk
](https://splunkbase.splunk.com/app/3790/)

#### （補足）Appインストール方法
Splunkにログインした後、左側のメニューにある歯車アイコンをクリック
<img width="192" alt="Screen Shot 2017-12-14 1.31.38 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/62e26064-e9cb-dfe3-8a0c-f53cb889e145.png">

上記リンク先からAppをダウンロードして **ファイルからAppをインストール** からインスコ、もしくは、 **他のAppを参照** からGuardDutyを検索してインスコ
<img width="398" alt="Screen Shot 2017-12-14 1.35.35 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/8e0740dd-4ba4-5d6e-a309-2800328a9f9c.png">

### データ入力設定
Appインストール完了後、ログイン後のトップ画面に **aws_guardduty** というAppが追加されています。
<img width="209" alt="Screen Shot 2017-12-14 1.38.53 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/6235e632-3d2e-7d1f-bcfe-36297255cc26.png">

早速 **aws_guardduty** に移動
<img width="662" alt="Screen Shot 2017-12-14 1.41.51 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/5112d776-361d-921c-4db5-bf7cbc68d4a2.png">

まだ何もデータが入ってきていない状態なので、データ受け取りとしてHTTP Event Collectorを設定します。

右上の **設定** から **データ入力** をクリック
<img width="633" alt="Screen Shot 2017-12-14 1.42.50 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/08b61bfa-91bd-dfb4-253a-fe1657c9aede.png">

**HTTPイベントコレクタ** をクリック
<img width="571" alt="Screen Shot 2017-12-14 1.44.07 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/e8ba07cb-e528-1c93-81b6-263a6ecb9d78.png">

別の記事でHECの設定方法は書いたので、これ以降の手順は割愛します。こちらを参照ください。
https://qiita.com/kikeyama/items/515d65906537239e04d2#splunk%E3%81%AE%E8%A8%AD%E5%AE%9A

（注意）ソースタイプは `aws:cloudwatch:guardduty` を選択してください。

設定後のトークンはどこかにコピペしておいてください。

## GuardDuty設定
AWSコンソールからAmazon GuardDutyに行って有効化。

**今すぐ始める** をクリック
<img width="1144" alt="Screen Shot 2017-12-14 1.15.38 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/bed96711-4b02-3313-4bef-f5fb754c4513.png">

**GuardDutyの有効化** をクリック
<img width="1179" alt="Screen Shot 2017-12-14 1.16.47 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/856fcb4f-5e95-53bb-8be5-ef5766c8a949.png">

GuardDuty設定は完了
<img width="1267" alt="Screen Shot 2017-12-14 1.20.55 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/662e6dd2-e255-6534-a4f4-71f8240bf109.png">

今はまだ空っぽですけど、とりあえずGuardDutyの設定はこれでおしまいです。

## Lambda設定
まずは **関数の作成**
これでSplunkにHTTPでイベントをPOSTするインターフェースを作ります。
<img width="1231" alt="Screen Shot 2017-12-14 1.49.39 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/26008d22-d294-a84e-23cb-aac598a98d16.png">

**設計図 (Blueprints)** を選択して、検索画面に `splunk` と入力して検索
<img width="983" alt="Screen Shot 2017-12-14 1.51.43 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/4e85dbef-44f3-8eef-8fac-f01a9e01c8a1.png">

**Splunk Logging** を選択
<img width="1158" alt="Screen Shot 2017-12-14 1.53.08 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/e59a0fc7-de94-f2e7-771a-c15931e0fc3b.png">


下にスクロールすると環境変数の設定があるので、こちらにSplunkのHECエンドポイントURLとトークンを設定
![Screen Shot 2017-12-14 1.58.09 PM_mosaic.png](https://qiita-image-store.s3.amazonaws.com/0/174837/b1d3eb09-8f65-19d2-2e8b-5356510bd689.png)

で、名前をつけて保存

その後、作成した関数を編集して `sourcetype` の値を `aws:cloudwatch:guardduty` に上書き

```index.js
    // Advanced:
    // Log event with user-specified request parameters - useful to set input settings per event vs token-level
    // Full list of request parameters available here:
    // http://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector
    logger.logEvent({
        time: Date.now(),
        host: 'serverless',
        source: `lambda:${context.functionName}`,
        sourcetype: 'aws:cloudwatch:guardduty',
        event: event,
    });
```


## CloudWatch設定
ルールを一個作りましょう
<img width="532" alt="Screen Shot 2017-12-14 2.08.15 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/574b107c-5452-c8f2-a9ed-a4a75763b9b9.png">


サービス名は `GuardDuty` 、ターゲットは `Lambda関数` から、先ほど作成したLambda関数を選択
<img width="1080" alt="Screen Shot 2017-12-14 2.09.28 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/5078c638-eb05-142e-7783-7ce7be16b87e.png">

あとは名前をつけて保存


以上、すべての設定は完了！


# GuardDutyイベントを検索
ということで、しばらく待つとGuardDutyデータがSplunkにインデックスされてきました。

![Screen Shot 2017-12-14 2.16.08 PM_mosaic.png](https://qiita-image-store.s3.amazonaws.com/0/174837/963c4e6e-d5f8-03fd-29bd-8853a884e754.png)

## ダッシュボード
GuardDuty Appには既成のダッシュボードがあるようです。

**GuardDuty Examples** からダッシュボードに移動してみましょう
<img width="706" alt="Screen Shot 2017-12-14 2.19.22 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/afa98003-0d87-bc33-7e8d-16a67c1c7643.png">

<img width="1236" alt="Screen Shot 2017-12-14 12.42.27 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/174837/8e70a219-0ffe-073e-5fc6-d7d984f8a06d.png">

早速脅威が検知されてしまったみたいですね・・・。
比較的シンプルなダッシュボードですが、可視化やモニタリングには十分かな、と。
運用してみて足りない部分は自前でダッシュボード作ってみよう。

# 最後に
どうやらダッシュボード内のテーブルをクリックすると、[Splunk App for AWS](https://splunkbase.splunk.com/app/1274/)にドリルダウンできるようです。

Kinesis FirehoseからSplunkにデータを流せるとのことですし、せっかくなので近日中にこのAppも設定してみて記事を書いてみようかなと思います。