GuardDuty のログを Splunk で取り込む


はじめに

Splunk を使って、GuardDuty のデータを収集するとの事。
出来るかどうか知らないので、調べて作ってみたのが今回のお話。

GuardDuty?

AWS のマネージド型脅威検出サービス。
悪意のある操作や不正な動作を継続的に監視し、AWS アカウントとワークロードを保護する。

Splunk?

スプランクと読む。
あらゆる種類のログ、テキスト、数値データをリアルタイムでインデックス化し、検索を出来るようにするソフトウェア。
GuardDuty のログを取り込む事が出来るとの事。

作ってみた

Splunk のインストール

適当に Linux サーバを立てます。今回は、AmazonLinux2 を使いました。
Splunk は Enterprise 版が60日間試用出来るとの事なので、DL してみた。
https://www.splunk.com/ja_jp/download.html

RedHat 系 OS なので、rpm をダウンロードし、インストールした。

# wget のコマンドをコピペできるようになっていたので、そのまま使った
wget -O splunk-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm 'https://www.splunk.com/~~~~~~'
rpm -ivh splunk-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm 

ダウンロード完了後は、/opt 配下にインストールされるので、下記コマンドで Splunk を起動する。

# systemd の登録はめんどくさいからやらなかった
cd /opt/splunk/bin/
./splunk start

初回起動時は利用規約?の表示と管理者ユーザのパスワード設定がある。
起動後は、http://IPアドレス:8000 でコンソールにログイン出来る。

ログイン後、/en-US/app/launcher/home ってなっている URL を /ja-JP/app/launcher/home に変えると、日本語化される。
日本語表示をデフォルトにする方法は調べていない。

プラグインの追加

GuardDuty はそのままでは取り込めないようで、プラグイン?を追加する必要がある
画面左側の Find More Apps をクリックし、guardduty で検索する。
すると、Amazon GuardDuty Add-on for Splunk が検索結果に表示されるので、インストールをする。

インストールする際、Splunk をダウンロード時に作成したユーザID/パスワードを入力する必要あり。

エンドポイントの作成

GuardDuty のログを受け付けるエンドポイント(のトークン)を作成する。
画面上部のメニューに表示されている設定から、データ入力を選択する。

HTTP イベントコレクタを選択する。
グローバル設定から、全トークンを有効に設定する。

次に、新規トークンを作成する。
適当な名前を入力し、次の設定に進む。

ソースタイプを選択に設定し、aws:cloudwatch:guardduty に設定する。
App コンテキストは、aws_guardduty(TA-aws_guardduty) に設定する。
インデックスは分からないから全部選択。デフォルトインデックスもよく分からないから、main を選択した。

で、作成されたトークンは次のステップで使うから忘れないように。

GuardDuty の有効化

前回、CloudFormation で有効化したから割愛。

Lambda の用意

GuardDuty は CloudWatch Events でしか拾えない。拾ったものを Splunk に投げつけるには何かしらの仕組みが必要。
Lambda にそんな設計図(splunk-logging)があらかじめ用意されているので、それを使う。

Lambda の環境変数に下記を設定する。

関数をデプロイ後、一部ソースを修正する。

logger.logEvent({
        time: Date.now(),
        host: 'serverless',
        source: `lambda:${context.functionName}`,
        //sourcetype: 'httpevent', ←これを↓に
        sourcetype: 'aws:cloudwatch:guardduty',
        event: event,
    });

CloudWatch Events の設定

ルールを作成し、GuardDuty に関するイベントを、さっき作った Lambda に紐づける。

完成

あとはデータが流れてくるのを待てばいいだけ。
最初から用意されているダッシュボードを眺めてよう。
あとは、これを使うなら、GuardDuty のマスターアカウントとメンバーの設定をやらないと。。

最後にいつものやつ

弊社ではエンジニアを募集中です。インフラからアプリ、ユーザサポートまで幅広く業務を行ってます。
https://www.nittsu-infosys.com/recruit/2019/index.html