收集 Cloudflare 記錄
本文說明如何使用 Webhook (HTTP 目的地) 或 Google Cloud Storage,將 Cloudflare 記錄檔擷取至 Google Security Operations。Cloudflare 會以 DNS、HTTP、稽核、Zero Trust 和 CASB 的記錄形式,產生作業資料。整合後,您就能將這些記錄傳送至 Google SecOps 進行分析和監控。剖析器會先初始化一組空白欄位,然後剖析 JSON 格式的 Cloudflare 記錄,並捨棄任何無效的 JSON 訊息。接著,程式碼會根據特定欄位的存在與值,使用條件邏輯判斷 Cloudflare 產品和事件類型,並相應填入整合式資料模型 (UDM) 欄位。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體。
- 已啟用 LogPush 的 Cloudflare Enterprise 帳戶。
- Webhook 方法: Google Cloud 控制台的特殊權限。
- Google Cloud Storage 方法:Google Cloud Storage 的特殊存取權。
方法 1:使用 Webhook (HTTP 目的地) 設定 Cloudflare 記錄匯出功能
這個方法可讓你將 Cloudflare 記錄直接串流至 Google SecOps,不必使用中繼儲存空間。
在 Google SecOps 中設定 Webhook 動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Cloudflare Webhook
)。 - 選取「Webhook」做為「來源類型」。
- 選取「Cloudflare」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符:
\n
。 - 資產命名空間:資產命名空間。
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- 分割分隔符:
- 點選「下一步」。
- 在「完成」畫面中檢查新的動態饋給設定,然後按一下「提交」。
- 按一下「產生密鑰」,產生驗證這個動態饋給的密鑰。
- 複製並儲存密鑰,因為您無法再次查看這組密鑰。
- 前往「詳細資料」分頁。
- 從「端點資訊」欄位複製動態消息端點網址。
- 按一下 [完成]。
為 Webhook 動態饋給建立 API 金鑰
- 依序前往 Google Cloud 控制台 >「API 和服務」>「憑證」。
- 按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
- 點選「編輯 API 金鑰」。
- 在「API restrictions」下方,選取「Restrict key」。
- 從清單中選取「Google SecOps API」。
- 按一下 [儲存]。
- 複製 API 金鑰值。
設定 Cloudflare LogPush HTTP 目的地
- 登入 Cloudflare 資訊主頁。
- 選取要搭配 LogPush 使用的企業帳戶或網域。
- 依序前往「Analytics & Logs」(數據分析與記錄檔) >「Logpush」(記錄檔推送)。
- 按一下「Create a Logpush job」(建立 Logpush 工作)。
- 在「選取目的地」中,選擇「HTTP 目的地」。
輸入含有驗證參數的 HTTP 端點網址:
<ENDPOINT_URL>?header_X-goog-api-key=<API_KEY>&header_X-Webhook-Access-Key=<SECRET_KEY>
更改下列內容:
<ENDPOINT_URL>
:Google SecOps 的動態消息端點網址。<API_KEY>
:來自 Google Cloud 控制台的 API 金鑰 (如含有特殊字元,請進行網址編碼)。<SECRET_KEY>
:Webhook 動態消息中的密鑰 (如果包含特殊字元,則為網址編碼)。
按一下「繼續」。
選取要推送的資料集 (例如「HTTP requests」(HTTP 要求)、「DNS」、「Audit」(稽核)、「Zero Trust」(零信任)、「CASB」)。
設定記錄推送作業:
- 輸入「工作名稱」。
- 選用:在「如果記錄符合」下方設定篩選條件。
- 在「傳送下列欄位」中,選取要納入的欄位。
- 選擇時間戳記格式 (建議使用 RFC3 339)。
- 視需要設定取樣率。
按一下「提交」即可建立記錄推送工作。
驗證 Webhook 整合
設定完成後,記錄應該會在幾分鐘內顯示在 Google SecOps 中。驗證方法:
- 依序前往「調查」> SIEM 搜尋」。
- 使用您設定的擷取標籤搜尋記錄。
- 確認系統是否正確剖析 Cloudflare 記錄。
方法 2:使用 Google Cloud Storage 設定 Cloudflare 記錄檔匯出功能
設定 Cloudflare 將記錄推送至該服務,這需要授予 Cloudflare 必要權限。
建立 Google Cloud Bucket
- 登入Google Cloud 控制台。
- 前往「Cloud Storage Buckets」(Cloud Storage bucket) 頁面。
- 點選「建立」。
- 在「建立 bucket」頁面中,輸入 bucket 資訊:
- 名稱:輸入符合值區名稱規定的不重複名稱 (例如
cloudflare-data
)。 - 位置類型:選取位置類型和區域。
- 如要啟用階層命名空間,請按一下展開箭頭,展開「為檔案導向和資料密集型工作負載提供最理想的儲存空間」,然後選取「為這個 bucket 啟用階層命名空間」。
- 名稱:輸入符合值區名稱規定的不重複名稱 (例如
- 點選「建立」。
授予值區權限
- 在 Cloud Storage 控制台中,選取先前建立的 bucket。
- 按一下「Permissions」(權限) 分頁標籤。
- 按一下「授予存取權」。
- 新增具備「Storage 物件管理員」權限的帳戶
logpush@cloudflare-data.iam.gserviceaccount.com
。 - 按一下 [儲存]。
設定 Cloudflare LogPush 至 Google Cloud Storage
- 登入 Cloudflare 資訊主頁。
- 選取要搭配 LogPush 使用的企業帳戶或網域。
- 依序前往「Analytics & Logs」(數據分析與記錄檔) >「Logpush」(記錄檔推送)。
- 按一下「Create a Logpush job」(建立 Logpush 工作)。
- 在「選取目的地」中,選擇「Google Cloud Storage」。
- 輸入 Google Cloud Storage bucket 路徑 (例如
gs://cloudflare-data/logs/
)。 按一下「繼續」。
輸入擁有權權杖,然後按一下「繼續」。
選取要推送至儲存空間的資料集。
設定記錄推送作業:
- 輸入「工作名稱」。
- 在「如果記錄檔相符」下方,您可以選取要納入或從記錄檔中移除的事件。
- 在「傳送下列欄位」中,選擇要推送的記錄檔。
- 選擇時間戳記格式 (建議使用 RFC 339)。
- 視需要設定取樣率。
按一下「提交」。
在 Google SecOps 中設定動態饋給,從 Google Cloud Storage 擷取 Cloudflare 記錄
- 依序前往「SIEM 設定」>「動態消息」。
- 按一下「新增」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Cloudflare GCS Logs
)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「Cloudflare」做為「記錄類型」。
- 按一下「取得服務帳戶」。
- 點選「下一步」。
指定下列輸入參數的值:
- 儲存空間值區 URI: Google Cloud 格式的 bucket URL。
gs://my-bucket/<value>/
這個網址的結尾必須是正斜線 (/)。 - 來源刪除選項:根據偏好設定選取刪除選項。
- 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。
- 資產命名空間:資產命名空間。
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- 儲存空間值區 URI: Google Cloud 格式的 bucket URL。
點選「下一步」。
在「完成」畫面中檢查新的動態饋給設定,然後按一下「提交」。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
ClientIP | read_only_udm.principal.asset.ip read_only_udm.principal.ip |
這個值取自 ClientIP 欄位。 |
ClientRequestHost | read_only_udm.target.asset.hostname read_only_udm.target.hostname |
這個值取自 ClientRequestHost 欄位。 |
ClientRequestMethod | read_only_udm.network.http.method | 這個值取自 ClientRequestMethod 欄位。 |
ClientRequestURI | read_only_udm.target.url | 這個值取自 ClientRequestURI 欄位。如果 ClientRequestHost 欄位不為空白,系統會將值與 ClientRequestHost 欄位串連。 |
ClientSrcPort | read_only_udm.principal.port | 這個值取自 ClientSrcPort 欄位。 |
ClientRequestUserAgent | read_only_udm.network.http.user_agent | 這個值取自 ClientRequestUserAgent 欄位。 |
ClientSSLCipher | read_only_udm.network.tls.cipher | 這個值取自 ClientSSLCipher 欄位。 |
ClientSSLProtocol | read_only_udm.network.tls.version | 這個值取自 ClientSSLProtocol 欄位。 |
國家/地區 | read_only_udm.target.location.country_or_region | 這個值取自「國家/地區」欄位。 |
CreatedAt | read_only_udm.metadata.event_timestamp | 值取自 CreatedAt 欄位。 |
日期時間 | read_only_udm.metadata.event_timestamp | 值取自「日期時間」欄位。 |
DestinationIP | read_only_udm.target.asset.ip read_only_udm.target.ip |
這個值取自 DestinationIP 欄位。 |
DestinationPort | read_only_udm.target.port | 這個值取自 DestinationPort 欄位。 |
DeviceID | read_only_udm.principal.asset_id | 這個值取自 DeviceID 欄位,並以「Cloudflare:」為前置字元。 |
DeviceName | read_only_udm.principal.asset.hostname read_only_udm.principal.hostname |
值取自 DeviceName 欄位。 |
DstIP | read_only_udm.target.asset.ip read_only_udm.target.ip |
這個值取自 DstIP 欄位。 |
DstPort | read_only_udm.target.port | 這個值取自 DstPort 欄位。 |
EdgeResponseBytes | read_only_udm.network.received_bytes | 這個值取自 EdgeResponseBytes 欄位。 |
EdgeResponseStatus | read_only_udm.network.http.response_code | 值取自 EdgeResponseStatus 欄位。 |
EdgeServerIP | read_only_udm.target.asset.ip read_only_udm.target.ip |
這個值取自 EdgeServerIP 欄位。 |
電子郵件 | read_only_udm.principal.user.email_addresses read_only_udm.target.user.email_addresses |
這個值取自「電子郵件」欄位。 |
FirewallMatchesActions | read_only_udm.security_result.action | 如果 FirewallMatchesAction 欄位為「allow」、「Allow」、「ALLOW」、「skip」、「SKIP」或「Skip」,則值會設為「ALLOW」;如果 FirewallMatchesAction 欄位為「challengeSolved」或「jschallengeSolved」,則值會設為「ALLOW_WITH_MODIFICATION」;如果 FirewallMatchesAction 欄位為「drop」或「block」,則值會設為「BLOCK」;如果 FirewallMatchesAction 欄位不為空白,則值會設為「UNKNOWN_ACTION」。 |
FirewallMatchesRuleIDs | read_only_udm.security_result.rule_id | 這個值取自 FirewallMatchesRuleIDs 欄位。 |
FirewallMatchesSources | read_only_udm.security_result.rule_name | 這個值取自 FirewallMatchesSources 欄位。 |
HTTPMethod | read_only_udm.network.http.method | 值取自 HTTPMethod 欄位。 |
HTTPHost | read_only_udm.target.hostname | 這個值取自 HTTPHost 欄位。 |
HTTPVersion | read_only_udm.network.application_protocol | 這個值取自 HTTPVersion 欄位。如果值包含「HTTP」,系統會將其替換為「HTTP」。 |
IPAddress | read_only_udm.target.asset.ip read_only_udm.target.ip |
這個值取自 IPAddress 欄位。 |
IsIsolated | read_only_udm.about.labels read_only_udm.security_result.about.resource.attribute.labels |
這個值取自 IsIsolated 欄位,並會轉換為字串。 |
位置 | read_only_udm.principal.location.name | 這個值取自「位置」欄位。 |
OriginIP | read_only_udm.intermediary.ip read_only_udm.target.asset.ip read_only_udm.target.ip |
這個值取自 OriginIP 欄位。 |
OriginPort | read_only_udm.target.port | 這個值取自 OriginPort 欄位。 |
OwnerID | read_only_udm.target.user.product_object_id | 這個值取自 OwnerID 欄位。 |
政策 | read_only_udm.security_result.rule_name | 值取自「政策」欄位。 |
PolicyID | read_only_udm.security_result.rule_id | 值取自 PolicyID 欄位。 |
PolicyName | read_only_udm.security_result.rule_name | 這個值取自 PolicyName 欄位。 |
通訊協定 | read_only_udm.network.ip_protocol | 這個值取自「通訊協定」欄位,並會轉換為大寫。 |
QueryCategoryIDs | read_only_udm.security_result.about.labels read_only_udm.security_result.about.resource.attribute.labels |
值取自 QueryCategoryIDs 欄位。 |
QueryName | read_only_udm.network.dns.questions.name | 此值取自 QueryName 欄位。 |
QueryNameReversed | read_only_udm.network.dns.questions.name | 這個值取自 QueryNameReversed 欄位。 |
QuerySize | read_only_udm.network.sent_bytes | 這個值取自 QuerySize 欄位。 |
QueryType | read_only_udm.network.dns.questions.type | 這個值取自 QueryType 欄位。如果值是已知的 DNS 記錄類型,系統會將其對應至相應的數值。否則,該值會轉換為字串。 |
RData | read_only_udm.network.dns.answers | 這個值取自 RData 欄位。類型欄位會轉換為無正負號整數。 |
RayID | read_only_udm.metadata.product_log_id | 這個值取自 RayID 欄位。 |
參照網址 | read_only_udm.network.http.referral_url | 這個值取自「Referer」欄位。 |
RequestID | read_only_udm.metadata.product_log_id | 這個值取自 RequestID 欄位。 |
ResolverDecision | read_only_udm.security_result.summary | 這個值取自 ResolverDecision 欄位。 |
ResourceID | read_only_udm.target.resource.id read_only_udm.target.resource.product_object_id |
值取自 ResourceID 欄位。 |
ResourceType | read_only_udm.target.resource.resource_subtype | 這個值取自 ResourceType 欄位。 |
SNI | read_only_udm.network.tls.client.server_name | 這個值取自 SNI 欄位。 |
SecurityAction | read_only_udm.security_result.action | 如果 SecurityAction 欄位或 sec_action 欄位為空白,則值會設為「ALLOW」;如果 SecurityAction 欄位為「challengeSolved」或「jschallengeSolved」,則值會設為「ALLOW_WITH_MODIFICATION」;如果 SecurityAction 欄位為「drop」或「block」,則值會設為「BLOCK」。 |
SecurityLevel | read_only_udm.security_result.severity | 這個值取自 SecurityLevel 欄位,並對應至相應的 UDM 嚴重程度值。 |
SessionID | read_only_udm.network.session_id | 這個值取自 SessionID 欄位。 |
SessionStartTime | read_only_udm.metadata.event_timestamp | 這個值取自 SessionStartTime 欄位。 |
SourceIP | read_only_udm.principal.asset.ip read_only_udm.principal.ip read_only_udm.src.asset.ip read_only_udm.src.ip |
這個值取自 SourceIP 欄位。 |
SourcePort | read_only_udm.principal.port read_only_udm.src.port |
這個值取自 SourcePort 欄位。 |
SrcIP | read_only_udm.principal.asset.ip read_only_udm.principal.ip |
這個值取自 SrcIP 欄位。 |
SrcPort | read_only_udm.principal.port | 值取自 SrcPort 欄位。 |
TemporaryAccessDuration | read_only_udm.network.session_duration.seconds | 這個值取自 TemporaryAccessDuration 欄位。 |
時間戳記 | read_only_udm.metadata.event_timestamp | 這個值取自「時間戳記」欄位。 |
傳輸 | read_only_udm.network.ip_protocol | 這個值取自「Transport」欄位,並會轉換為大寫。 |
網址 | read_only_udm.target.url | 值取自網址欄位。 |
UserAgent | read_only_udm.network.http.user_agent | 這個值取自 UserAgent 欄位。 |
UserID | read_only_udm.principal.user.product_object_id | 這個值取自 UserID 欄位。 |
UserUID | read_only_udm.target.user.product_object_id | 這個值取自 UserUID 欄位。 |
VirtualNetworkID | read_only_udm.principal.resource.product_object_id | 這個值取自 VirtualNetworkID 欄位。 |
WAFAction | read_only_udm.security_result.about.labels read_only_udm.security_result.about.resource.attribute.labels |
值取自 WAFAction 欄位。 |
WAFAttackScore | read_only_udm.security_result.about.resource.attribute.labels | 值取自 WAFAttackScore 欄位。 |
WAFFlags | read_only_udm.security_result.about.resource.attribute.labels | 值取自 WAFFlags 欄位。 |
WAFProfile | read_only_udm.security_result.about.labels read_only_udm.security_result.about.resource.attribute.labels |
值取自 WAFProfile 欄位。 |
WAFRCEAttackScore | read_only_udm.security_result.about.resource.attribute.labels | 這個值取自 WAFRCEAttackScore 欄位。 |
WAFRuleID | read_only_udm.security_result.about.labels read_only_udm.security_result.about.resource.attribute.labels read_only_udm.security_result.threat_id |
值取自 WAFRuleID 欄位。 |
WAFRuleMessage | read_only_udm.security_result.rule_name read_only_udm.security_result.threat_name |
這個值取自 WAFRuleMessage 欄位。 |
WAFSQLiAttackScore | read_only_udm.security_result.about.resource.attribute.labels | 這個值取自 WAFSQLiAttackScore 欄位。 |
WAFXSSAttackScore | read_only_udm.security_result.about.resource.attribute.labels | 值取自 WAFXSSAttackScore 欄位。 |
ZoneID | read_only_udm.additional.fields | 這個值取自 ZoneID 欄位。 |
read_only_udm.metadata.log_type | 值設為「CLOUDFLARE」。 | |
read_only_udm.metadata.product_name | 如果記錄是 DNS 記錄,這個值會設為「Cloudflare Gateway DNS」;如果是 Gateway HTTP 記錄,則會設為「Cloudflare Gateway HTTP」;如果是稽核記錄,則會設為「Cloudflare Audit」;否則會設為「Web Application Firewall」。 | |
read_only_udm.metadata.vendor_name | 值設為「Cloudflare」。 | |
read_only_udm.network.application_protocol | 如果記錄是 DNS 記錄,這個值會設為「DNS」;如果 HTTPVersion 欄位包含「HTTP」,這個值會設為「HTTP」;如果 Protocol 欄位不為空白,且不是「tls」或「TLS」,這個值會設為 Protocol 欄位的值 (轉換為大寫)。 | |
read_only_udm.network.direction | 如果 EgressIP 欄位不為空白,則值會設為「OUTBOUND」。 | |
read_only_udm.network.http.parsed_user_agent | 這個值取自 UserAgent 或 ClientRequestUserAgent 欄位,並使用 parseduseragent 篩選器剖析。 | |
read_only_udm.extensions.auth.type | 如果「動作」欄位為「登入」或「登出」,則值會設為「MACHINE」。 | |
read_only_udm.metadata.event_type | 如果記錄是 DNS 記錄,這個值會設為「NETWORK_DNS」;如果記錄是 Gateway HTTP 記錄,這個值會設為「NETWORK_CONNECTION」;如果記錄是稽核記錄,且 ActorIP 和 ActorEmail 欄位空白,這個值會設為「USER_RESOURCE_ACCESS」;如果記錄是稽核記錄,且 ResourceType 和 newvalue 欄位不空白,這個值會設為「USER_RESOURCE_UPDATE_CONTENT」;如果 Action 欄位為「login」,這個值會設為「USER_LOGIN」;如果 Action 欄位為「logout」,這個值會設為「USER_LOGOUT」;如果 Email 欄位不空白且符合電子郵件地址格式,這個值會設為「USER_RESOURCE_ACCESS」;如果 EgressIP 和 SourceIP 欄位不空白,或 OriginIP 和 SourceIP 欄位不空白,這個值會設為「NETWORK_CONNECTION」。 | |
read_only_udm.target.file.mime_type | 值取自 EdgeResponseContentType 欄位。 | |
read_only_udm.target.location.country_or_region | 這個值取自「國家/地區」欄位。 | |
read_only_udm.target.resource.id | 值取自 AccountID 欄位或 ResourceID 欄位。 | |
read_only_udm.target.resource.product_object_id | 值取自 AccountID 欄位、AppUUID 欄位或 ResourceID 欄位。 | |
read_only_udm.target.user.product_object_id | 這個值取自 OwnerID 欄位或 UserUID 欄位。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。