Google Cloud Armor 的每項要求記錄 (包括安全性政策名稱、比對規則優先順序、相關聯動作和相關資訊) 都會記錄在外部應用程式負載平衡器和外部 Proxy 網路負載平衡器的記錄中。新後端服務的記錄功能預設為停用,因此您必須啟用記錄功能,才能記錄 Cloud Armor 的完整記錄資訊。
Cloud Armor 記錄是 Cloud Load Balancing 記錄的一部分。也就是說,Cloud Armor 記錄檔的產生作業,取決於負載平衡器設定的記錄檔取樣率。如果降低負載平衡器的取樣率,Cloud Armor 要求記錄也會以較低的頻率取樣。此外,如果您使用跨專案服務參照,系統會在包含負載平衡器前端和網址對應的主機或服務專案下產生記錄。因此,建議前端專案的管理員授予後端專案管理員讀取記錄和指標的權限。
透過記錄功能,您可以查看 Cloud Armor 安全性政策評估的每項要求,以及根據優先順序最高的比對規則所採取的結果或動作。舉例來說,如要查看遭拒的要求,可以使用 jsonPayload.enforcedSecurityPolicy.outcome="DENY" 或 jsonPayload.statusDetails="denied_by_security_policy" 等篩選器。
此外,您也可以設定不同的記錄層級,評估安全性政策和規則是否正常運作。如需完整資訊,請參閱「詳細記錄」。
安全性政策記錄項目
Logs Explorer中的下列記錄項目,適用於 Cloud Armor 安全性政策和規則記錄。項目包含 jsonPayload 中的下列結構。HTTP 要求詳細資料會顯示在 httpRequest 訊息中。
statusDetails:回應代碼的文字說明。redirected_by_security_policy:要求已由重新導向規則 (GOOGLE_RECAPTCHA或EXTERNAL_302) 重新導向。denied_by_security_policy:要求因 Cloud Armor 安全性政策而遭負載平衡器拒絕。body_denied_by_security_policy:要求主體因 Cloud Armor 安全性政策而遭負載平衡器拒絕。
enforcedSecurityPolicy:強制執行的安全性政策規則。name:安全性政策的名稱。priority:安全性政策中比對規則的優先順序數值。adaptiveProtection:自動部署的 Google Cloud Armor Adaptive Protection 規則相關資訊 (如適用)。autoDeployAlertId:Adaptive Protection 偵測到的事件警告 ID。
configuredAction:比對規則中設定的操作名稱,例如ALLOW、DENY、GOOGLE_RECAPTCHA、EXTERNAL_302、THROTTLE(適用於節流規則)、RATE_BASED_BAN(適用於依頻率禁止規則)。rateLimitAction:符合節流規則或依頻率封鎖規則時,頻率限制動作的相關資訊。key:頻率限制金鑰值 (最多 36 個位元組)。如果金鑰類型為ALL,或者金鑰類型為HTTP-HEADER或HTTP-COOKIE,且要求中沒有指定的標頭或 Cookie,則會省略這個欄位。outcome:可能的值如下:"RATE_LIMIT_THRESHOLD_CONFORM"(低於設定的頻率限制門檻時)。- 如果高於設定的頻率限制門檻,則為
"RATE_LIMIT_THRESHOLD_EXCEED"。 "BAN_THRESHOLD_EXCEED"(如果高於設定的禁止門檻)。
outcome:執行設定動作的結果,例如ACCEPT、DENY、REDIRECT、EXEMPT。preconfiguredExprIds:觸發規則的所有預先設定 WAF 規則運算式 ID。ruleNumber:安全性政策規則的永久專屬 ID,設定後不會變更。rulesetId:觸發的代管規則類別名稱或 ID (例如google:sqli:stable)。rulesetVersion:比對規則中定義的版本設定 (例如stable或canary)。rulesetArtifact:不透明的專屬 ID,對應至用於評估的版本 Artifact Registry。threatIntelligence:Google Threat Intelligence 中相符 IP 位址清單的相關資訊 (如適用)。categories:相符的 IP 位址清單名稱。
addressGroup:相符位址群組的相關資訊 (如適用)。names:相符的位址群組名稱。
previewSecurityPolicy:如果要求符合設為預覽的規則,就會填入這個欄位 (只有在預覽規則優先於強制執行的規則時,才會顯示)。name:安全性政策名稱priority:安全性政策中比對規則的優先順序數值。configuredAction:比對規則中設定的操作名稱,例如ALLOW、DENY、GOOGLE_RECAPTCHA、EXTERNAL_302、THROTTLE(適用於節流規則)、RATE_BASED_BAN(適用於依頻率禁止規則)。rateLimitAction:符合節流規則或依頻率封鎖規則時,頻率限制動作的相關資訊。key:頻率限制金鑰值 (最多 36 個位元組)。如果金鑰類型為ALL,或金鑰類型為HTTP-HEADER或HTTP-COOKIE,且要求中沒有指定的標頭或 Cookie,則會省略這個欄位。outcome:可能的值如下:"RATE_LIMIT_THRESHOLD_CONFORM"(低於設定的頻率限制門檻時)。- 如果高於設定的頻率限制門檻,則為
"RATE_LIMIT_THRESHOLD_EXCEED"。 "BAN_THRESHOLD_EXCEED"(如果高於設定的禁止門檻)。
outcome:執行設定動作的結果,例如ACCEPT、DENY、REDIRECT、EXEMPT。preconfiguredExprIds:觸發規則的所有預先設定 WAF 規則運算式 ID。ruleNumber:安全性政策規則的永久專屬 ID,設定後不會變更。rulesetId:觸發的代管規則類別名稱或 ID (例如google:sqli:stable)。rulesetVersion:比對規則中定義的版本設定 (例如stable或canary)。rulesetArtifact:不透明的專屬 ID,對應至用於評估的版本 Artifact Registry。threatIntelligence:Threat Intelligence 中相符 IP 位址清單的相關資訊 (如適用)。categories:相符的 IP 位址清單名稱。
addressGroup:相符位址群組的相關資訊 (如適用)。names:相符的位址群組名稱。
enforcedEdgeSecurityPolicy:強制執行的邊緣安全性政策規則。name:安全性政策的名稱。priority:安全性政策中比對規則的優先順序。configuredAction:比對規則中設定的動作名稱,例如ALLOW、DENY。outcome:執行設定動作的結果,例如ACCEPT、DENY。
previewEdgeSecurityPolicy:如果要求符合設為預先發布版的邊緣安全性政策規則,就會填入這個欄位。只有在預覽規則優先於強制執行的規則時,才會出現previewEdgeSecurityPolicy記錄項目。name:安全性政策的名稱。priority:安全性政策中比對規則的優先順序數值。configuredAction:比對規則中設定的動作名稱,例如ALLOW、DENY。outcome:執行設定動作的結果,例如ACCEPT、DENY。
evaluatedSecurityPolicies:這項政策評估的非終端比對規則清單 (例如僅限資訊和候選預覽比對)。ruleNumber:安全性政策規則的永久專屬 ID,設定後不會變更。rulesetId:觸發的代管規則類別名稱或 ID (例如google:sqli:stable)。rulesetVersion:比對規則中定義的版本設定 (例如stable或canary)。rulesetArtifact:不透明的專屬 ID,對應至用於評估的版本 Artifact Registry。
查看記錄
您只能在Google Cloud 控制台查看 Cloud Armor 安全性政策的記錄。
控制台
前往 Google Cloud 控制台的「Cloud Armor policies」(Cloud Armor 政策)。
按一下「 動作」。
選取「查看記錄」。
將回應與記錄項目建立關聯
如要將用戶端要求直接與全域外部應用程式負載平衡器和傳統版應用程式負載平衡器的個別記錄項目建立關聯,您可以在後端服務設定自訂回應標頭,並加入 {cloud_trace_id} 變數,如下例所示:
--custom-response-header='X-Cloud-Trace-Id:{cloud_trace_id}'
負載平衡器會從 HTTP 要求擷取或為其產生 32 個字元的十六進位追蹤 ID,並將這個變數填入該 ID,然後將標頭傳回用戶端,包括 Cloud Armor 拒絕要求時。
在 Cloud Logging 中,這個追蹤記錄 ID 會記錄在負載平衡器記錄項目的頂層 trace 欄位中,格式為 projects/PROJECT_ID/traces/TRACE_ID。您可以在Logs Explorer中,依據這個 trace 值篩選,找出特定允許或封鎖要求的記錄項目。如需逐步說明,請參閱「找出記錄中遭封鎖的要求並建立關聯」。
要求資料記錄
與 Cloud Armor 搭配使用時,jsonPayload 具有下列額外欄位:
securityPolicyRequestData:安全性政策處理要求時,與要求相關的資料,無論最終比對出哪項規則。recaptchaActionToken:與 reCAPTCHA 動作權杖相關的資料。score:嵌入 reCAPTCHA 動作權杖的使用者合法性分數。只有在要求附加 reCAPTCHA 動作權杖,且根據安全性政策規則成功解碼時,才會顯示。詳情請參閱「強制執行 reCAPTCHA 評估」。
recaptchaSessionToken:與 reCAPTCHA 工作階段權杖相關的資料。score:嵌入 reCAPTCHA 工作階段權杖的使用者合法性分數。只有在要求附加 reCAPTCHA 工作階段權杖,且根據安全性政策規則成功解碼時,才會顯示。
userIpInfo:與使用者 IP 用量相關的資料。source:通常是解析使用者 IP 的標頭欄位。ipAddress:從來源欄位解析的 IP 位址。
remoteIpInfo:與要求用戶端 IP 位址相關的資料。ipAddress:要求的用戶端 IP 位址。region_code:IP 位址的雙字母國家/地區代碼。asn:與 IP 位址對應的五位數自治系統編號 (ASN)。
tlsJa4Fingerprint:如果用戶端使用HTTPS、HTTP/2或HTTP/3連線,則為 JA4 TTL/SSL 指紋。只有在指紋可用,且有安全性政策評估要求時,才會顯示 (無論政策中的運算式是否與要求相符)。tlsJa3Fingerprint:如果用戶端使用HTTPS、HTTP/2或HTTP/3連線,則為 JA3 TTL/SSL 指紋。只有在指紋可用,且有安全性政策評估要求時,才會顯示 (無論政策中的運算式是否與要求相符)。
記錄範例
以下是封鎖要求的調節規則記錄詳細資料範例:
jsonPayload: {
enforcedSecurityPolicy: {
priority: 100
name: "sample-prod-policy"
configuredAction: "THROTTLE"
outcome: "DENY"
rateLimitAction: {
key:"sample-key"
outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
}
}
@type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"
以下是封鎖要求的頻率限制規則記錄詳細資料範例:
jsonPayload: {
@type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
enforcedSecurityPolicy: {
priority: 150
name: "sample-prod-policy"
outcome: "DENY"
configuredAction: "RATE_BASED_BAN"
rateLimitAction: {
key:"sample-key"
outcome:"BAN_THRESHOLD_EXCEED"
}
}
statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"
後續步驟
- 瞭解如何排解 Cloud Armor 問題。