收集 Microsoft IIS 記錄
本指南說明如何使用 Bindplane,將 Microsoft Internet Information Services (IIS) 記錄檔擷取至 Google Security Operations。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已安裝 IIS 的 Windows Server 2016 以上版本
- IIS 伺服器的管理員存取權
- 如果透過 Proxy 執行,請確保防火牆通訊埠已根據 Bindplane 代理程式需求開啟
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載擷取驗證檔案。將檔案安全地儲存在要安裝 Bindplane 的系統上。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 複製並儲存「機構詳細資料」專區中的客戶 ID。
設定 IIS W3C 擴充記錄
開啟 IIS 管理工具
- 按一下「啟動」。
- 輸入
inetmgr,然後按下 Enter 鍵。 - 「Internet Information Services (IIS) Manager」(網際網路資訊服務 (IIS) 管理員) 視窗隨即開啟。
替代方法:
- 按下 Windows 鍵 + R 鍵。
- 輸入
inetmgr,然後按下 Enter 鍵。
前往記錄設定
- 在「連線」窗格中,展開伺服器名稱。
- 如要設定全伺服器記錄 (建議):
- 按一下根層級的伺服器名稱。
- 如要設定特定網站的記錄功能,請按照下列步驟操作:
- 展開「網站」,然後點選特定網站 (例如「預設網站」)。
- 在「Features View」(功能檢視畫面) 中,按兩下「Logging」(記錄)。
選取 W3C 擴充記錄檔格式
- 在「記錄」頁面的「記錄檔」部分中:
- 在「格式」下拉式選單中,選取「W3C」。
- 按一下「選取欄位」按鈕。
設定 W3C 記錄欄位
在「W3C Logging Fields」(W3C 記錄欄位) 對話方塊中,根據下列其中一種模式選取欄位:
模式 1:含查詢字串的完整網站內容 (建議用於大多數部署作業)
如果您需要完整的請求環境 (包括參照網址和查詢字串) 進行安全分析,且在單一伺服器上代管多個網站,請使用這個模式。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 服務名稱 (s-sitename)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 傳送的位元組 (sc-bytes)
- 接收的位元組 (cs-bytes)
模式 2:基本模式,包含子狀態和成效
需要詳細錯誤代碼 (子狀態、Win32 狀態) 和要求時間,以利排解問題時,請使用這個模式。
請按照確切順序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
模式 3:網站環境和完整指標 (建議用於正式環境)
需要全面記錄網站識別資訊、詳細錯誤、頻寬指標和效能資料時,請使用這個模式。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 服務名稱 (s-sitename)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 傳送的位元組 (sc-bytes)
- 接收的位元組 (cs-bytes)
- 作答時間 (time-taken)
模式 4:多個網站,提供完整脈絡
這個模式在功能上與模式 3 相同。
如果您有多個網站,且需要全面觀察能力,請使用這個模式。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 服務名稱 (s-sitename)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 傳送的位元組 (sc-bytes)
- 接收的位元組 (cs-bytes)
- 作答時間 (time-taken)
模式 5:完整指標的網站環境 (替代方案)
這個模式在功能上與模式 3 和 4 相同。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 服務名稱 (s-sitename)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 傳送的位元組 (sc-bytes)
- 接收的位元組 (cs-bytes)
- 作答時間 (time-taken)
模式 6:支援 TLS,並提供子狀態和效能資訊
需要追蹤 HTTP/HTTPS 通訊協定版本 (HTTP/1.1、HTTP/2、HTTP/3) 以進行安全性分析或 TLS 疑難排解時,請使用這個模式。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 通訊協定版本 (cs-version)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
模式 7:支援 TLS,但不提供效能指標
使用這個模式的時機:與模式 6 相同,但您不需要時間指標。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 通訊協定版本 (cs-version)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
模式 8:效能優先的極簡設計
如果您只需要記錄效能指標,不在意查詢字串、參照網址或通訊協定版本,請使用這個模式。
請依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
模式選取指南
在大多數部署作業中,請使用模式 1 或模式 3。
- 模式 1:最適合注重安全性的部署作業,適用於多個網站 (包括參照網址、查詢字串、網站名稱)。
- 模式 3:最適合需要完整指標的實際工作環境 (包括子狀態、Win32 錯誤、頻寬、時間、網站名稱)。
- 模式 6/7:如需追蹤 HTTP 通訊協定版本 (HTTP/2 採用情形、TLS 疑難排解),請使用此模式。
- 模式 2/8:用於記錄最少量的資料,但包含錯誤詳細資料。
套用設定
- 按一下「確定」關閉「W3C Logging Fields」對話方塊。
- 確認要寫入記錄的「目錄」路徑。
- 預設:
%SystemDrive%\inetpub\logs\LogFiles
- 預設:
- 在「記錄檔輪替」下方,選取「每日」 (建議用於 Google SecOps 擷取)。
- 按一下「動作」窗格中的「套用」。
驗證 IIS 記錄
- 在瀏覽器中開啟網頁,產生傳入 IIS 網站的測試流量。
- 前往記錄目錄:
C:\inetpub\logs\LogFiles\W3SVC1\ - 在記事本中開啟最新的記錄檔 (例如
u_ex251020.log)。 確認
#Fields:行包含所有已啟用的欄位。範例
#Fields:行:#Fields: date time s-sitename s-computername 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 sc-bytes cs-bytes time-taken記錄項目範例:
2025-10-20 14:23:15 Default_Web_Site SERVER01 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) - 200 0 0 1234 567 125
安裝 Bindplane 代理程式
請按照下列操作說明,在 Windows 伺服器上安裝 Bindplane 代理程式。
Windows 安裝
- 以管理員身分開啟「命令提示字元」或「PowerShell」。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
其他安裝資源
- 如需其他安裝選項,請參閱這份安裝指南。
設定 Bindplane 代理程式,擷取 IIS 記錄並傳送至 Google SecOps
停止 Bindplane 服務
編輯設定檔前,請先停止服務:
Stop-Service "observIQ OpenTelemetry Collector"
編輯設定檔
- 找出
config.yaml檔案。- 預設路徑:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- 預設路徑:
- 以管理員身分使用文字編輯器 (例如記事本、VS Code 或 Notepad++) 開啟檔案。
將所有內容替換為下列設定:
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)。customer_id:- 實際的 Google SecOps 客戶 ID,請參閱「取得 Google SecOps 客戶 ID」一節。
- 替換下列預留位置:
重新啟動 Bindplane 代理程式,以套用變更
儲存
config.yaml檔案後,請重新啟動 Bindplane 服務:Start-Service "observIQ OpenTelemetry Collector"確認服務正在執行:
Get-Service "observIQ OpenTelemetry Collector"預期輸出內容:
Status Name DisplayName ------ ---- ----------- Running observiq-otel-collector observIQ OpenTelemetry 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 | 用戶端要求的網址查詢字串。 |
| cs-uri-stem | target.url | 用戶端要求的網址路徑。 |
| cs-username | principal.user.user_display_name | 用戶端的名稱。 |
| cs-version | network.tls.version_protocol | 用戶端使用的 HTTP 版本。 |
| cs(Cookie) | 用於擷取 Cookie 資訊。 | |
| cs(Referer) | network.http.referral_url | 將用戶端導向目前網頁的網址。 |
| cs(User-Agent) | network.http.user_agent | 用戶端的 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 | 將用戶端導向目前網頁的網址。 |
| csuseragent | network.http.user_agent | 用戶端的 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 | 目標機器的連接埠號碼。 |
| 持續時間 | 要求時間長度 (以毫秒為單位)。 | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | 事件加入佇列的時間 (以世界標準時間為準)。 |
| EventID | metadata.product_log_id | 活動的 ID。 |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | 以世界標準時間為準的事件處理時間。 |
| 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 | 用於從原始記錄訊息擷取鍵/值組合。 | |
| 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 | 與活動相關的部會。 |
| 名稱 | 實體名稱。 | |
| NewValue | additional.fields.NewValue.value.string_value | 設定的新值。 |
| OldValue | additional.fields.OldValue.value.string_value | 設定的舊值。 |
| 通訊埠 | principal.port | 用戶端的連接埠號碼。 |
| priority_code | 系統記錄訊息的優先順序代碼。 | |
| 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 | 將用戶端導向目前網頁的網址。 |
| request_url | target.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_facility | security_result.severity_details | syslog 訊息的設施。 |
| syslog_pri | 系統記錄訊息的優先順序。 | |
| syslog_severity | security_result.severity_details | 系統記錄訊息的嚴重程度。 |
| syslog_severity_code | 系統記錄訊息的嚴重性代碼。 | |
| 標記 | security_result.rule_name | 與活動相關聯的標記。 |
| 任務 | additional.fields.task.value.string_value | 工作名稱。 |
| 時間 | 如果原始記錄時間戳記無效,可用於建構事件時間戳記。 | |
| time-taken | 要求時間長度 (以毫秒為單位)。 | |
| uri_query | target.url | 用戶端要求的網址查詢字串。 |
| user_agent | network.http.user_agent | 用戶端的 User-Agent。 |
| 使用者名稱 | target.user.userid | 使用者的使用者名稱。 |
| UserSid | target.user.windows_sid | 使用者的 Windows SID。 |
| 權重 | security_result.about.resource.attribute.labels.Weight.value | 篩選條件的權重。 |
| win32_status | 回應的 Windows 狀態碼。 | |
| xforwardedfor | X-Forwarded-For 標頭,內含以半形逗號分隔的 IP 位址清單。 | |
| 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 專業人員尋求答案。