開發剖析器擴充功能
本文說明如何建立剖析器擴充功能,從原始記錄資料擷取欄位,並對應至 Google Security Operations 平台中的目的地 UDM (Unified Data Model) 欄位。
本文概述剖析器擴充功能的建立程序:
- 建立剖析器擴充功能。
- 必要條件和限制。
- 找出原始記錄資料中的來源欄位。
- 選取適當的目的地 UDM 欄位。
-
定義剖析器擴充功能時,必須設計剖析邏輯來篩選原始記錄資料、轉換資料,並將資料對應至目的地 UDM 欄位。Google SecOps 提供兩種建立剖析器擴充功能的方法:
- 使用無程式碼 (對應資料欄位) 方法建立剖析器擴充功能。
- 使用程式碼片段方法建立剖析器擴充功能。
剖析器擴充功能建立範例,適用於各種記錄格式和情境。例如使用 JSON 的無程式碼範例,以及用於複雜邏輯或非 JSON 格式 (CSV、XML、Syslog) 的程式碼片段。
建立剖析器擴充功能
剖析器擴充功能可讓您靈活擴充現有預設 (和自訂) 剖析器的功能。剖析器擴充功能可讓您彈性擴充現有預設 (或自訂) 剖析器的功能,而不必更換剖析器。擴充功能可讓您自訂剖析器管道,包括新增剖析邏輯、擷取及轉換欄位,以及更新或移除 UDM 欄位對應。
剖析器擴充功能與自訂剖析器不同。您可以為沒有預設剖析器的記錄類型建立自訂剖析器,或選擇不更新剖析器。
剖析器擷取和正規化程序
Google SecOps 會以原始記錄的形式接收原始記錄資料。預設 (和自訂) 剖析器會擷取核心記錄欄位並正規化,轉換為 UDM 記錄中的結構化 UDM 欄位。這只代表原始記錄資料的一部分。您可以定義剖析器擴充功能,擷取預設剖析器未處理的記錄值。啟用後,剖析器擴充功能就會成為 Google SecOps 資料擷取和正規化程序的一部分。

定義新的剖析器擴充功能
預設剖析器包含一組預先定義的對應指令,可指定如何擷取、轉換及正規化核心安全性值。您可以透過無程式碼 (對應資料欄位) 或程式碼片段方法定義對應指令,建立新的剖析器擴充功能:
無程式碼方法
無程式碼方法最適合從原生 JSON、XML 或 CSV 格式的原始記錄中,簡單擷取資料。您可以指定原始記錄來源欄位,並對應至目的地 UDM 欄位。
例如,使用簡單的等式比較,擷取最多 10 個欄位的 JSON 記錄資料。
程式碼片段方法
程式碼片段方法可讓您定義指令,從原始記錄中擷取及轉換值,並指派給 UDM 欄位。程式碼片段使用的語法與預設 (或自訂) 剖析器相同,類似 Logstash。
這種做法適用於所有支援的記錄格式。最適合用於下列情境:
- 複雜的資料擷取或複雜的邏輯。
- 需要 Grok 剖析器的非結構化資料。
- 非 JSON 格式,例如 CSV 和 XML。
程式碼片段會使用函式,從原始記錄資料中擷取特定資料。例如 Grok、JSON、KV 和 XML。
在多數情況下,最好使用預設 (或自訂) 剖析器中採用的資料對應方法。
將新擷取的值合併至 UDM 欄位
啟用後,剖析器擴充功能會根據預先定義的合併原則,將新擷取的值合併到對應 UDM 記錄中的指定 UDM 欄位。例如:
覆寫現有值:擷取的值會覆寫目的地 UDM 欄位中的現有值。
唯一的例外狀況是重複欄位,您可以設定剖析器擴充功能,在將資料寫入 UDM 記錄中的重複欄位時附加新值。
剖析器擴充功能優先:剖析器擴充功能中的資料對應指示,優先順序高於該記錄類型的預設 (或自訂) 剖析器。如果對應指令發生衝突,剖析器擴充功能會覆寫預設值。
舉例來說,如果預設剖析器將原始記錄欄位對應至
event.metadata.descriptionUDM 欄位,而剖析器擴充功能將不同的原始記錄欄位對應至同一個 UDM 欄位,則剖析器擴充功能會覆寫預設剖析器設定的值。
重複欄位選取器
無論是「對應資料欄位 (無程式碼)」或「編寫程式碼片段」方法,您都可以控管剖析器擴充功能如何將值儲存至「重複欄位」(支援值陣列的欄位,例如 principal.ip)。在「擴充功能」(擴充功能定義) 面板中,使用「重複欄位」欄位,其中提供「附加值」和「取代值」選項。
附加與取代行為
某些 UDM 欄位會儲存值陣列,例如 principal.ip 欄位。您可以使用「Repeated Fields」(重複欄位) 選取器,控制剖析器擴充功能如何將新擷取的資料儲存在重複欄位中:
附加值:
剖析器擴充功能會將新擷取的值,附加至 UDM 欄位中的現有值陣列。
取代值:
剖析器擴充功能會將 UDM 欄位中的現有值陣列,替換為新擷取的值。
只有在重複欄位位於階層最低層級時,剖析器擴充功能才能將資料對應至重複欄位。例如:
- 系統支援將值對應至
udm.principal.ip,因為重複的ip欄位位於階層的最底層,且principal不是重複欄位。 - 系統不支援將值對應至
udm.intermediary.hostname,因為intermediary是重複欄位,且不在階層的最底層。
下表提供範例,說明重複欄位選取器設定如何影響產生的 UDM 記錄。
| 選取「重複欄位」 | 記錄範例 | 剖析器擴充功能設定 | 生成的結果 |
|---|---|---|---|
| 附加值 | {"protoPayload":{"@type":"type.AuditLog","authenticationInfo":{"principalEmail":" |
先決條件欄位:protoPayload.requestMetadata.callerIp
先決條件值: " "
先決條件運算子: NOT_EQUALS
原始資料欄位: protoPayload.requestMetadata.callerIp
目的地欄位: event.idm.read_only_udm.principal.ip
|
metadata:{event_timestamp:{}.....}principal:{Ip:"1.1.1.1, 2.2.2.2"}
}
} |
| 附加值 | {"protoPayload":{"@type":"type.AuditLog","authenticationInfo":{"principalEmail":" |
先決條件 1:
先決條件欄位: protoPayload.requestMetadata.callerIp
先決條件值: " "
先決條件運算子: NOT_EQUALS
原始資料欄位: protoPayload.requestMetadata.callerIp
目的地欄位: event.idm.read_only_udm.principal.ip
前提 2:
|
套用擴充功能前,由預建剖析器產生的事件。
metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}
套用擴充功能後的輸出內容。
|
| 替換值 | {"protoPayload":{"@type":"type..AuditLog","authenticationInfo":{"principalEmail":" |
先決條件欄位:protoPayload.authenticationInfo.principalEmail
先決條件值: " "
先決條件運算子: NOT_EQUALS
原始資料欄位: protoPayload.authenticationInfo.principalEmail
目的地欄位: event.idm.read_only_udm.principal.ip
|
套用擴充功能前,由預建剖析器產生的 UDM 事件。timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}
套用擴充功能後的 UDM 輸出內容
|
限制
- 每種記錄類型只能有一個剖析器擴充功能:每種記錄類型只能建立一個剖析器擴充功能。
- 只能使用一種資料對應指令方法:您可以使用無程式碼或程式碼片段方法建構剖析器擴充功能,但不能同時使用這兩種方法。
- 用於驗證的記錄範例:必須提供過去 30 天內的記錄範例,才能驗證 UDM 剖析器擴充功能。詳情請參閱「確保記錄類型有有效的剖析器」。
- 基本剖析器錯誤:無法在剖析器擴充功能中識別或修正基本剖析器錯誤。
- 重複欄位處理:在特定擴充功能中,只能使用單一方法 (附加或取代)。替換整個重複物件時請務必小心,以免意外遺失資料。
Additional.fields會解讀為一組鍵/值組合,而非重複欄位:因此,只要將剖析器的 UDM 對應和擴充功能的 UDM 輸出內容各自的鍵/值新增至該組合,即可順暢合併兩者。- 消除歧義事件:剖析器擴充功能無法處理單一記錄中有多個不重複事件的記錄,例如 Google 雲端硬碟陣列。
- XML 和無程式碼:XML 不支援無程式碼模式。請改用程式碼片段方法。
- 剖析器語法與 YARA-L 偵測規則:擷取剖析器和剖析器擴充功能會在擷取時,使用 Logstash Grok 和設定語法搭配篩選器 (例如
grok、mutate、json、date和base64),將原始記錄剖析為 Unified Data Model (UDM)。剖析器無法使用 YARA-L 語法、結果區塊或產生器函式 (例如yield)。YARA-L 2.0 嚴格來說是一種偵測引擎查詢語言,會在下游對標準化 UDM 事件進行評估,用於威脅警示,無法剖析原始記錄、變更 UDM 欄位或捨棄傳入的記錄流量。 - 預設僅向前套用:根據預設,剖析器擴充功能只會套用至啟用後新擷取的記錄。如果基於重大業務需求,必須使用更新後的對應關係重新剖析歷來記錄,可以透過 Google Cloud 支援團隊要求執行後端記錄重播工作。詳情請參閱「重新剖析歷來資料 (記錄重播)」。
- 剖析器邏輯無法存取擷取標籤:剖析器擴充功能無法讀取擷取標籤 (
metadata.ingestion_labels),將值對應至 UDM 欄位,因為剖析器是在沙箱執行環境中執行,只能查看原始記錄主體。 - 無程式碼方法的保留關鍵字:如果記錄包含下列任何保留關鍵字,請使用程式碼片段方法,而非無程式碼方法:
collectionTimestampcreateTimestampenableCbnForLoopeventfilenamemessagenamespaceoutputonErrorCounttimestamptimezone
- 移除現有對應關係:您只能使用程式碼片段方法移除現有的 UDM 欄位對應關係。
- 無法使用擴充功能移除主機名稱 UDM 欄位的對應關係:您無法使用擴充功能取消設定 (移除) 主機名稱 UDM 欄位 (例如
principal.hostname) 的對應關係。
剖析器概念
下列文件說明重要的剖析器概念:
必要條件
建立剖析器擴充功能的必要條件:
- 記錄類型必須有運作中的預設 (或自訂) 剖析器。
- Google SecOps 必須能使用預設 (或自訂) 剖析器,擷取及正規化原始記錄。
- 確認目標記錄類型的預設 (或自訂) 剖析器,在過去 30 天內有擷取原始記錄資料。這項資料應包含您要擷取或用於篩選記錄檔記錄的欄位範例。這項資訊會用於驗證新的資料對應操作說明。
開始使用
建立剖析器擴充功能前,請先完成下列事項:
-
請確認該記錄類型有運作中的剖析器。如果沒有剖析器,請建立自訂剖析器。
-
找出要從原始記錄擷取的欄位。
-
選取適當的對應 UDM 欄位,對應擷取的原始記錄欄位。
-
選擇兩種擴充方法 (資料對應方法) 的其中一種,建立剖析器擴充功能。
確認必要條件
請確認您要擴充的記錄類型有運作中的剖析器,詳情請參閱下列各節:
確認記錄類型有運作中的剖析器
確認您要擴充的記錄類型,有有效的預設 (或自訂) 剖析器。
在下列清單中搜尋記錄類型:
-
- 如果記錄類型有預設剖析器,請確認剖析器已啟用。
- 如果記錄類型沒有預設剖析器,請確認記錄類型有自訂剖析器。
-
- 如果記錄類型沒有預設剖析器,請確認記錄類型有自訂剖析器。
確認記錄類型有自訂剖析器
如要確保記錄類型有自訂剖析器,請按照下列步驟操作:
- 在導覽列中,依序選取「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
在「剖析器」表格中,搜尋要擴充的記錄類型。
- 如果該記錄類型尚未有預設或自訂剖析器,請按一下「Add New Parser」(新增剖析器) (或「Create parser」(建立剖析器)),然後按照「根據對應指示建立自訂剖析器」中的步驟操作。
- 如果該記錄類型已有自訂剖析器,請確認剖析器已啟用。
確認記錄類型的剖析器已啟用
如要檢查記錄類型的剖析器是否有效,請按照下列步驟操作:
- 在導覽列中,依序選取「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
在「剖析器」表格中,搜尋要擴充的記錄類型。
如果記錄類型的剖析器未啟用,請啟用:
找出要從原始記錄擷取的欄位
分析要擷取資料的原始記錄,找出預設 (或自訂) 剖析器未擷取的欄位。請留意預設 (或自訂) 剖析器如何擷取原始記錄欄位,並對應至相應的 UDM 欄位。
如要找出要從原始記錄擷取的特定欄位,可以使用搜尋工具:
如要存取搜尋工具,請依序前往「Investigation」(調查) >「SIEM Search」(SIEM 搜尋)。在搜尋查詢前輸入 raw=。詳情請參閱「搜尋原始記錄」。
如要使用舊版搜尋工具,請按一下「SIEM Search」頁面頂端的「Go to Legacy search」。詳情請參閱「舊版方法:使用原始記錄搜尋提示」。
如要進一步瞭解如何在原始記錄中搜尋,請參閱:
選取適當的 UDM 欄位
現在您已找出要擷取的特定目標欄位,可以將這些欄位與對應的目的地 UDM 欄位配對。在原始記錄來源欄位和目的地 UDM 欄位之間建立明確的對應關係。您可以將資料對應至任何支援標準資料類型或重複欄位的 UDM 欄位。
選擇正確的 UDM 欄位
下列資源可協助簡化程序:
- 熟悉 UDM 的主要概念
- 瞭解現有剖析器使用的資料對應
- 使用 UDM 查詢工具,找出與來源欄位可能相符的 UDM 欄位。
- 「剖析器資料對應的重要 UDM 欄位」指南提供 UDM 結構定義最常用欄位的摘要和說明。
- 統合式資料模型欄位清單包含所有 UDM 欄位及其說明。重複欄位在清單中會以「重複」標籤標示。
- 避免發生錯誤的重要 UDM 考量事項
熟悉 UDM 的主要概念
-
UDM 結構定義會說明儲存資料的所有可用屬性。每筆 UDM 記錄都會描述事件或實體。資料會根據記錄描述的是事件或實體,儲存在不同的欄位中。
- UDM 事件物件會儲存環境中發生的動作相關資料。原始事件記錄會描述裝置 (例如防火牆或網路 Proxy) 記錄的動作。
- UDM 實體物件會儲存 UDM 事件中參與者或實體的相關資料,例如環境中的資產、使用者或資源。
UDM 名詞:名詞代表 UDM 事件中的參與者或實體。名詞可以是執行事件所述活動的裝置或使用者。名詞也可以是事件所述活動的「目標」裝置或使用者。
UDM 名詞 說明 principal負責啟動事件所述動作的實體。 target動作的接收者或對象。在防火牆連線中,接收連線的機器就是目標。 src主體操作的來源實體。舉例來說,如果使用者將檔案從一部機器複製到另一部機器,則檔案和來源機器會以 src 表示。 intermediary在事件中扮演中介角色的任何實體,例如 Proxy 伺服器。這類外掛程式可以影響動作,例如封鎖或修改要求。 observer監控及回報事件,但不直接與流量互動的實體。例如網路入侵偵測系統,或安全資訊與事件管理系統。 about事件涉及的其他實體,但不屬於上述類別。例如電子郵件附件或程序啟動期間載入的 DLL。 在實務上,主體和目標 Noun 物件最常使用。此外,請務必注意,上述說明是名詞的建議用法。實際用量可能會因預設或自訂基本剖析器的導入方式而異。
瞭解現有剖析器使用的資料對應
建議您瞭解預設 (或自訂) 剖析器使用的現有資料對應,也就是原始記錄來源欄位與目的地 UDM 欄位之間的對應。
如要查看原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應,請按照下列步驟操作:
- 在導覽列中,依序選取「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
- 在「剖析器」表格中,搜尋要擴充的記錄類型。
前往該資料列,然後依序點選 「Menu」(選單) >「View」(查看)。
在「預建」(或「自訂」) 分頁中,「剖析器程式碼」部分會顯示原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應。
使用 UDM 查詢工具
使用 UDM 查詢工具,找出與原始記錄來源欄位相符的 UDM 欄位。
Google SecOps 提供 UDM 查詢工具,可協助您快速找到目的地 UDM 欄位。如要存取 UDM 查詢工具,請依序前往「Investigation」(調查) >「SIEM Search」(SIEM 搜尋)。
如要瞭解如何使用 UDM 查詢工具,請參閱下列主題:
UDM 查詢工具範例
舉例來說,如果原始記錄中有一個名為「packets」的來源欄位,請使用 UDM 查詢工具,尋找名稱中含有「packets」的潛在目的地 UDM 欄位:
依序前往「調查」>「SIEM 搜尋」。
在「SIEM Search」(SIEM 搜尋) 頁面中,點選「UDM Lookup」(UDM 查詢)。
「UDM Lookup」對話方塊隨即開啟。搜尋工具會依欄位名稱或欄位值比對 UDM 欄位:
- 依欄位名稱查詢:比對您輸入的文字字串與包含該文字的欄位名稱。
- 依欄位值查詢:比對您輸入的值與儲存的記錄資料中包含該值的欄位。
在「UDM Lookup」(UDM 查詢) 對話方塊的「Look up UDM fields/values」(查詢 UDM 欄位/值) 欄位中輸入「packets」,然後選取「UDM Fields」(UDM 欄位)。
搜尋功能會顯示潛在 UDM 欄位清單,其中包含 UDM 欄位名稱中含有「packets」文字的欄位。
逐一按一下各列,即可查看每個 UDM 欄位的說明。
避免發生錯誤的重要 UDM 注意事項
- 名稱相似的欄位:UDM 的階層結構可能會導致欄位名稱相似。請參閱預設剖析器指南。詳情請參閱「瞭解現有剖析器使用的資料對應」。
- 任意欄位對應:如果資料無法直接對應至 UDM 欄位,請使用
additional物件。詳情請參閱「將任意欄位對應至 UDM」。 - 重複欄位:在程式碼片段中處理重複欄位時,請務必謹慎。取代整個物件可能會覆寫原始資料。使用無程式碼方法,可進一步控管重複欄位。詳情請參閱「重複欄位選取器」。
- UDM 事件類型的必要 UDM 欄位:將 UDM
metadata.event_type欄位指派給 UDM 記錄時,每個event_type都需要 UDM 記錄中有一組不同的相關欄位。詳情請參閱「進一步瞭解如何指派 UDMmetadata.event_type欄位」。 - 基本剖析器問題:剖析器擴充功能無法修正基本剖析器的錯誤。基本剖析器是建立 UDM 記錄的預設 (或自訂) 剖析器。建議您考慮強化剖析器擴充功能、修改基本剖析器,或預先篩選記錄等選項。
將任意欄位對應至 UDM
如果找不到適合儲存資料的標準 UDM 欄位,請使用 additional 物件,將資料儲存為自訂鍵/值組合。這樣一來,即使沒有相符的 UDM 欄位,您也能在 UDM 記錄中儲存重要資訊。
選擇剖析器擴充功能定義方法
選擇剖析器擴充定義方法前,請務必先完成下列章節:
接下來,請開啟「Parser Extension」(剖析器擴充功能) 頁面,並選取擴充功能方法,定義剖析器擴充功能:
開啟「Parser Extension」(剖析器擴充功能) 頁面
您可以在「Parser Extension」(剖析器擴充功能) 頁面定義新的剖析器擴充功能。
您可以透過下列方式開啟「Parser Extension」(剖析器擴充功能) 頁面:從「Settings」(設定) 選單、從「Raw Log Search」(原始記錄搜尋),或從舊版「Raw Log Search」(原始記錄搜尋):
從「設定」選單開啟
如要從「設定」選單開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
在導覽列中,依序選取「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
「Parsers」(剖析器) 表格會依記錄類型顯示預設剖析器清單。
找到要擴充的記錄類型,依序點選 「Menu」(選單) >「Extend Parser」(擴充剖析器) >「Create Extension」(建立擴充功能)。
「Parser Extension」(剖析器擴充功能) 頁面隨即開啟。
從原始記錄檔搜尋開啟
如要從「原始記錄搜尋」開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
- 依序前往「調查」>「SIEM 搜尋」。
- 在搜尋欄位中,為搜尋引數加上前置字元
raw =,並用引號括住搜尋字詞。例如:raw = "example.com"。 - 按一下「執行搜尋」。 結果會顯示在「Raw Logs」(原始記錄) 面板中。
- 在「Raw Logs」(原始記錄) 面板中,按一下記錄 (資料列)。系統隨即會顯示「事件檢視器」面板。
- 在「Event Viewer」(事件檢視器) 面板中,按一下「Raw Log」(原始記錄) 分頁標籤。 系統會顯示原始記錄。
依序點選「管理剖析器」>「擴充剖析器」>「建立擴充功能」(或依序選取「建立擴充功能」>「下一步」)。
「Parser Extension」(剖析器擴充功能) 頁面隨即開啟。
從舊版原始記錄搜尋開啟
如要從舊版原始記錄搜尋開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
- 使用舊版原始記錄搜尋,搜尋與要剖析的記錄類似的記錄。
- 在「時間軸」面板中選取事件 (或按一下原始記錄圖示),即可開啟原始記錄。
依序點選「管理剖析器」>「擴充剖析器」>「建立擴充功能」(或依序選取「建立擴充功能」>「下一步」)。
「Parser Extension」(剖析器擴充功能) 頁面隨即開啟。
剖析器擴充功能頁面
頁面會顯示「原始記錄」和「擴充功能」(擴充功能定義) 面板:
「Raw Log」(原始記錄) 面板:
系統會顯示所選記錄類型的原始記錄資料範例。如果您是從「Raw Log Search」(原始記錄搜尋) 開啟頁面,樣本資料就是搜尋結果。您可以使用「View as」(檢視方式) 選單 (「Raw」(原始)、「JSON」、「CSV」、「XML」或「Hex/ASCII」(十六進位/ASCII)) 和「Wrap Text」(自動換行) 核取方塊設定範例格式。
確認顯示的原始記錄資料樣本,能代表剖析器擴充功能要處理的記錄。
按一下「Preview UDM Output」(預覽 UDM 輸出內容) (或「Show UDM Output」(顯示 UDM 輸出內容)),查看原始記錄資料範例的 UDM 輸出內容。
Extension (擴充功能定義) 面板:
您可以使用兩種對應指令方法之一,定義剖析器擴充功能:對應資料欄位 (無程式碼) 或編寫程式碼片段 (或編寫程式碼片段)。您無法在同一個剖析器擴充功能中同時使用這兩種方法。
視您選擇的方法而定,您可以指定要從傳入的原始記錄中擷取的來源記錄資料欄位,並將其對應至對應的 UDM 欄位,也可以編寫程式碼片段來執行這些工作等。
選取擴充方式
在「Parser Extension」(剖析器擴充功能) 頁面的「Extension」(擴充功能) 面板中,在「Extension Method」(擴充功能方法) 欄位中選取下列其中一種方法,建立剖析器擴充功能:
對應資料欄位 (無程式碼) 方法:
這種方法可讓您指定原始記錄中的欄位,並將其對應至目的地 UDM 欄位。
這個方法適用於下列原始記錄格式:
- 原生 JSON、原生 XML 或 CSV。
- Syslog 標頭加上原生 JSON、原生 XML 或 CSV。您可以為下列格式的原始記錄建立資料欄位類型對應指示:
JSON、XML、CSV、SYSLOG + JSON、SYSLOG + XML和SYSLOG + CSV。
請參閱後續步驟:建立無程式碼 (對應資料欄位) 操作說明。
編寫程式碼片段 (或編寫程式碼片段) 方法:
這種方法可讓您使用類似 Logstash 的語法,指定從原始記錄中擷取及轉換值的指令,並將這些值指派給 UDM 記錄中的 UDM 欄位。
請參閱後續步驟:建立程式碼片段操作說明。
建立無程式碼 (對應資料欄位) 操作說明
無程式碼方法 (也稱為「對應資料欄位」方法) 可讓您指定原始記錄欄位的路徑,並對應至相應的目的地 UDM 欄位。
使用無程式碼方法建立剖析器擴充功能前,請務必先完成下列章節:
定義剖析器擴充功能的後續步驟如下:
為每個欄位定義資料對應指令
針對要從原始記錄中擷取的每個欄位,定義資料對應指令。指令應指定原始記錄中來源欄位的路徑,並對應至目的地 UDM 欄位。
如果「Raw Log」(原始記錄) 面板中顯示的原始記錄範例包含 Syslog 標頭,則會顯示「Syslog」和「Target」(目標) 欄位。(部分記錄格式不含 Syslog 標頭,例如原生 JSON、原生 XML 或 CSV)。
Google SecOps 需要「Syslog」和「Target」欄位,才能預先處理 Syslog 標頭,擷取記錄的結構化部分。
定義下列欄位:
Syslog:這是使用者定義的模式,可預先處理 Syslog 標頭,並將其與原始記錄的結構化部分分開。
使用 Grok 和規則運算式指定擷取模式,用於識別 Syslog 標頭和原始記錄訊息。詳情請參閱「定義 Syslog 擷取器欄位」。
目標:Syslog 欄位中儲存記錄結構化部分的變數名稱。
在擷取模式中指定變數名稱,用於儲存記錄的結構化部分。
以下是「Syslog」和「Target」欄位的擷取模式和變數名稱範例。

在「Syslog」和「Target」(目標) 欄位中輸入值後,按一下「Validate」(驗證) 按鈕。
驗證程序會檢查語法和剖析錯誤,然後傳回下列其中一項:
- 成功:資料對應欄位會顯示。定義剖析器擴充功能的其餘部分。
- 失敗:系統會顯示錯誤訊息。請先修正錯誤條件再繼續。
視需要定義先決條件指令。
前置條件指令會將靜態值與原始記錄中的欄位進行比對,藉此找出剖析器擴充功能要處理的原始記錄子集。如果傳入的原始記錄符合前置條件,剖析器擴充功能就會套用對應指令。如果值不相符,剖析器擴充功能就不會套用對應指令。
填寫下列欄位:
- 先決條件欄位 (CSV 則為先決條件欄):原始記錄中的欄位 ID,包含要比較的值。如果記錄資料格式為 JSON 或 XML,請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入資料欄位置。
- 先決條件運算子:選取「等於」或「不等於」。
- Precondition Value:與原始記錄中「Precondition Field」比較的靜態值。
如需其他前置條件指示範例,請參閱「無程式碼 - 擷取具有前置條件值的欄位」。
將原始記錄資料欄位對應至目的地 UDM 欄位:
「Raw Data Field」(原始資料欄位) (如果是 CSV,則為「Raw Data Column」(原始資料欄)):如果記錄資料格式為 JSON (例如:
jsonPayload.connection.dest_ip) 或 XML (例如:/Event/Reason-Code),請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入資料欄位置 (注意:索引位置從 1 開始)。Destination Field:輸入用來儲存值的完整 UDM 欄位名稱,例如
udm.metadata.collected_timestamp.seconds。
如要繼續新增更多欄位,請按一下「Add」(新增),然後輸入下一個欄位的所有對應指令詳細資料。
如需其他對應欄位的範例,請參閱「無程式碼 - 擷取欄位」。
提交並啟用剖析器擴充功能
為要從原始記錄擷取的所有欄位定義資料對應指令後,請提交並啟用剖析器擴充功能。
按一下「提交」,儲存並驗證對應指令。
Google SecOps 會驗證對應指令:
- 如果驗證程序成功,狀態會變更為「Live」(已啟用),且對應指令會開始處理傳入的記錄資料。
如果驗證程序失敗,狀態會變更為「Failed」(失敗),且「Raw Log」(原始記錄) 欄位會顯示錯誤。
以下是驗證錯誤的範例:
ERROR: generic::unknown: pipeline.ParseLogEntry failed: LOG_PARSING_CBN_ERROR: "generic::invalid_argument: pipeline failed: filter mutate (7) failed: copy failure: copy source field \"jsonPayload.dest_instance.region\" must not be empty (try using replace to provide the value before calling copy) "LOG: {"insertId":"14suym9fw9f63r","jsonPayload":{"bytes_sent":"492", "connection":{"dest_ip":"10.12.12.33","dest_port":32768,"protocol":6, "src_ip":"10.142.0.238","src_port":22},"end_time":"2023-02-13T22:38:30.490546349Z", "packets_sent":"15","reporter":"SRC","src_instance":{"project_id":"example-labs", "region":"us-east1","vm_name":"example-us-east1","zone":"us-east1-b"}, "src_vpc":{"project_id":"example-labs","subnetwork_name":"default", "vpc_name":"default"},"start_time":"2023-02-13T22:38:29.024032655Z"}, "logName":"projects/example-labs/logs/compute.googleapis.com%2Fvpc_flows", "receiveTimestamp":"2023-02-13T22:38:37.443315735Z","resource":{"labels": {"location":"us-east1-b","project_id":"example-labs", "subnetwork_id":"00000000000000000000","subnetwork_name":"default"}, "type":"gce_subnetwork"},"timestamp":"2023-02-13T22:38:37.443315735Z"}剖析器擴充功能的生命週期狀態
剖析器擴充功能有下列生命週期狀態:
DRAFT:新建立的剖析器擴充功能,尚未提交。VALIDATING:Google SecOps 正在根據現有原始記錄驗證對應指令,確保剖析欄位時不會發生錯誤。LIVE:剖析器擴充功能已通過驗證,目前已在正式環境中。它會從傳入的原始記錄中擷取資料,並轉換為 UDM 記錄。FAILED:剖析器擴充功能驗證失敗。
進一步瞭解 Syslog 擷取器欄位
Syslog 擷取器欄位可讓您定義 Grok、規則運算式,以及規則運算式模式中的命名權杖來儲存輸出內容,藉此將 Syslog 標頭與結構化記錄檔分隔。
定義 Syslog 擷取器欄位
「Syslog」和「Target」欄位中的值會共同定義剖析器擴充功能如何將 Syslog 標頭與原始記錄的結構化部分分隔。在「Syslog」Syslog欄位中,使用 Grok 和規則運算式語法組合定義運算式。運算式包含變數名稱,可識別原始記錄的結構化部分。在「Target」(目標) 欄位中,指定該變數名稱。
以下範例說明這些欄位如何搭配運作。
以下是原始記錄範例:
<13>1 2022-09-14T15:03:04+00:00 fieldname fieldname - - - {"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}
原始記錄包含下列部分:
Syslog 標頭:
<13> 2022-09-14T15:03:04+00:00 fieldname fieldname - - -JSON 格式事件:
{"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}
如要將 Syslog 標頭與原始記錄的 JSON 部分分開,請在「Syslog」Syslog欄位中使用下列運算式範例:
%{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg}
- 運算式的這個部分會識別 Syslog 標頭:
%{TIMESTAMP\_ISO8601} %{WORD} %{WORD} ([- ]+)? - 運算式的這個部分會擷取原始記錄的 JSON 區段:
%{GREEDYDATA:msg}
這個範例包含變數名稱 msg。您可以自行選擇變數名稱。剖析器擴充功能會擷取原始記錄的 JSON 區隔,並指派給變數 msg。
在「Target」(目標) 欄位中,輸入變數名稱 msg。儲存在 msg 變數中的值,會輸入到您在剖析器擴充功能中建立的資料欄位對應指令。
使用原始記錄範例,下列區隔是資料對應指令的輸入內容:
{"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}
以下是填寫完成的「Syslog」和「Target」欄位:

下表提供更多範例,包括記錄範例、Syslog 擷取模式、Target 變數名稱和結果。
| 原始記錄範例 | Syslog 欄位 | 目標欄位 | 結果 |
|---|---|---|---|
<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" |
%{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg} |
msg | field_mappings {
field: "msg"
value: "{\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}"
}
|
<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\"} - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"} |
%{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg1} ([- ]+)?%{GREEDYDATA:msg2} |
msg2 | field_mappings {
field: "msg2"
value: "{\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}"
} |
"<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\"} - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" |
%{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:message} ([- ]+)?%{GREEDYDATA:msg2} |
msg2 | Error - message already exists in state and not overwritable. |
進一步瞭解如何指派 UDM metadata.event_type 欄位
將 UDM metadata.event_type 欄位指派給 UDM 記錄時,系統會進行驗證,確保 UDM 記錄中包含必要的相關欄位。每個 UDM metadata.event_type 都需要一組不同的相關欄位,例如,沒有 user 的 USER_LOGIN 事件就沒有用處。
如果缺少必要的相關欄位,UDM 驗證會傳回錯誤:
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
Grok 剖析器會傳回更詳細的錯誤:
generic::unknown:
invalid event 0: LOG_PARSING_GENERATED_INVALID_EVENT:
"generic::invalid_argument: udm validation failed: target field is not set"
如要找出 UDM event_type 指派作業的必要欄位,請使用
下列資源。其中,採用指南是 UDM 使用指南的補充資料,提供填入特定 UDM metadata.event_type 所需的最低必要 UDM 欄位。
Google SecOps 說明文件:UDM 使用指南 - 各事件類型的必要和選用 UDM 欄位
例如,開啟文件並搜尋 GROUP_CREATION 事件類型。
您應該會看到下列 UDM 欄位下限,以 UDM 物件的形式呈現:
{
"metadata": {
"event_timestamp": "2023-07-03T13:01:10.957803Z",
"event_type": "GROUP_CREATION"
},
"principal": {
"user": {
"userid": "pinguino"
}
},
"target": {
"group": {
"group_display_name": "foobar_users"
}
}
}
建立程式碼片段操作說明
程式碼片段方法可讓您使用類似 Logstash 的語法,定義如何從原始記錄中擷取及轉換值,並將這些值指派給 UDM 記錄中的 UDM 欄位。
使用程式碼片段方法建立剖析器擴充功能之前,請務必先完成下列章節:
定義剖析器擴充功能的後續步驟如下:
- 如需提示和最佳做法,請參閱「撰寫程式碼片段指令的提示和最佳做法」。
- 建立程式碼片段操作說明
- 提交程式碼片段操作說明
撰寫程式碼片段操作說明的提示和最佳做法
程式碼片段指令可能會因 Grok 模式不正確、重新命名或取代作業失敗,或語法錯誤等問題而失敗。請參閱下列提示和最佳做法:
建立程式碼片段操作說明
程式碼片段指令使用的語法和區段與預設 (或自訂) 剖析器相同:
- 第 1 節:從原始記錄中擷取資料。
- 第 2 節:轉換擷取的資料。
- 第 3 節:為 UDM 欄位指派一或多個值。
- 第 4 節:將 UDM 事件欄位繫結至
@output鍵。
如要使用程式碼片段建立剖析器擴充功能,請按照下列步驟操作:
- 在「Parser Extension」(剖析器擴充功能) 頁面的「CBN Snippet」(CBN 程式碼片段) 面板中,輸入程式碼片段來建立剖析器擴充功能。
- 按一下「Validate」(驗證),驗證對應操作說明。
程式碼片段指示範例
以下範例說明程式碼片段。
以下是原始記錄範例 (為求簡潔,省略了其他 jsonPayload 欄位):
{
"insertId": "00000000",
"jsonPayload": {
"packets_sent": "4"
},
"timestamp": "2022-05-03T01:45:00.150614953Z"
}
以下程式碼片段範例會將 jsonPayload.packets_sent 中的值對應至 network.sent_bytes UDM 欄位:
filter {
mutate {
replace => {
"jsonPayload.packets_sent" => ""
}
}
# Section 1. extract data from the raw JSON log
json {
source => "message"
array_function => "split_columns"
on_error => "_not_json"
}
if [_not_json] {
drop {
tag => "TAG_UNSUPPORTED"
}
} else {
# Section 2. transform the extracted data
if [jsonPayload][packets_sent] not in ["", 0] {
mutate {
convert => {
"jsonPayload.packets_sent" => "uinteger"
}
on_error => "_exception1"
}
# Section 3. assign the value to a UDM field
mutate {
Replace => {
"event.idm.read_only_udm.network.sent_bytes" => "jsonPayload.packets_sent"
}
on_error => "_exception2"
}
if ![_exception1] and![_exception2] {
# Section 4. Bind the UDM fields to the @output key
mutate {
merge => {
"@output" => "event"
}
}
}
}
}
}
提交程式碼片段操作說明
按一下「提交」,儲存對應操作說明。
Google SecOps 會驗證對應指令。
- 如果驗證程序成功,狀態會變更為「Live」(已啟用),且對應指令會開始處理傳入的記錄資料。
- 如果驗證程序失敗,狀態會變更為「Failed」(失敗),且「Raw Log」(原始記錄) 欄位會顯示錯誤。
管理現有的剖析器擴充功能
您可以查看、編輯、刪除及控管現有剖析器擴充功能的存取權。
查看現有的剖析器擴充功能
- 在導覽列中,依序選取「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
- 在剖析器清單中,找出要查看的剖析器 (記錄類型)。如果剖析器有名為
EXTENSION(或EXTN) 的剖析器擴充功能,則會顯示在名稱旁邊。 前往該資料列,然後依序點選 「Menu」(選單) >「Extend Parser」(擴充剖析器) >「View Extension」(查看擴充功能)。
系統會顯示「View Custom/Prebuilt Parser」>「Extension」分頁 (或「Extensions」分頁),其中會顯示剖析器擴充功能的詳細資料。摘要面板預設會顯示
LIVE剖析器擴充功能。
編輯剖析器擴充功能
開啟「View Custom/Prebuilt Parser」>「Extension」分頁 (或「Extensions」分頁),如「查看現有的剖析器擴充功能」一節所述。
按一下「編輯額外資訊」(或「編輯」) 按鈕。
「Parser Extension」(剖析器擴充功能) 頁面隨即顯示。
編輯剖析器擴充功能。
如要取消編輯並捨棄變更,請按一下「捨棄草稿」(或「捨棄擴充功能」)。
如要刪除剖析器擴充功能,請按一下「Delete Failed Extension」(刪除失敗的擴充功能) (或「Delete Extension」(刪除擴充功能))。
完成編輯剖析器擴充功能後,按一下「Submit」(提交)。
系統會執行驗證程序,驗證新設定。
刪除剖析器擴充功能
開啟「View Custom/Prebuilt Parser」>「Extension」分頁 (或「Extensions」分頁),如「查看現有的剖析器擴充功能」一節所述。
按一下「刪除擴充功能」按鈕。
控管剖析器擴充功能的存取權
根據預設,具備管理員角色的使用者可以存取剖析器擴充功能。您可以控管哪些人能查看及管理剖析器擴充功能。如要進一步瞭解如何管理使用者和群組,或指派角色,請參閱「角色式存取控管」。
下表列出 Google SecOps 的新角色。
| 功能 | 動作 | 說明 |
|---|---|---|
| 剖析器 | 刪除 | 刪除剖析器擴充功能。 |
| 剖析器 | 編輯 | 建立及編輯剖析器擴充功能。 |
| 剖析器 | 查看 | 查看剖析器擴充功能。 |
使用剖析器擴充功能移除 UDM 欄位對應
您可以使用剖析器擴充功能,移除現有的 UDM 欄位對應。
- 依序點選「設定」>「資料管理」>「剖析器」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「剖析器」。
- 請使用下列任一方法查看「Parser Extension」(剖析器擴充功能) 頁面:
- 如要查看現有擴充功能,請依序點選 「Menu」(選單) >「Extend Parser」(擴充剖析器) >「View Extension」(查看擴充功能)。
- 如要建立新的剖析器擴充功能,請依序點選 「Menu」(選單) >「Extend Parser」(擴充剖析器) >「Create Extension」(建立擴充功能)。
選取「Write Code Snippets」(編寫程式碼片段) (或「Write code snippet」(編寫程式碼片段)) 做為擴充功能方法,新增自訂程式碼片段,移除特定 UDM 欄位的值。
如果是現有擴充功能,請在「Extension」(擴充功能) (或「Extensions」(擴充功能)) 分頁中,按一下「Edit Extension」(編輯擴充功能) (或「Edit」(編輯)),然後新增程式碼片段。
如需程式碼片段範例,請參閱「程式碼片段 - 移除現有對應」。
請按照提交程式碼片段操作說明中的步驟提交擴充功能。
時區處理和時間戳記格式
Google SecOps 會將時間戳記標準化並序列化為 RFC 3339 UTC 格式,精確度可達微秒 (YYYY-MM-DDTHH:MM:SS.ffffffZ)。如果來源記錄僅提供秒級精確度,平台會自動在缺少的數字後方補零 (.000000Z),以維持結構定義一致性。
如果事件時間戳記早於擷取時間 (ingested_timestamp < event_timestamp),通常是因為來源發出本機時鐘時間戳記,但沒有 ISO 時區偏移 (預設為世界標準時間),或時鐘偏移。您可以透過下列任一方法解決時區不一致的問題:
在剖析器擴充功能中調整時間戳記:在程式碼片段剖析器擴充功能中使用
date篩選器,指定來源時區:if [raw_log] =~ /EST/ { date { match => [ "timestamp_str", "MMM dd HH:mm:ss" ] timezone => "America/New_York" target => "event.metadata.event_timestamp" } }設定轉寄站收集器時區覆寫:依序前往「設定」>「資料管理」>「轉寄站」,編輯目標收集器,啟用「覆寫時區」,然後從「時區」選單中選取來源 IANA 時區 (例如
Europe/Paris),在擷取期間自動調整時間戳記。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。