Windowsイベントログを収集し、Fluentdを利用して別システムへ転送する

# 概要
Windowsイベントログを収集する環境を作成し、そのログをさらに別システムへ転送するための手順を記載します。

# 環境
本手順で取り扱う内容は、次の環境にて確認しています。
* Windows Client
マシン：Amazon EC2  
OS：Windows Server 2022

* Windows Event Collector & Fluentd Server
マシン：Amazon EC2  
OS：Windows Server 2022


構成図は次のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/47483344-28bf-a06d-b434-ef45fc8a77dc.png)

Windows Clientは`Windows Event Collector`と呼ばれるログ収集マシンにイベントログを転送します。
そしてWindows Event Collectorと同じマシン上にFluentdを導入し、収集したイベントログを別システムへ転送する仕組みです。

また、Windows Clientは通常、複数台存在するはずですが、本記事では話をシンプルにするために１台構成としています。

# 手順
## ログ収集環境セットアップ
ログ収集環境をセットアップするための手順を記載します。

Windows ClientからWindows Event Collectorへのログ転送については、[Windows Event Fowarding](https://learn.microsoft.com/ja-jp/windows/security/operating-system-security/device-management/use-windows-event-forwarding-to-assist-in-intrusion-detection)という仕組みによって実現します。

なお、Windows ClientはADサーバによって操作するため、前提としてADサーバが存在し、Windows Clientがドメイン参加していることが作業条件となります。AD等のセットアップについては[こちら](https://zenn.dev/mn87/articles/cdade63da9f60a)の手順が参考になります。

### 通信設定
Windows Event Collectorのセキュリティグループのインバウンドルールにて、Windows ClientからのTCP 5985 Port接続を許可して下さい。

### Windows Client設定
本手順はADサーバにて実施して下さい。

GPO(Group Policy Management)の画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/d77d8d83-0a82-263d-aa75-c516f99d360d.png)

`Forest` > `Domains` > `Group Policy Object`を押下して下さい。
`Default Domain Policy`を右クリックしてeditします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/2ada8349-9072-ad3a-7f19-2ae5500eae6b.png)

下記の画面に遷移するはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/6f6affde-ceef-653f-2a62-e7ee3c14b528.png)


`Computer Configuration` > `Policies` > `Administrative Templates` > `Windows Components` > `Event Forwarding`を押下して下さい。
`Configure target Subscription Manager`を右クリックしてeditします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/6dc190ce-e30b-3e15-dbb0-b24a3f4e4ab4.png)

下記の画面に遷移するはずです。
`Not Configured`→`Enabled`に変更して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/80e945e3-c082-8e67-42b0-7ca907707185.png)

また、Optionsの欄の`Show`を押下して下さい。
Valueに次の値を入力して下さい。
```
"Server=http://`<Windows Event CollectorのFQDN>`:5985/wsman/SubscriptionManager/WEC,Refresh=10"
```
※Windows Event CollectorのFQDNとは、EC2のDNS名ではなく、ADドメイン(例：EC2AMAZ-XXXXXXX.test.jp)のことを指します。

入力が完了したら、cmdにて次のコマンドを実行して下さい。
GPOの設定が反映されます。
```
> gpupdate /force
```
### Windows Event Collector設定
本手順はWindows Event Collectorマシンにて実施して下さい。

`Event Viewer`を起動して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/daf4b5c6-84f9-f5cd-848d-f37d9dbd2151.png)

`Subscriptions`を右クリックし、`Create Subscription`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/c0f81e62-e7b9-5d1f-0306-f19eda8062cc.png)

Event Collectorのサービス再起動設定が求められるため、Yesを選択して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/f5362dc0-2f38-64d3-1311-97cb81b914d4.png)

表示されたSubscription Propertiesで次の情報を入力します。
* Subscription Name：任意の名前
* Subscription Type and source computer：`source computer initiated`を選択し、`Computer Groups`の選択から、`Add Domain Computers…`を押下し、Windows Clientのコンピューター オブジェクト(例：EC2AMAZ-XXXXXXX)を指定して下さい。
* Events to collect：必要に応じて、次のように収集対象のイベントをフィルターで指定ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/c729153a-0dce-fbe8-ff60-8706ec18fa8e.png)

OKを押下して下さい。
動作確認として、`Event Viewer`の`Forwarding Events`にて、次のようにログが記録されることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510470/b6743773-55c1-e1ad-c79b-def252770ad7.png)

以上でログ収集環境のセットアップは完了です。

## Fluentdセットアップ及び、別システムへの転送設定
### Fluentdインストール
本手順はWindows Event Collectorマシンにて実施して下さい。

次のページにアクセスし、インストールしたいバージョンのmsiファイルをダウンロードして下さい。
https://td-agent-package-browser.herokuapp.com/

ダウンロードしたインストーラをWindows Event Collectorマシンにて実行してFluentdをインストールしてください。

### Config設定
`C:/opt/fluent/etc/fluent/fluentd.conf`ファイルを編集します。
次のfluentd.confはサンプルになります。
各パラメータの詳細が知りたい場合は、ドキュメントを参照して下さい。
[Windows eventlog plugin](https://github.com/fluent/fluent-plugin-windows-eventlog)
[Http output plugin](https://docs.fluentd.org/output/http)


```
<source>
  @type windows_eventlog2
  @id windows_eventlog2
  channels application,system,security
  read_existing_events false
  tag winevt.raw
  rate_limit 200
  <storage>
    @type local
    persistent true
    path C:\opt\fluent\winlog.json
  </storage>
</source>

<match winevt.raw>
  @type http
  endpoint <YOUR-ENDPOINT>
  headers "Authorization: Bearer <YOUR-ACCESSTOKEN>"
  content_type application/json
  <buffer>
    flush_interval 10s
  </buffer>
</match>
```

編集が完了したら、
WindowsサービスとしてFluentdを起動して下さい。
また、自動起動の設定がデフォルトでは無効となっているため、有効化して下さい。

# 動作確認
転送先システムにて、ログが受信できていることを確認して下さい。

# 参考
https://learn.microsoft.com/ja-jp/windows/security/operating-system-security/device-management/use-windows-event-forwarding-to-assist-in-intrusion-detection

https://zenn.dev/microsoft/articles/5ac5d8c7570c82

https://zenn.dev/mn87/articles/cdade63da9f60a

https://github.com/fluent/fluent-plugin-windows-eventlog

https://docs.fluentd.org/output/http