Windows Event Forwarding を Windows Server 2019 で構成する際の手順と注意点
概要
Microsoft Sentinel でのイベント ログ収集や、Defender for Identity でのスタンドアロン センサーの利用時などで、Windows Event Forwarding(WEF) を構成する必要がある場合がありますが、Windows Server 2019 を Windows Event Collector(WEC) サーバーとして構成する際に注意事項がありますので、その点を記載したいと思います。
Windows Event Fowarding とは
Windows Event Fowarding はリモートのサーバーへ選択したイベント ログを転送する Windows OS の機能です。イベント ログ収集するサーバーは Windows Event Collector(WEC)とよびます。
Windows Event Fowarding の構成
WEF の構成はイベント ログ送信元の WEF クライアントに対する設定と、イベント ログ収集を行う WEC サーバーでの設定でそれぞれ以下を行います。WEF クライアント側の設定はグループ ポリシーで設定を行うことが可能です。WEC サーバー側の URL アクセス制御リストの設定が本記事での注意点のポイントとなります。
- WEF クライアント側
- WinRM サービスの起動 (既定では自動起動になっている)
- コレクター URI の構成
- Network Service アカウントのセキュリティ イベント ログへのアクセス権付与(セキュリティ イベントログを取得する場合)
- WEC サーバー側
- サブスクリプションの構成
- URL アクセス制御リストの設定(Windows Server 2019 の場合)
WEF クライアントの設定
- GPOなどを利用し、コレクター URI の設定を各クライアントに適用する。
- [コンピューターの構成] > [管理用テンプレート] > [Windows コンポーネント] > [イベント転送] > [ターゲット サブスクリプション マネージャーの構成] を有効にします。また、オプションのサブスクリプション マネージャーに「Server=http://<WECサーバーのFQDN>:5985/wsman/SubscriptionManager/WEC,Refresh=10」を入力します。例えば WEC サーバーのホスト名が wec などであれば、「Server=http://wec.contoso.com:5985/wsman/SubscriptionManager/WEC,Refresh=10 」といった値です。
- Network Service アカウントのセキュリティ イベント ログへのアクセス権付与(セキュリティ イベントログを取得する場合)
- Active Directory ドメインに参加しているマシンで管理者権限でコマンドプロンプトを立ち上げ、以下コマンドを実行します。
wevtutil gl security
- 結果が以下のように結果が出力されますが、'channelAccess' の辺りをコピーします。その際に (A;;0x1;;;NS) が含まれていなかった場合は末尾に追記をしてください。個の追記する部分が BUILTIN\Network Service にセキュリティ イベント ログへのアクセスを与えます。
- [コンピューターの構成] > [管理用テンプレート] > [Windows コンポーネント] > [イベント ログ サービス] > [セキュリティ] > [ログアクセスを構成する] を有効にし、ログ アクセスに、上でコピー、追記した値を入力します。
1.と2.で設定したポリシー設定をログ転送元にしたいサーバーへ適用します。
WEC サーバー側の設定
- サブスクリプションの設定を行う
- イベント ビューアーを起動して、サブスクリプションを右クリックし、サブスクリプションの作成を選択します。
- 表示されたサブスクリプションのプロパティで、必要な情報を入力します。
- サブスクリプション名:任意の名前を設定
- 説明:任意の説明を設定
- 宛先ログ:デフォルト Forwarded Events になっています。特に要件が無ければ変更不要です。転送されたログは Forwarded Events で確認します。
- サブスクリプションの種類とソース コンピューター:ソース コンピューターによる開始を選択し、コンピューター グループの選択から、ログ転送元の対象のコンピューター オブジェクトを指定します。
- 収集するイベント:必要に応じて収集対象のイベントをフィルターで指定ください。
- 詳細設定を構成する:特に要件が無ければ標準で問題ありません。
-
URL アクセス制御リストの設定(Windows Server 2019 の場合)
既定の設定ですと WEC サービスが正しくログ転送を受け取れません。そのため、以下のコマンドを管理者権限で実行します。
netsh http delete urlacl url=http://+:5985/wsman/
netsh http add urlacl url=http://+:5985/wsman/ sddl=D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147-412116970)(A;;GX;;;S-1-5-80-4059739203-877974739-1245631912-527174227-2996563517)
netsh http delete urlacl url=https://+:5986/wsman/
netsh http add urlacl url=https://+:5986/wsman/ sddl=D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147-412116970)(A;;GX;;;S-1-5-80-4059739203-877974739-1245631912-527174227-2996563517)
この設定を行う必要があるのは、Windows Server 2019 から WEF で利用されるサービスの srvhost プロセスが別々のプロセスになったことにより、既定の URL アクセス制御リストではサービスが正しく WEC の URL エンドポイントにアクセスできない状態になっている為のようです。以下イメージと私は理解しています。
なお、Windows Server 2016 でも構成によってはプロセスが分かれるため、上記の設定が必要になるケースがあります。
以下のログが記録されている場合は、こちらの問題と思われるため、URL アクセス制御リストを上記のコマンドで構成してみてください。
Log Name: Microsoft-Windows-Forwarding/Operational
Event ID: 105
Task Category: None
User: NETWORK SERVICE
Description:
The forwarder is having a problem communicating with subscription manager at address http://W19SRV.contoso.com:5985/wsman/SubscriptionManager/WEC. Error code is 2150859027 and Error Message is The WinRM client sent a request to an HTTP server and got a response saying the requested HTTP URL was not available. This is usually returned by a HTTP server that does not support the WS-Management protocol. </f:Message></f:WSManFault>.
動作イメージ
上記設定を行う事での動作イメージは以下の通りです。
① AD からログ転送元の対象サーバーにグループポリシーを適用。
② WEC サーバーのサブスクリプションの情報をログ転送元サーバーから、取得しに行く。
③ ログ転送元サーバーがサブスクリプションの情報を取得する
④ サブスクリプションの設定に合わせてログ転送元サーバーから、ログ転送先の WEC サーバーにイベント ログ伝送を行う
最後に
古くから WEF の機能はありますが、仕組みは意外と分かりにくく、公式のサイトからでは構成のイメージもやや掴みにくい印象があります。また、 Windows Server 2019 からは URL アクセス制御リストの設定も必要になるなどの仕様変更もありました。こちらの記事が WEF の理解や構成の補助になれば幸いです。
関連リンク
Discussion