Microsoft IIS ログを収集する
このドキュメントでは、Bindplane を使用して Microsoft インターネット インフォメーション サービス(IIS)ログを Google Security Operations に取り込む方法について説明します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- IIS がインストールされた Windows Server 2016 以降
- IIS サーバーに対する管理者権限
- プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM Settings] > [Collection Agents] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステム(
C:\SecOps\ingestion-auth.jsonなど)にファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
IIS W3C 拡張ロギングを構成する
Google SecOps がログを正しく解析し、検出が確実に機能するように、IIS マネージャーで正しい W3C フィールドを有効にする必要があります。
IIS マネージャーを開く
- [開始] をクリックします。
- 「
inetmgr」と入力して Enter キーを押します。 - [インターネット インフォメーション サービス(IIS)マネージャー] ウィンドウが開きます。
別の方法:
- Windows+R キーを同時に押します。
- 「
inetmgr」と入力して Enter キーを押します。
ロギングの構成に移動する
- [接続] ペイン(左側)で、サーバー名を開きます。
- サーバー全体のロギングを構成するには(推奨):
- ルートレベルでサーバー名をクリックします。
- サイト固有のロギングを構成するには:
- [サイト] を展開し、特定のサイト([既定の Web サイト] など)をクリックします。
- [Features View](中央ペイン)で、[Logging] をダブルクリックします。
[W3C 拡張ログ形式] を選択します。
- [Logging] ページの [Log File] セクションで、次の操作を行います。
- [形式] プルダウンで [W3C] を選択します。
- [フィールドを選択] ボタンをクリックします。
W3C ロギング フィールドを構成する
重要: Google SecOps IIS パーサーは、8 つのフィールド構成をサポートしています。次のいずれかのパターンですべてのフィールドを有効にする必要があります。異なるフィールドを有効にしたり、パターンを混在させたりすると、解析が失敗します。
[W3C Logging Fields] ダイアログで、次のいずれかのパターンに従ってフィールドを選択します。
パターン 1: クエリ文字列とバイトを含むサイト全体のコンテキスト
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サービス名(s-sitename)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- サーバー ポート(s-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- 送信バイト数(sc-bytes)
- 受信バイト数(cs-bytes)
このパターンは、次の場合に使用します。ダウンストリーム形式にサイト コンテキストとクエリ文字列が含まれており、送受信バイト数が必要で、パイプラインで「username」列と「referer」列が想定されている(値が - の場合でも)。
パターン 2: 基本(サブステータス、Win32 ステータス、パフォーマンスあり、リファラーなし)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- サーバー ポート(s-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
- 所要時間(time-taken)
このパターンは、次の場合に使用します。パイプラインに Referer は含まれていないが、詳細なエラーコードとレイテンシ(time-taken)が必要な場合。
パターン 3: 基本(サブステータス、Win32 ステータス、パフォーマンスを含む)(リファラーを含む)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- サーバー ポート(s-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
- 所要時間(time-taken)
このパターンは次の場合に使用します。パターン 2 と同じですが、パイプラインに専用の列としてリファラーが含まれています。
パターン 4: TLS/プロトコル バージョンを認識し、リファラーとパフォーマンスを考慮する
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- クライアント ポート(c-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- プロトコルのバージョン(cs-version)
- ユーザー エージェント(cs(User-Agent))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
- 所要時間(time-taken)
このパターンは、次の場合に使用します。ダウンストリーム形式で cs-version が明示的にログに記録される(例: HTTP/1.1)が含まれており、タイミングも含まれています。また、クライアント ポートが専用の列として存在します。
パターン 5: TLS/プロトコル バージョンを認識し、リファラーを認識する(パフォーマンスなし)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- クライアント ポート(c-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- プロトコルのバージョン(cs-version)
- ユーザー エージェント(cs(User-Agent))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
このパターンは次の場合に使用します。パターン 4 と同じですが、パイプラインに time-taken が含まれていません。
パターン 6: Cookie とリファラーあり(パフォーマンスなし、バイト数なし)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- クライアント ポート(c-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- Cookie(cs(Cookie))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
このパターンは、次の場合に使用します。ダウンストリーム形式で、Cookie と Referer の両方が専用の列として必要とされる場合。
パターン 7: Minimal with Referer(Cookie なし、パフォーマンスなし、バイトなし)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- クライアント ポート(c-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- Referer(cs(Referer))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
このパターンを使用する場合: ダウンストリーム形式に Referer が含まれているが、Cookie、時間、バイト数が含まれていない。
パターン 8: リファラーなしの最小限(Cookie なし、パフォーマンスなし、バイトなし)
次のフィールドをこの順序で有効にします。
- Date(日付)
- 時間(時間)
- サーバーの IP アドレス(s-ip)
- メソッド(cs-method)
- URI ステム(cs-uri-stem)
- URI クエリ(cs-uri-query)
- クライアント ポート(c-port)
- User Name(cs-username)
- クライアント IP アドレス(c-ip)
- ユーザー エージェント(cs(User-Agent))
- プロトコル ステータス(sc-status)
- プロトコルのサブステータス(sc-substatus)
- Win32 ステータス(sc-win32-status)
このパターンは、次の場合に使用します。ダウンストリーム形式に Referer が含まれておらず、コア リクエスト コンテキストとステータス コードのみが必要な場合。
複数のパターンからフィールドを有効にしないでください。パーサーは、これらの正確な構成のいずれかを想定しています。
構成を適用する
- [OK] をクリックして、[W3C Logging Fields] ダイアログを閉じます。
- ログが書き込まれる [ディレクトリ] のパスを確認します。
- デフォルト:
%SystemDrive%\inetpub\logs\LogFiles
- デフォルト:
- [ログファイルのロールオーバー] で、[毎日] を選択します(Google SecOps の取り込みにおすすめ)。
- [アクション] ペイン(右側)で [適用] をクリックします。
IIS ロギングを確認する
W3C フィールドを構成したら、IIS がログを正しく書き込んでいることを確認します。
- ブラウザでウェブページを開いて、IIS サイトへのテスト トラフィックを生成します。
- ログ ディレクトリに移動します。
C:\inetpub\logs\LogFiles\W3SVC1\- 注:
W3SVC1は最初のサイト(デフォルトのウェブサイト)に対応しています。他のサイトの場合、フォルダ名はW3SVC2、W3SVC3などになります。
- 注:
- メモ帳で最新のログファイル(
u_ex251217.logなど)を開きます。 #Fields:行に、選択したパターンと同じ順序で有効にしたすべてのフィールドが含まれていることを確認します。
パターン 3 の例
パターン 3(サブステータス、Win32 ステータス、リファラーによるパフォーマンスを含む基本)を構成した場合、#Fields: 行は次のようになります。
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
ログエントリの例:
2025-12-17 14:23:15 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) https://example.com/previous.html 200 0 0 125
注意事項:
- 空のフィールドはハイフン(
-)で表されます。 - フィールドの順序は
#Fields:ヘッダーと完全に一致している必要があります - フィールドが欠落している場合、順序が変更されている場合、複数のパターンにまたがっている場合、パーサーは失敗します
Bindplane エージェントをインストールする
次の手順に沿って、Windows サーバーに Bindplane エージェントをインストールします。
Windows へのインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
その他のインストール リソース
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
IIS ログを取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを編集する
config.yamlファイルを見つけます。- デフォルト パス:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- デフォルト パス:
- テキスト エディタ(メモ帳、VS Code、メモ帳++ など)を使用して、管理者としてファイルを開きます。
内容全体を次の構成に置き換えます。
receivers: iis: collection_interval: 60s processors: resourcedetection: detectors: ["system"] system: hostname_sources: ["os"] normalizesums: batch: exporters: chronicle/iis: endpoint: malachiteingestion-pa.googleapis.com creds: 'C:\SecOps\ingestion-auth.json' log_type: 'IIS' override_log_type: false raw_log_field: body customer_id: '<CUSTOMER_ID>' compression: gzip service: pipelines: logs/iis: receivers: - iis processors: - resourcedetection - normalizesums - batch exporters: - chronicle/iis
構成値を更新する
各プレースホルダを次のように置き換えます。
creds:- 取り込み認証ファイルのパス(例:C:\SecOps\ingestion-auth.json)。endpoint:- リージョン エンドポイント。customer_id:- Google SecOps のお客様 ID を取得するセクションに記載されている実際の Google SecOps のお客様 ID。
Bindplane エージェントを再起動して変更を適用する
Windows で Bindplane エージェントを再起動するには、サービス コンソールを使用するか、次のコマンドを入力します。
net stop observiq-otel-collector && net start observiq-otel-collector
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| @timestamp | metadata.event_timestamp | 未加工ログに記録されたイベントのタイムスタンプ。 |
| @version | metadata.product_version | IIS サーバーのバージョン。 |
| AgentDevice | additional.fields.AgentDevice.value.string_value | ログを生成したデバイス。 |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | ログファイルの名前。 |
| ASP.NET_SessionId | network.session_id | ユーザーのセッション ID。 |
| c-ip | principal.ip | クライアントの IP アドレス。 |
| チャネル | security_result.about.resource.attribute.labels.Channel.value | イベントが記録されたチャネル。 |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | イベントが記録されたチャンネルの ID。 |
| パソコン | target.hostname | ターゲット マシンのホスト名。 |
| cs-bytes | network.received_bytes | クライアントから受信したバイト数。 |
| cs-host | principal.hostname、principal.asset.hostname | クライアントのホスト名。 |
| cs-method | network.http.method | クライアントで使用される HTTP メソッド。 |
| cs-uri-query | target.url | クライアントがリクエストした URL のクエリ文字列。 |
| cs-uri-stem | target.url | クライアントによってリクエストされた URL のパス。 |
| cs-username | principal.user.user_display_name | クライアントのユーザー名。 |
| cs-version | network.tls.version_protocol | クライアントで使用される HTTP バージョン。 |
| cs(Cookie) | Cookie 情報を抽出するために使用されます。 | |
| cs(Referer) | network.http.referral_url | クライアントを現在のページに誘導した URL。 |
| cs(User-Agent) | network.http.user_agent | クライアントのユーザー エージェント。 |
| csbyte | network.received_bytes | クライアントから受信したバイト数。 |
| cshost | principal.hostname、principal.asset.hostname | クライアントのホスト名。 |
| csip | principal.ip、principal.asset.ip | クライアントの IP アドレス。 |
| csmethod | network.http.method | クライアントで使用される HTTP メソッド。 |
| csreferer | network.http.referral_url | クライアントを現在のページに誘導した URL。 |
| csuseragent | network.http.user_agent | クライアントのユーザー エージェント。 |
| csusername | principal.user.user_display_name | クライアントのユーザー名。 |
| csversion | network.tls.version_protocol | クライアントで使用される HTTP バージョン。 |
| 日付 | 未加工ログのタイムスタンプが無効な場合に、イベント タイムスタンプの作成に使用されます。 | |
| 説明 | security_result.description | イベントの説明。 |
| devicename | target.hostname | ターゲット マシンのホスト名。 |
| dst_ip | target.ip、target.asset.ip | ターゲット マシンの IP アドレス。 |
| dst_port | target.port | ターゲット マシンのポート番号。 |
| duration | リクエストの所要時間(ミリ秒単位)。 | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | イベントがキューに登録された時刻(UTC)。 |
| EventID | metadata.product_log_id | イベントの ID。 |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | イベントが処理された時刻(UTC)。 |
| EventTime | metadata.event_timestamp | イベントのタイムスタンプ。 |
| EventType | metadata.product_event_type | イベントのタイプ。 |
| file_path | target.file.full_path | イベントに関連するファイルのフルパス。 |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | フィルタの ID。 |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | フィルタのキー。 |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | フィルタの名前。 |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | フィルタのタイプ。 |
| ホスト | target.hostname | ターゲット マシンのホスト名。 |
| host.architecture | principal.asset.hardware.cpu_platform | ホストマシンのアーキテクチャ。 |
| host.geo.name | additional.fields.geo_name.value.string_value | ホストマシンの地理的位置。 |
| host.hostname | target.hostname、target.asset.hostname | ホストマシンのホスト名。 |
| host.id | observer.asset_id | ホストマシンの ID。 |
| host.ip | principal.ip、principal.asset.ip | ホストマシンの IP アドレス。 |
| host.mac | principal.mac | ホストマシンの MAC アドレス。 |
| host.os.build | additional.fields.os_build.value.string_value | ホストマシンのオペレーティング システムのビルド番号。 |
| host.os.kernel | principal.platform_patch_level | ホストマシンのオペレーティング システムのカーネル バージョン。 |
| host.os.name | additional.fields.os_name.value.string_value | ホストマシンのオペレーティング システムの名前。 |
| host.os.platform | principal.platform | ホストマシンのオペレーティング システムのプラットフォーム。 |
| host.os.version | principal.platform_version | ホストマシンのオペレーティング システムのバージョン。 |
| http_method | network.http.method | クライアントで使用される HTTP メソッド。 |
| http_response | network.http.response_code | HTTP レスポンス コード |
| http_status_code | network.http.response_code | レスポンスの HTTP ステータス コード。 |
| http_substatus | additional.fields.sc_substatus.value.string_value | レスポンスの HTTP サブステータス コード。 |
| インスタンス | additional.fields.instance.value.string_value | タスクのインスタンス ID。 |
| intermediary_devicename | intermediary.hostname、intermediary.asset.hostname | 仲介デバイスのホスト名。 |
| json_message | JSON 形式の未加工のログメッセージ。 | |
| kv_fields | 未加工ログのメッセージから Key-Value ペアを抽出するために使用されます。 | |
| LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | レイヤのキー。 |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | レイヤの名前。 |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | レイヤの ID。 |
| log.file.path | target.file.full_path | ログファイルのフルパス。 |
| log.offset | metadata.product_log_id | ログファイル内のイベントのオフセット。 |
| logstash.collect.host | observer.hostname | ログを収集したマシンのホスト名。 |
| logstash.process.host | intermediary.hostname | ログを処理したマシンのホスト名。 |
| logstash_json_message | JSON 形式の未加工のログメッセージ。 | |
| メッセージ | security_result.description | 未加工のログ メッセージ。 |
| ミニストリー | additional.fields.ministry.value.string_value | イベントに関連付けられている省庁。 |
| name | エンティティの名前。 | |
| NewValue | additional.fields.NewValue.value.string_value | 構成設定の新しい値。 |
| OldValue | additional.fields.OldValue.value.string_value | 構成設定の古い値。 |
| ポート | principal.port | クライアントのポート番号。 |
| priority_code | syslog メッセージの優先度コード。 | |
| ProcessID | principal.process.pid | イベントを生成したプロセスのプロセス ID。 |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | プロバイダの GUID。 |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | プロバイダのキー。 |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | プロバイダの名前。 |
| referrer_url | network.http.referral_url | クライアントを現在のページに誘導した URL。 |
| request_url | target.url | クライアントによってリクエストされた URL。 |
| s-computername | target.hostname | ターゲット マシンのホスト名。 |
| s-ip | target.ip、target.asset.ip | ターゲット マシンの IP アドレス。 |
| s-port | target.port | ターゲット マシンのポート番号。 |
| s-sitename | additional.fields.sitename.value.string_value | サイトの名前。 |
| sc-bytes | network.sent_bytes | クライアントに送信されたバイト数。 |
| sc-status | network.http.response_code | レスポンスの HTTP ステータス コード。 |
| sc-substatus | additional.fields.sc_substatus.value.string_value | レスポンスの HTTP サブステータス コード。 |
| sc-win32-status | レスポンスの Windows ステータス コード。 | |
| scbyte | network.sent_bytes | クライアントに送信されたバイト数。 |
| scstatus | network.http.response_code | レスポンスの HTTP ステータス コード。 |
| 重要度 | security_result.severity | イベントの重大度。 |
| service.type | additional.fields.service_type.value.string_value | サービスのタイプ。 |
| sIP | principal.ip、principal.asset.ip | クライアントの IP アドレス。 |
| sPort | principal.port | クライアントのポート番号。 |
| sSiteName | additional.fields.sitename.value.string_value | サイトの名前。 |
| src_ip | principal.ip、principal.asset.ip、observer.ip | クライアントの IP アドレス。 |
| src_port | principal.port | クライアントのポート番号。 |
| sysdate | syslog メッセージの日時。 | |
| syslog_facility | security_result.severity_details | syslog メッセージのファシリティ。 |
| syslog_pri | syslog メッセージの優先度。 | |
| syslog_severity | security_result.severity_details | syslog メッセージの重大度。 |
| syslog_severity_code | syslog メッセージの重大度コード。 | |
| タグ | security_result.rule_name | イベントに関連付けられたタグ。 |
| タスク | additional.fields.task.value.string_value | タスクの名前。 |
| 時間 | 未加工ログのタイムスタンプが無効な場合に、イベント タイムスタンプの作成に使用されます。 | |
| time-taken | リクエストの所要時間(ミリ秒単位)。 | |
| uri_query | target.url | クライアントがリクエストした URL のクエリ文字列。 |
| user_agent | network.http.user_agent | クライアントのユーザー エージェント。 |
| ユーザー名 | target.user.userid | ユーザーのユーザー名。 |
| UserSid | target.user.windows_sid | ユーザーの Windows SID。 |
| 重み | security_result.about.resource.attribute.labels.Weight.value | フィルタの重み。 |
| win32_status | レスポンスの Windows ステータス コード。 | |
| xforwardedfor | IP アドレスのカンマ区切りリストを含む X-Forwarded-For ヘッダー。 | |
| metadata.log_type | "IIS" | |
| network.direction | "INBOUND" | |
| metadata.vendor_name | "Microsoft" | |
| metadata.product_name | 「Internet Information Server」 | |
| metadata.event_type | "NETWORK_HTTP", "USER_UNCATEGORIZED", "GENERIC_EVENT", "STATUS_UPDATE", "USER_LOGOUT", "USER_LOGIN" | |
| extensions.auth.type | "MACHINE" |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。