收集 Azure WAF 記錄

剖析器版本:4.0

支援:

本文說明如何使用 Azure 儲存空間帳戶,將 Azure Web 應用程式防火牆 (WAF) 記錄檔匯出至 Google Security Operations。剖析器會處理 JSON 格式的記錄,並轉換為 UDM。系統會處理含有 records 陣列的記錄,方法是逐一疊代每筆記錄,並將特定欄位對應至 UDM 屬性。如果缺少 records 陣列,剖析器會將記錄檔視為單一事件,並相應地擷取及對應欄位。

事前準備

請確認您符合下列必要條件:

  • Google SecOps 執行個體
  • 有效的 Azure 租用戶
  • Azure 的特殊存取權

設定 Azure 儲存體帳戶

  1. 在 Azure 控制台中,搜尋「Storage accounts」。
  2. 點選「建立」。
  3. 指定下列輸入參數的值:
    • 「Subscription」(訂閱方案):選取訂閱方案。
    • Resource Group:選取資源群組。
    • 區域:選取區域。
    • 效能:選取效能 (建議選取「標準」)。
    • Redundancy:選取備援 (建議選取 GRS 或 LRS)。
    • 儲存體帳戶名稱:輸入新儲存體帳戶的名稱。
  4. 按一下「Review + create」。
  5. 查看帳戶總覽,然後按一下「建立」。
  6. 在「儲存空間帳戶總覽」頁面中,選取「安全性 + 網路」中的「存取金鑰」子選單。
  7. 按一下「key1」或「key2」旁邊的「顯示」。
  8. 按一下「複製到剪貼簿」即可複製金鑰。
  9. 將金鑰儲存在安全的位置,以備日後使用。
  10. 在「Storage Account Overview」頁面中,選取「Settings」中的「Endpoints」子選單。
  11. 按一下「複製到剪貼簿」,複製「Blob 服務」端點網址,例如 https://<storageaccountname>.blob.core.windows.net。
  12. 請將端點網址儲存在安全的位置,以供日後使用。

如何設定 Azure WAF 記錄的記錄匯出功能

  1. 使用具備權限的帳戶登入 Azure 入口網站。
  2. 前往「網頁應用程式防火牆 (WAF) 規則」,選取要監控的 WAF。
  3. 選取「監控」>「診斷設定」。
  4. 按一下「+ 新增診斷設定」。
    • 輸入診斷設定的描述性名稱。
  5. 選取「allLogs」allLogs。
  6. 勾選「Archive to a storage account」(封存至儲存空間帳戶) 核取方塊,做為目的地。
    • 指定「Subscription」和「Storage Account」。
  7. 按一下 [儲存]。

設定動態饋給

在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:

  • SIEM 設定 > 摘要 > 新增摘要
  • 依序點選「內容中心」「內容包」「開始使用」

如何設定 Azure WAF 動態饋給

  1. 按一下「Azure Platform」套件。
  2. 找到「Azure WAF」記錄類型,然後點選「新增動態饋給」。
  3. 為下列欄位指定值:

    • 來源類型:Microsoft Azure Blob 儲存體 V2。
    • Azure URI:Blob 端點網址。
      • ENDPOINT_URL/BLOB_NAME
        • 取代下列項目:
          • ENDPOINT_URL:Blob 端點網址 (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME:Blob 的名稱 (例如 <logname>-logs)
    • 來源刪除選項:根據擷取偏好設定選取刪除選項。 注意:如果選取 Delete transferred files 或 Delete transferred files and empty directories 選項,請務必授予服務帳戶適當的權限。
    • 檔案存在時間上限:包含過去幾天內修改過的檔案。預設值為 180 天。
    • 共用金鑰:Azure Blob 儲存體的存取金鑰。 進階選項

    • 動態饋給名稱:系統預先填入的值,用於識別動態饋給。

    • 資產命名空間:與動態饋給相關聯的命名空間。

    • 擷取標籤:套用至這個動態饋給所有事件的標籤。

  4. 點選「建立動態饋給」。

如要進一步瞭解如何為這個產品系列的各種記錄類型設定多個動態饋給,請參閱「依產品設定動態饋給」。

UDM 對應表

記錄欄位 UDM 對應 邏輯
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value 這個值取自原始記錄中的 backendPoolName 欄位。
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value 這個值取自原始記錄中的 backendSettingName 欄位。
category metadata.product_event_type 這個值取自原始記錄中的 category 欄位。
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value 如果原始記錄中有 records 欄位,系統會從 EventEnqueuedUtcTime 欄位擷取值。
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value 如果原始記錄中有 records 欄位,系統會從 EventProcessedUtcTime 欄位擷取值。
operationName additional.fields[?key=='operationName'].value.string_value 這個值取自原始記錄中的 operationName 欄位。
properties.action additional.fields[?key=='action'].value.string_value 如果存在 records 欄位,系統會從原始記錄的 properties.action 欄位中取得值。
properties.action security_result.action_details 如果 records 欄位不存在,系統會從原始記錄的 properties.action 欄位擷取值。
properties.clientIP、properties.clientIp principal.asset.ip、principal.ip 系統會從原始記錄的 properties.clientIP 或 properties.clientIp 欄位中擷取值,並優先採用 clientIP。
properties.clientPort principal.port 這個值取自原始記錄中的 properties.clientPort 欄位。
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value 如果 records 欄位不存在,系統會從原始記錄的 properties.clientResponseTime 欄位擷取值。
properties.details.data additional.fields[?key=='Properties data'].value.string_value 如果存在 records 欄位,系統會從原始記錄的 properties.details.data 欄位中取得值。
properties.details.file principal.process.file.full_path 如果 records 欄位不存在,系統會從原始記錄的 properties.details.file 欄位擷取值。
properties.details.matches[].matchVariableName、properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value 這個值取自原始記錄中的 properties.details.matches 陣列。UDM 中的 key 是使用索引 (idx) 和 matchVariableName 建構而成。value取自 matchVariableValue。
properties.details.message metadata.description 這個值取自原始記錄中的 properties.details.message 欄位,並已移除反斜線和引號。
properties.details.msg metadata.description 如果存在 records 欄位,系統會從原始記錄的 properties.details.msg 欄位中取得值。
properties.httpMethod network.http.method 這個值取自原始記錄中的 properties.httpMethod 欄位。
properties.httpStatus network.http.response_code 這個值取自原始記錄中的 properties.httpStatus 欄位。
properties.httpVersion network.application_protocol 如果 properties.httpVersion 欄位包含 HTTP,系統會指派 HTTP 值。
properties.host、properties.hostname、properties.originalHost principal.asset.hostname、principal.hostname 這個值會從 properties.originalHost、properties.host 或 properties.hostname 擷取,並依此順序優先處理。
properties.policyId security_result.detection_fields[?key=='policyId'].value 這個值取自原始記錄中的 properties.policyId 欄位。
properties.policyMode security_result.detection_fields[?key=='policyMode'].value 如果存在 records 欄位,系統會從原始記錄的 properties.policyMode 欄位中取得值。
properties.policy additional.fields[?key=='Properties policy'].value.string_value 如果原始記錄中有 records 欄位,系統會從 properties.policy 欄位擷取值。
properties.receivedBytes network.received_bytes 這個值取自原始記錄中的 properties.receivedBytes 欄位。
properties.requestUri target.url 這個值取自原始記錄中的 properties.requestUri 欄位。
properties.ruleId security_result.rule_id 這個值取自原始記錄中的 properties.ruleId 欄位。
properties.ruleName security_result.rule_name 如果存在 records 欄位,系統會從原始記錄的 properties.ruleName 欄位中取得值。
properties.ruleName、ruleSetType security_result.rule_name 如果 records 欄位不存在,系統會從 properties.ruleName 欄位取得值,如果該欄位為空白,則從原始記錄中的 ruleSetType 欄位取得值。
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value 這個值取自原始記錄中的 properties.ruleSetVersion 欄位。
properties.sentBytes network.sent_bytes 這個值取自原始記錄中的 properties.sentBytes 欄位。
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value 如果沒有 records 欄位,系統會從原始記錄的 properties.serverResponseLatency 欄位擷取值。
properties.serverRouted target.asset.ip、target.ip、target.port IP 和通訊埠是從 properties.serverRouted 欄位擷取。
properties.sslCipher network.tls.cipher 這個值取自原始記錄中的 properties.sslCipher 欄位。
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer 這個值取自原始記錄中的 properties.sslClientCertificateIssuerName 欄位。
properties.sslProtocol network.tls.version 這個值取自原始記錄中的 properties.sslProtocol 欄位。
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value 如果沒有 records 欄位,系統會從原始記錄的 properties.timeTaken 欄位擷取值。
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value 如果存在 records 欄位,系統會從原始記錄的 properties.trackingReference 欄位中取得值。
properties.transactionId network.session_id 這個值取自原始記錄中的 properties.transactionId 欄位。
properties.userAgent network.http.user_agent 這個值取自原始記錄中的 properties.userAgent 欄位。
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value 如果沒有 records 欄位,系統會從原始記錄的 properties.WAFEvaluationTime 欄位擷取值。
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value 如果 records 欄位不存在,系統會從原始記錄的 properties.WAFMode 欄位擷取值。
rec.category metadata.product_event_type 如果存在 records 欄位,系統會從原始記錄的 rec.category 欄位中取得值。
rec.operationName additional.fields[?key=='operationName'].value.string_value 如果存在 records 欄位,系統會從原始記錄的 rec.operationName 欄位中取得值。
rec.properties.clientIP、rec.properties.clientIp principal.asset.ip、principal.ip 值取自原始記錄中的 rec.properties.clientIP 或 rec.properties.clientIp 欄位,如果存在 records 欄位,則優先採用 clientIP。
rec.properties.clientPort principal.port 如果存在 records 欄位,系統會從原始記錄的 rec.properties.clientPort 欄位中取得值。
rec.properties.host principal.asset.hostname、principal.hostname 如果原始記錄中有 records 欄位,系統會從 rec.properties.host 欄位擷取值。
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value 如果原始記錄中有 records 欄位,系統會從 rec.properties.policy 欄位擷取值。
rec.properties.requestUri target.url 如果存在 records 欄位,系統會從原始記錄的 rec.properties.requestUri 欄位中取得值。
rec.properties.ruleName security_result.rule_name 如果存在 records 欄位,系統會從原始記錄的 rec.properties.ruleName 欄位中取得值。
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value 如果存在 records 欄位,系統會從原始記錄的 rec.properties.trackingReference 欄位中取得值。
rec.resourceId target.resource.id 如果原始記錄中有 records 欄位,系統會從 rec.resourceId 欄位擷取值。
rec.time metadata.event_timestamp 如果原始記錄中有 records 欄位,系統會從 rec.time 欄位擷取值。
resourceId target.resource.id 如果 records 欄位不存在,系統會從原始記錄的 resourceId 欄位擷取值。
timeStamp metadata.event_timestamp 如果 records 欄位不存在,系統會從原始記錄的 timeStamp 欄位擷取值。
不適用 metadata.event_type 如果主體 (主機名稱或用戶端 IP) 和目的地 IP 都存在,這個值會設為 NETWORK_CONNECTION。如果主體存在但缺少目的地 IP,則會設為 STATUS_UPDATE。否則,預設值為 GENERIC_EVENT 或 event_type 欄位的值。
不適用 metadata.log_type 值會硬式編碼為 AZURE_WAF。
不適用 metadata.product_name 值會硬式編碼為 Azure WAF Logs。
不適用 metadata.vendor_name 這個值是以硬式編碼設為 Microsoft。
不適用 security_result.action 如果 properties.action 為 Matched,值會設為 ALLOW;如果 properties.action 為 Block,值會設為 BLOCK。

變更記錄

查看這個剖析器的變更記錄

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