剖析器擴充功能

支援以下發布途徑:

本文說明如何建立剖析器擴充功能,從原始記錄資料中擷取欄位,並將這些欄位對應至 Google Security Operations 平台中的目的地統合式資料模型 (UDM) 欄位。

這份文件概述剖析器擴充功能的建立程序:

建立剖析器擴充功能

剖析器擴充功能可提供靈活的方式,擴充現有預設 (和自訂) 剖析器的功能。剖析器擴充功能可提供彈性方式,在不取代現有預設 (或自訂) 剖析器的情況下,擴充其功能。擴充功能可讓您新增新的剖析邏輯、擷取及轉換欄位,以及更新或移除 UDML 欄位對應,藉此自訂剖析器管道。

剖析器擴充功能與自訂剖析器不同。您可以為沒有預設剖析器的記錄類型建立自訂剖析器,或選擇不採用剖析器更新

剖析器擷取和正規化程序

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.description UDM 欄位,而剖析器擴充功能將不同的原始記錄檔欄位對應至相同的 UDM 欄位,剖析器擴充功能就會覆寫預設剖析器設定的值。

限制

  • 每個記錄類型只能建立一個剖析器擴充功能:每個記錄類型只能建立一個剖析器擴充功能。
  • 僅使用一種資料對應指示方法:您可以使用無程式碼或程式碼片段方法建立剖析器擴充功能,但不能同時使用這兩種方法。
  • 驗證用的記錄範例:您必須提供過去 30 天內的記錄範例,才能驗證 UDM 剖析器擴充功能。詳情請參閱「確保記錄類型有有效的剖析器」。
  • 基本剖析器錯誤:剖析器擴充功能無法識別或修正基本剖析器錯誤。
  • 程式碼片段中的重複欄位:在程式碼片段中替換整個重複物件時,請務必小心謹慎,以免不慎遺失資料。詳情請參閱「重複欄位選取器的詳細資訊」。
  • 已解析的事件:剖析器擴充功能無法處理單一記錄中含有多個不重複事件的記錄,例如 Google 雲端硬碟陣列。
  • XML 和無程式碼:由於 XML 可能會發生編碼問題,因此不建議使用無程式碼方法。使用 XML 的程式碼片段方法。
  • 沒有追溯資料:您無法回溯解析原始記錄資料。
  • 使用無程式碼方法的保留關鍵字:如果記錄檔包含下列保留關鍵字,請使用程式碼片段方法,而非無程式碼方法:
    • collectionTimestamp
    • createTimestamp
    • enableCbnForLoop
    • event
    • filename
    • message
    • namespace
    • output
    • onErrorCount
    • timestamp
    • timezone
  • 移除現有對應關係:您只能使用程式碼片段移除現有的 UDM 欄位對應關係。
  • 移除重複 IP 欄位的對應項目:您無法移除重複 IP 欄位的 UDM 欄位對應項目。

剖析器概念

下列文件說明重要的剖析器概念:

必要條件

建立剖析器擴充功能的必要條件:

  • 記錄類型必須有有效的預設 (或自訂) 剖析器。
  • Google SecOps 必須能夠使用預設 (或自訂) 剖析器,擷取並正規化原始記錄。
  • 請確認目標記錄類型的有效預設 (或自訂) 剖析器已在過去 30 天內擷取原始記錄資料。這項資料應包含您要擷取或用來篩選記錄的欄位範例。這項資訊會用於驗證新的資料對應操作說明。

開始使用

建立剖析器擴充功能前,請先執行下列操作:

  1. 確認必要條件

    請確認有適用於記錄類型的有效剖析器。如果尚未有剖析器,請建立自訂剖析器。

  2. 找出要從原始記錄檔擷取的欄位

    找出要從原始記錄中擷取的欄位。

  3. 選取適當的 UDM 欄位

    選取適當的對應 UDM 欄位,對應擷取的原始記錄欄位。

  4. 選擇剖析器擴充功能定義方法

    請選擇兩種擴充方法 (資料對應方法) 之一,建立剖析器擴充功能。

確認必要條件

請確認您要擴充的記錄類型有有效的剖析器,如以下各節所述:

確保有對應的剖析器可處理記錄類型

請確認您要擴充的記錄類型有有效的預設 (或自訂) 剖析器。

在下列清單中搜尋記錄類型:

確保記錄類型有自訂剖析器

如要確保記錄類型有自訂剖析器,請按照下列步驟操作:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中搜尋要擴充的記錄類型。

確認剖析器是否已針對記錄類型啟用

如要檢查剖析器是否針對記錄類型啟用,請執行下列步驟:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中搜尋要擴充的記錄類型。

    如果記錄類型的剖析器未啟用,請啟用剖析器:

找出要從原始記錄檔擷取的欄位

請分析要擷取資料的原始記錄,找出預設 (或自訂) 剖析器未擷取的欄位。請留意預設 (或自訂) 剖析器如何擷取原始記錄欄位,並將這些欄位對應至相應的 UDM 欄位。

如要找出要從原始記錄檔擷取的特定欄位,您可以使用搜尋工具來找出這些欄位:

如要進一步瞭解如何在原始記錄中搜尋,請參閱:

選取適當的 UDM 欄位

您現在已找出要擷取的特定目標欄位,可以將這些欄位與對應的 UDM 目的地欄位進行比對。在原始記錄來源欄位和目的地 UDM 欄位之間建立明確的對應關係。您可以將資料對應至任何支援標準資料類型重複欄位的 UDM 欄位。

選擇正確的 UDM 欄位

以下資源可協助簡化程序:

熟悉主要的 UDM 概念

  • 邏輯物件:事件和實體

    UDM 結構定義會說明所有可用來儲存資料的屬性。每個 UDM 記錄都會描述事件或實體。資料會儲存在不同的欄位中,這取決於記錄描述的是事件還是實體。

    • UDM 事件物件會儲存環境中發生的動作相關資料。原始事件記錄會說明裝置 (例如防火牆或網頁 Proxy) 記錄的動作。
    • UDM 實體物件會儲存與 UDM 事件相關的參與者或實體資料,例如環境中的資產、使用者或資源。
  • UDM 事件的結構

  • UDM 實體結構

  • UDM 名詞:名詞代表 UDM 事件中的參與者或實體。名詞可以是「執行」事件中所述活動的裝置或使用者。名詞也可以是裝置或使用者,也就是事件中所述活動的目標

    UDM 名詞 說明
    principal 負責啟動事件中所述動作的實體。
    target 實體是指動作的收件者或對象。在防火牆連線中,接收連線的電腦會是目標。
    src 主體所處理的來源實體。舉例來說,如果使用者將檔案從一部機器複製到另一部機器,檔案和原始機器就會以 src 表示。
    intermediary 在事件中擔任中介角色的實體,例如 Proxy 伺服器。這些事件可能會影響動作,例如封鎖或變更要求。
    observer 監控事件並回報事件的實體,但不會直接與流量互動。例如網路入侵偵測系統或安全資訊與事件管理系統。
    about 事件中涉及的其他實體,不屬於上述類別。例如電子郵件附件或在程序啟動期間載入的 DLL。

    在實際操作中,最常用的是主要和目標名詞物件。請注意,上述說明構成了 Nouns 的建議用法。實際使用情況可能會因預設或自訂基礎剖析器的導入方式而異。

瞭解現有剖析器使用的資料對應

建議您瞭解預設 (或自訂) 剖析工具在原始記錄來源欄位與目的地 UDM 欄位之間,所使用的現有資料對應。

如要查看現有預設 (或自訂) 剖析器中原始記錄來源欄位與目的地 UDM 欄位之間的資料對應關係,請按照下列步驟操作:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中搜尋要擴充的記錄類型。
  3. 前往該資料列,然後依序點選 「選單」 >「查看」

    「Parser Code」分頁會顯示原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應。

使用 UDM 查詢工具

使用 UDM 查詢工具,找出與原始記錄檔來源欄位相符的 UDM 欄位。

Google SecOps 提供 UDM 查詢工具,可協助您快速找出目的地 UDM 欄位。如要使用 UDM 查詢工具,請依序前往「調查」>「SIEM 搜尋」

請參閱下列主題,進一步瞭解如何使用 UDM 查詢工具:

UDM 查詢工具範例

舉例來說,如果原始記錄中含有名為「packets」的來源欄位,請使用 UDM 查詢工具,找出名稱中含有「packets」的潛在目的地 UDM 欄位:

  1. 依序前往「調查」>「SIEM 搜尋」

  2. 在「SIEM 搜尋」頁面中,在「按照值查詢 UDM 欄位」欄位中輸入「packets」,然後按一下「UDM 查詢」

    系統會開啟「UDM Lookup」對話方塊。搜尋工具會根據「欄位名稱」或「欄位值」比對 UDM 欄位:

    • 依「欄位名稱」查詢:比對您輸入的文字字串,與含有該文字的欄位名稱相符。
    • 欄位值查詢:比對您輸入的值,並在儲存的記錄資料中找出包含該值的欄位。
  3. 在「UDM Lookup」對話方塊中,選取「UDM 欄位」

    搜尋功能會顯示可能的 UDM 欄位清單,這些欄位的 UDM 欄位名稱中含有「packets」文字。

  4. 逐一點選各列,即可查看各個 UDM 欄位的說明。

避免錯誤的重要 UDM 考量

  • 外觀相似的欄位:UDM 的階層結構可能會導致名稱相似的欄位。請參閱預設剖析器的相關說明。詳情請參閱「瞭解現有剖析工具使用的資料對應」。
  • 任意欄位對應:如果資料並未直接對應至 UDM 欄位,請使用 additional 物件。詳情請參閱「將任意欄位對應至 UDM」。
  • 重複欄位:在程式碼片段中使用重複欄位時,請務必謹慎。取代整個物件可能會覆寫原始資料。使用無程式碼方法可進一步掌控重複欄位。詳情請參閱「重複欄位選取器的詳細資訊」。
  • UDM 事件類型的必要 UDM 欄位:將 UDM metadata.event_type 欄位指派給 UDM 記錄時,每個 event_type 都需要在 UDM 記錄中提供一組不同的相關欄位。詳情請參閱「進一步瞭解如何指派 UDM metadata.event_type 欄位」。
  • 基本剖析器問題:剖析器擴充功能無法修正基本剖析器的錯誤。基礎剖析器是建立 UDM 記錄的預設 (或自訂) 剖析器。請考慮強化剖析器擴充功能、修改基礎剖析器或預先篩選記錄等選項。
將任意欄位對應至 UDM

如果找不到適合儲存資料的標準 UDM 欄位,請使用 additional 物件將資料儲存為自訂鍵/值組合。這樣一來,即使沒有相符的 UDM 欄位,您還是可以在 UDM 記錄中儲存重要資訊。

選擇剖析器擴充功能定義方法

選擇剖析器擴充定義方法前,您必須先完成以下各節:

接下來,請開啟「剖析器擴充功能」頁面,並選取擴充功能方法,用於定義剖析器擴充功能:

開啟「剖析器擴充功能」頁面

您可以在「Parser extensions」頁面中定義新的剖析器擴充功能。

您可以透過以下方式開啟「剖析器擴充功能」頁面:從「設定」選單原始記錄搜尋,或從舊版原始記錄搜尋:

透過「設定」選單開啟

如何從「設定」選單開啟「剖析器擴充功能」頁面:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」

    「Parsers」表格會依記錄類型顯示預設剖析器清單。

  2. 找出要擴充的記錄類型,然後依序點選 「選單」圖示 >「建立擴充功能」

    系統會開啟「Parser extensions」頁面。

如何從原始記錄搜尋開啟「剖析器擴充功能」頁面:

  1. 依序前往「調查」>「SIEM 搜尋」
  2. 在搜尋欄位中,將前置字串 raw = 新增至搜尋引數,並在搜尋字詞前加上引號。例如:raw = "example.com"
  3. 按一下「執行搜尋」。結果會顯示在「Raw Logs」面板中。
  4. 在「Raw Logs」面板中按一下記錄 (資料列)。畫面上會顯示「Event View」面板。
  5. 按一下「事件檢視」面板中的「原始記錄」分頁標籤。系統會顯示原始記錄。
  6. 依序按一下「管理剖析器」>「建立擴充功能」>「下一步」

    系統會開啟「Parser extensions」頁面。

如要從舊版 原始記錄搜尋開啟「剖析器擴充功能」頁面,請按照下列步驟操作:

  1. 使用舊版原始記錄搜尋功能,搜尋與要剖析的記錄相似的記錄。
  2. 在「事件」面板中選取事件。
  3. 展開「事件資料」面板。
  4. 依序按一下「管理剖析器」>「建立擴充功能」>「下一步」

    系統會開啟「Parser extensions」頁面。

剖析器擴充功能頁面

頁面會顯示「原始記錄」和「擴充功能定義」面板:

  • 「原始記錄」面板:

    這會顯示所選記錄類型的原始記錄資料範例。如果您是透過「原始記錄搜尋」開啟這個頁面,範例資料就是搜尋結果。您可以使用「View as」選單 (RAW、JSON、CSV、XML 等) 和「Wrap Text」核取方塊設定範例格式。

    1. 檢查顯示的原始記錄資料樣本是否代表剖析器擴充功能要處理的記錄。

    2. 按一下「Preview UDM Output」,查看樣本原始記錄資料的 UDM 輸出內容。

  • 「擴充功能定義」面板:

    這樣一來,您就能使用以下兩種對應指示方法之一定義剖析器擴充功能:對應資料欄位 (無程式碼) 或編寫程式碼片段。您無法在同一個剖析器擴充功能中同時使用這兩種方法。

    視您選擇的方法而定,您可以指定要從傳入的原始記錄中擷取的來源記錄資料欄位,並將這些欄位對應至對應的 UDIMM 欄位,也可以編寫程式碼片段來執行這些工作和其他工作。

選取擴充功能做法

在「Parser extensions」頁面的「Extension definition」面板中,選取「Extension method」欄位中的下列任一方法,建立剖析器擴充功能:

  • 對應資料欄位 (無程式碼) 方法:

    您可以使用這種方法指定原始記錄中的欄位,並將這些欄位對應至目的地 UDM 欄位。

    此方法適用於下列原始記錄格式:

    • 原生 JSON、原生 XML 或 CSV。
    • Syslog 標頭加上原生 JSON、原生 XML 或 CSV。您可以為原始記錄檔建立資料欄位類型對應指示,格式如下:JSONXMLCSVSYSLOG + JSONSYSLOG + XMLSYSLOG + CSV

    請參閱後續步驟,參閱建立無程式碼 (地圖資料欄位) 操作說明

  • 編寫程式碼片段

    這種方法可讓您使用類似 Logstash 的語法,指定從原始記錄中擷取及轉換值的操作說明,並將這些值指派給 UDM 記錄中的 UDM 欄位。

    • 程式碼片段會使用與預設 (或自訂) 剖析器相同的語法和區段。詳情請參閱「剖析器語法」。

    • 這種做法適用於該記錄類型的所有支援資料格式

    請參閱後續步驟,建立程式碼片段操作說明

建立無程式碼 (地圖資料欄位) 操作說明

無程式碼方法 (也稱為對應資料欄位方法) 可讓您指定原始記錄欄位的路徑,並將這些欄位對應至對應的目的地 UDM 欄位。

使用無程式碼方法建立剖析器擴充功能前,您必須先完成下列章節:

定義剖析器擴充功能的後續步驟如下:

  1. 設定重複欄位選取器
  2. 為每個欄位定義資料對應指示
  3. 提交並啟用剖析器擴充功能

設定重複欄位選取器

在「Extension definition」面板的「Repeated Fields」欄位中,設定剖析器擴充功能應如何將值儲存至重複欄位 (支援值陣列的欄位,例如 principal.ip):

  • 附加值:新擷取的值會附加至 UDM 陣列欄位中儲存的現有值組合。
  • 取代值:新擷取的值會取代 UDM 陣列欄位中現有的值組,這些值先前是由預設剖析器儲存。

「重複欄位」選取器中的設定不會影響非重複欄位。

詳情請參閱「重複欄位選取器的詳細資訊」。

為每個欄位定義資料對應指示

針對要從原始記錄中擷取的每個欄位,定義資料對應指示。指令應指定原始欄位在原始記錄中的路徑,並將其對應至目的地 UDM 欄位。

  1. 如果「原始記錄」面板中顯示的原始記錄範例包含 Syslog 標頭,系統就會顯示「Syslog」和「目標」欄位。(某些記錄格式不含 Syslog 標頭,例如原生 JSON、原生 XML 或 CSV)。

    Google SecOps 需要 SyslogTarget 欄位,才能預先處理 Syslog 標頭,並擷取記錄的結構化部分。

    1. 定義下列欄位:

      • Syslog:這是使用者定義的模式,可預先處理並將 Syslog 標頭與原始記錄的結構化部分分開。

        使用 Grok 和規則運算式指定擷取模式,以便識別 Syslog 標頭和原始記錄訊息。詳情請參閱「定義 Syslog Extractor 欄位」。

      • 目標:Syslog 欄位中的變數名稱,用於儲存記錄的結構化部分。

        在擷取模式中指定變數名稱,該模式會儲存記錄的結構化部分。

      以下是SyslogTarget 欄位的擷取模式和變數名稱範例。

      Syslog Extractor 欄位

    2. 在「Syslog」和「Target」欄位中輸入值後,請按一下「Validate」按鈕。

      驗證程序會檢查語法和剖析錯誤,然後傳回下列任一項目:

      • 成功:資料對應欄位會顯示。定義剖析器擴充功能的其餘部分。
      • 失敗:系統會顯示錯誤訊息。請先修正錯誤狀態再繼續。
  2. 視需要定義前置條件指令。

    預設條件指令會將靜態值與原始記錄中的欄位比對,藉此識別剖析器擴充功能要處理的原始記錄子集。如果傳入的原始記錄符合前置條件,剖析器擴充功能就會套用對應指示。如果值不相符,剖析器擴充功能就不會套用對應指示。

    填寫下列欄位:

    • 前置條件欄位:原始記錄中包含要比較的值的欄位 ID。如果記錄資料格式為 JSON 或 XML,請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入資料欄位置。
    • 先決條件運算子:選取 EQUALSNOT EQUALS
    • 先決條件值:與原始記錄中的先決條件欄位進行比較的靜態值。

    如需其他預設條件指令範例,請參閱「無程式碼 - 擷取具有預設條件值的欄位」。

  3. 將原始記錄檔資料欄位對應至目的地 UDM 欄位:

    • 原始資料欄:如果記錄資料格式為 JSON (例如 jsonPayload.connection.dest_ip) 或 XML (例如 /Event/Reason-Code),請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入欄位位置 (注意:索引位置從 1 開始)。

    • 目的地欄位:輸入用來儲存值的完整合格 UDM 欄位名稱,例如 udm.metadata.collected_timestamp.seconds

  4. 如要繼續新增更多欄位,請按一下「新增」,然後輸入下一個欄位的所有對應指示詳細資料。

如需其他欄位對應範例,請參閱「無程式碼:擷取欄位」。

提交並啟用剖析器擴充功能

針對要從原始記錄中擷取的所有欄位定義資料對應指示後,請提交並啟用剖析器擴充功能。

按一下「提交」,即可儲存並驗證對應指示。

Google SecOps 會驗證對應指示:

  • 如果驗證程序成功,狀態就會變更為「Live」,對應指示就會開始處理傳入的記錄資料。
  • 如果驗證程序失敗,狀態會變更為「失敗」,並在「原始記錄」欄位中顯示錯誤。

    以下是驗證錯誤的範例:

      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:剖析器擴充功能驗證失敗。

進一步瞭解重複欄位選取器

部分 UDM 欄位會儲存值陣列,例如 principal.ip 欄位。重複欄位選取器可讓您控制剖析器擴充功能如何在重複欄位中儲存新擷取的資料:

  • 附加值

    剖析器擴充功能會將新擷取的值附加至 UDM 欄位中現有值的陣列。

  • 替換值

    剖析器擴充功能會將新擷取的值取代 UDM 欄位中現有的值陣列。

只有在重複欄位位於階層的最低層級時,剖析器擴充功能才能將資料對應至重複欄位。例如:

  • 系統支援將值對應至 udm.principal.ip,因為重複的 ip 欄位位於階層的最底層,而 principal 並非重複欄位
  • 系統不支援將值對應至 udm.intermediary.hostname,因為 intermediary重複欄位,且不在階層的最低層級。

下表列出「重複欄位」選取器設定對產生的 UDM 記錄有何影響。

「重複欄位」選項 記錄範例 剖析器擴充功能設定 生成的結果
附加值 {"protoPayload":{"@type":"type.AuditLog","authenticationInfo":{"principalEmail":"admin@cmmar.co"},"requestMetadata":{"callerIp":"1.1.1.1, 2.2.2.2"}}} 先決條件欄位: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":"admin@cmmar.co"},"requestMetadata":{"callerIp":"2.2.2.2, 3.3.3.3", "name":"Akamai Ltd"}}} 前置條件 1:
前置條件欄位:protoPayload.requestMetadata.callerIp
前置條件值:" "
前置條件運算子:NOT_EQUALS
原始資料欄位:protoPayload.requestMetadata.callerIp
目的地欄位:event.idm.read_only_udm.principal.ip

前置條件 2:
原始資料欄位:protoPayload.requestMetadata.name
目的地欄位:event.idm.read_only_udm.metadata.product_name

在套用擴充功能前,由預先建構的剖析器產生的事件。
metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}

套用擴充功能後的輸出結果。
timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} .... product_name: "Akamai Ltd"}principal:{ip:"1.1.1.1, 2.2.2.2, 3.3.3.3"}}}

替換值 {"protoPayload":{"@type":"type..AuditLog","authenticationInfo":{"principalEmail":"admin@cmmar.co"},"requestMetadata":{"callerIp":"2.2.2.2"}}} 先決條件欄位: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 輸出結果 timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} ....} principal:{ip:"2.2.2.2"}}}

進一步瞭解 Syslog 擷取器欄位

您可以使用 Syslog 擷取工具欄位,在規則運算式模式中定義 Grok、規則運算式和命名符記,藉此將 Syslog 標頭與結構化記錄分開,並儲存輸出內容。

定義 Syslog Extractor 欄位

SyslogTarget 欄位的值會共同定義剖析器擴充功能如何將 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 欄位中使用以下範例運算式: %{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 Extractor 欄位

下表提供更多範例,包括記錄範例、Syslog 擷取模式、Target 變數名稱和結果。

原始記錄範例 系統記錄檔欄位 目標欄位 結果
<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 都需要一組不同的相關欄位,例如,沒有 userUSER_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 的必要欄位,請使用下列資源:

  • Google SecOps 說明文件:統合資料格式使用指南 - 各事件類型的必填和選填 UDM 欄位

  • 第三方非官方資源:UDM 事件驗證

    如果 UDM 使用指南缺乏詳細資訊,這份文件會提供填入特定 UDM metadata.event_type 所需的最低 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 欄位。

在使用程式碼片段建立剖析器擴充功能之前,您必須先完成下列部分:

定義剖析器擴充功能的後續步驟如下:

  1. 如需相關訣竅和最佳做法,請參閱「撰寫程式碼片段操作說明時的訣竅和最佳做法」。
  2. 建立程式碼片段指示
  3. 提交程式碼片段操作說明

編寫程式碼片段指令時的訣竅和最佳做法

程式碼片段指令可能會因 Grok 模式錯誤、重新命名或取代作業失敗,或語法錯誤等問題而失敗。如需相關提示和最佳做法,請參閱下列說明:

建立程式碼片段操作說明

程式碼片段指示會使用與預設 (或自訂) 剖析器相同的語法和部分:

  • 第 1 節:從原始記錄中擷取資料。
  • 第 2 節:轉換已擷取的資料。
  • 第 3 節:為 UDM 欄位指派一或多個值。
  • 第 4 節。將 UDM 事件欄位繫結至 @output 鍵。

如要使用程式碼片段建立剖析器擴充功能,請按照下列步驟操作:

  1. 在「剖析器擴充功能頁面,點選「CBN 程式碼片段」面板,輸入程式碼片段即可建立剖析器擴充功能。
  2. 按一下「驗證」,驗證對應指示。

程式碼片段指示範例

以下範例說明程式碼片段。

以下是原始記錄檔的範例:

  {
      "insertId": "00000000",
      "jsonPayload": {
          ...section omitted for brevity...
          "packets_sent": "4",
          ...section omitted for brevity...
      },
      "timestamp": "2022-05-03T01:45:00.150614953Z"
  }

以下是程式碼片段範例,可將 jsonPayload.packets_sent 中的值對應至 network.sent_bytes UDM 欄位:

mutate {
 replace => {
    "jsonPayload.packets_sent" => ""
 }
}
filter {
    # 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"
                }
            }
            # Section 3. assign the value to a UDM field
            mutate {
                copy => {
                    "udm.network.sent_bytes" => "jsonPayload.packets_sent"
                }
                on_error => "_exception"
            }
            if ![_exception] {
                # Section 4. Bind the UDM fields to the @output key
                mutate {
                    merge => {
                        "@output" => "event"
                    }
                }
            }
        }
    }
}

提交程式碼片段操作說明

  1. 按一下「提交」即可儲存對應指示。

  2. Google SecOps 會驗證對應指示。

    • 如果驗證程序成功,狀態就會變更為「Live」,對應指示就會開始處理傳入的記錄資料。
    • 如果驗證程序失敗,狀態會變更為「失敗」,並在「原始記錄」欄位中顯示錯誤。

管理現有的剖析器擴充功能

您可以查看、編輯、刪除及控管現有剖析器擴充功能的存取權。

查看現有的剖析器擴充功能

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」清單中,找出要查看的剖析器 (記錄類型)。具有剖析器擴充功能的剖析器,其名稱旁會顯示 EXTENSION 文字。
  3. 前往該資料列,然後依序點選 「選單」 >「查看擴充功能」

    系統會顯示「View Custom/Prebuilt Parser」 >「Extension」分頁,顯示剖析器擴充功能的詳細資料。摘要面板會預設顯示 LIVE 剖析器擴充功能。

編輯剖析器擴充功能

  1. 依序開啟「View Custom/Prebuilt Parser」 >「Extension」分頁,如查看現有的剖析器擴充功能所述。

  2. 按一下「編輯擴充功能」按鈕。

    系統會顯示「Parser extensions」頁面。

  3. 編輯剖析器擴充功能。

    • 如要取消編輯並捨棄變更,請按一下「捨棄草稿」

    • 如要隨時刪除剖析器擴充功能,請按一下「Delete Failed Extension」

    • 編輯完剖析器擴充功能後,請按一下「提交」

      系統會執行驗證程序,驗證新的設定。

刪除剖析器擴充功能

  1. 依序開啟「View Custom/Prebuilt Parser」 >「Extension」分頁,如「查看現有的剖析器擴充功能」一文所述。

  2. 按一下「Delete Extension」按鈕。

控管剖析器擴充功能的存取權

根據預設,具備「管理員」角色的使用者可以存取剖析器擴充功能。您可以控管哪些人可以查看及管理剖析器擴充功能。如要進一步瞭解如何管理使用者和群組,或指派角色,請參閱「角色型存取權控管」一文。

下表列出 Google SecOps 中的新角色。

功能 動作 說明
剖析器 刪除 刪除剖析器擴充功能。
剖析器 編輯 建立及編輯剖析器擴充功能。
剖析器 查看 查看剖析器擴充功能。

使用剖析器擴充功能移除 UDM 欄位對應

您可以使用剖析器擴充功能來移除現有的 UDM 欄位對應項目。

  1. 依序點選「SIEM 設定」>「剖析器」
  2. 請使用下列任一方法查看「剖析器擴充功能」頁面:
    • 如果是現有的擴充功能,請依序點選 「選單」 >「擴充剖析器」>「查看擴充功能」
    • 如要建立新的剖析器擴充功能,請依序按一下 「選單」 >「擴充剖析器」>「建立擴充功能」
  3. 選取「編寫程式碼片段」做為擴充方法,即可新增自訂程式碼片段,移除特定 UDM 欄位的值。

    如果是現有的擴充功能,請在「剖析器擴充功能」窗格中按一下「編輯」,然後新增程式碼片段。

    如需程式碼片段範例,請參閱「程式碼片段 - 移除現有對應」。

  4. 請按照「提交程式碼片段指示」一節中的步驟提交擴充功能。

還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。