GitLab Ultimateの監査ログを"リアルタイム"で、Splunkに突っ込む方法

# SIEM対応も備えているので、DevOps全体をカバーするGitLabの監査ログを全部リアルタイムにSplunkに突っ込む方法

## 環境

1. Splunk Enterprise - On-Premise 版
    1. 本来なら、Splunk Cloud を使いたいのですが、まずSplunk Cloudは、私の会社では契約していますが、私自身がもっておりません。Splunk Cloud Trialがありますが、このTrialのHTTP Event Collectorは「オレオレ」証明書をつかっており、この場合、本検証では使えません。そのため、オンプレ版のSplunkを使用します。
    
    Splunk 9.0.4.1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/bff7ccbc-ea05-d3e5-63e4-96def94e87de.png)

1. GitLab Ultimate SaaS版
    1. 本書の執筆時点(2023年5月末)では、16.0バージョン相当なようです。

### Splunkのセットアップ

オンプレのSplunkをセットアップすればいいので、どんな手段でもいいのですが、外からアクセスできる環境が必要です。まさか、自分のパソコンをつかうわけにはいかないので、とりあえず、AWSでSplunkを立てることにします。

https://amzn.to/3IIrJl3
とかを参考にSplunkをオンプレにインストールします。

### GitLabのセットアップ

GitLabに関しては、SaaS版のUltimate版を購入します。
GitLab SaaS版のトライアル版を申し込むのもよいでしょう。30日間はUltimate版と同じ動作をします。

## 動作確認の流れ

### Splunk側での設定

 1. HECの設定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/c8aeadcd-954c-9f1d-4d81-c317d4235f0b.png)
 [Settings]-[DATA]-[Data Inputs]をクリック。

2. HECの追加
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/0f43d92b-9ce8-1b5b-1929-463fa70c28b6.png)
 [Add new]をクリック。

3.HECの設定(続き)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/b590c4d6-4b0e-62de-9fbe-4a7195604f68.png)
[Name]は適当に設定し、また、[Enable indexer acknowledgement]は空欄のままとする。

4.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/2efb4295-5962-2180-8e79-fbf1d0db8e47.png)

Source typeはAutomaticのままとする。
また、Select Allowed Indexesは、mainにしておく。(普通は分けるが、今回はテスト目的)

5.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/3395b7f2-0c29-2dce-3313-328216f32b69.png)

内容を確認して、Submitをクリック。

6.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/0c97bdb4-2f56-bae0-f2e0-ae4503b8a785.png)
灰色表示されている部分にある、「HECトークン」をマウスでなぞって、どこかにメモコピーしておく。

7.HECの設定(続き)
このHECのポートを開けなきゃいけないので、もう一度、[Settings]-[Data]-[Data Input]へ移動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/479e828c-1567-6ff4-686e-32a32b807dd9.png)

8.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/19e28707-3e06-81fb-257a-cc41e1ec906b.png)
[HTTP Event Collector]をクリック。

9.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/fdda8188-2a59-9d49-523f-555757353950.png)
先程作った設定が画面に表示されているが、ここでやりたいのは、画面右上の「Global Settings」なので、[Global Settings」をクリック。

10.HECの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/4151c6a5-b5b1-3b04-7364-39c97a2cb256.png)
ここでは、デフォルトで「Enable SSL」にチェックが入っているが、このままでは、これは「オレオレ証明書」を使うことになる。GitLab SaaSから、このSplunkの8088ポートにHTTP Webhookでデータを投げ込むわけだが、GitLab SaaSは、得体のしれないSSL Webサーバーに決してデータを流そうとはしないので、このままでは動作しない。
そのため、要は、「Enable SSL」を外す。(それが言いたいだけ)
そして、[Save]をクリック。ポートは8088になっているのを確認。

#### Webhookを受ける側なのでファイアウォールを開ける
1.ネットワークの設定
ここまで進んだら、先程設定した、8088ポートを、ファイアウォール側で開けて上げる必要がある。たとえば、Splunkのオンプレ版をAWS上で構築していた場合は、当然のことながら、8088番なんて、空いているわけがない。
AWSの場合、以下のように8088をTCPで開けてあげる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/35845753-d58d-226e-41d3-398edec8aa53.png)

ここまで来れば、基本、設定は完了している。

### GitLab側での設定
1.GitLabでの設定
GitLab SaaS版のUltimate版を購入、または、GitLab SaaSのトライアルを申し込んだ状態であると仮定する。
ここまでは自力で来てもらいたい。GitLabの監査ログをリアルタイムで外のシステムに流す設定は、一番上の部分で設定する。つまり、GitLab SaaS版であれば、https://gitlab.com/xxxx の xxxxの部分になる。もっというと、プロジェクトではなく、契約レベル(グループレベルとも言える)、ということになる。
一旦、自分のグループに移動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/697a13a9-ef90-fce1-3506-5ab67fa85c6a.png)

2.GitLabでの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/0d2de3d8-d9aa-e1ce-a399-d1ac8921ee3c.png)
画面左の[セキュリティとコンプライアンス]-[監査イベント]をクリック

3.GitLabでの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/dc9a6158-1d57-2a1e-26cd-f1ce3a50af5e.png)
通常、プロジェクトレベルだと存在しないのだが、グループレベルでこの画面を見たときに表示される、[ストリーム]タブをクリックする。

3.GitLabでの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/f2816299-3d00-d59c-7f41-8e3f2e03690b.png)
ここでストリーム先の設定(つまり、先程構築したSplunkへデータを流し込むWebhookの設定)をしていくので、[ストリーム先を追加]をクリック

4.GitLabでの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/8ae5ff4a-3f83-6b2a-59f8-8967498a9925.png)
ここで、URLにhttpsではなく、httpを指定する(なぜなら、GitLab SaaSは、オレオレ証明書の外部のWebサーバーにWebhookで決してデータを流すことはないので)。また、URLも「http://34.239.7.179:8088/」ではなく、「http://34.239.7.179:8088/services/collector/raw」とする。
ヘッダーには、お決まりの「Authorization」、値には「Splunk 先程のトークン」を指定する。
URLに8088のポート番号があることを確認して、[追加]をクリック。

5.GitLabでの設定(続き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/d1cca08e-c631-f41d-bf83-93b659793e39.png)
以上で設定は完了。

## 動作確認

1.Splunkでログの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/ed5f23b5-607c-b1ee-5c9a-0e0d53eac81e.png)
まず、なにもないことを確認する。

2.GitLab側でグループを作成してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/c29add75-7845-b98b-92f3-b34a79fc30b8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/f329919b-6341-e6e9-3304-ac64d509207f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/77295b08-b1fe-98a8-7a79-2ef46baa5e71.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/c3f8bd62-9fdd-a829-b253-7de1ddc18273.png)


3.Splunkでログを確認してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3325737/aea8d65f-5e9c-f23d-a632-6b963e2f995f.png)

という感じでログが取れるので、あとは好きに加工していきます。

以上。