請按照這些操作說明排解 Google Cloud Armor 安全性政策的問題。
一般問題
對安全性政策進行偵錯
如需有關特定事件觸發預先設定規則的其他資訊,請參閱「使用要求記錄」,然後啟用詳細記錄功能。Cloud Logging 會在記錄檔中記錄更詳細的資料,方便您分析及偵錯政策和規則。
即使在 Google Cloud Armor 安全性政策中設定了拒絕規則,仍允許流量
如要修正這個問題,請按照下列步驟操作:
請確認 Google Cloud Armor 安全性政策已附加至目標後端服務。舉例來說,下列指令會說明與後端服務
BACKEND
相關聯的所有資料。傳回的結果應包含與此後端服務相關聯的 Google Cloud Armor 安全性政策名稱。gcloud compute backend-services describe BACKEND
請查看 HTTP(S) 記錄,判斷系統是否已針對您的流量比對了哪些政策和規則,以及相關動作。如要查看記錄,請使用 Cloud Logging。
以下是允許要求的範例記錄,其中有興趣的欄位已加以醒目標示。請檢查下列欄位,確認這些欄位與您設定拒絕流量的規則相符:
configuredAction
應與規則中設定的動作相符。name
應與附加至此後端服務的 Google Cloud Armor 安全性政策名稱相符。outcome
應與configuredAction
相符。priority
應與規則的優先順序號碼相符。
httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/ responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: mydev-policy-log-test1 outcome: ACCEPT priority: 2147483647 statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE_NAME forwarding_rule_name: FORWARDING_RULE_NAME project_id: PROJECT_ID target_proxy_name: TARGET_HTTP_PROXY_NAME url_map_name: URL_MAP_NAME zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'
檢查規則階層,確保系統比對正確的規則。優先順序較高的動作為允許的規則可能會與您的流量相符。在 Google Cloud CLI 的
security-policies
上使用describe
指令,查看 Google Cloud Armor 安全性政策的內容。舉例來說,以下範例說明優先順序較高的允許規則 (優先順序 100) 如何比對來自 1.2.3.4 IP 位址的流量,以免優先順序較低的拒絕規則 (優先順序 200) 觸發並封鎖流量。
gcloud compute security-policies describe POLICY_NAME
輸出:
creationTimestamp: '2017-04-18T14:47:58.045-07:00 description: '' fingerprint: Yu5spBjdoC0= id: '2560355463394441057' kind: compute#securityPolicy name: POLICY_NAME rules: -action: allow description: allow high priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.4/32' preview: false priority: 100 -action: deny description: deny lower priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.0/24 preview: false priority: 200 -action: deny description: default rule kind: compute#securityPolicyRule match: srcIpRanges: -'*' preview: false priority: 2147483647 selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
預先設定的規則傳回偽陽性
XSS 和 SQLi 偵測功能會根據 HTTP 要求標頭和其他 L7 參數的靜態簽章比對結果,這些規則運算式模式容易產生誤報。您可以在預覽模式中使用預先設定的 XSS 和 SQLi 偵測規則,然後檢查記錄檔是否有任何誤判。
如果發現偽陽性,您可以將流量內容與 OWASP CRS 規則進行比較。如果規則無效或不相關,請使用 evaluatePreconfiguredWaf
運算式停用規則,並在 exclude ID list
引數中指定規則的 ID。
查看記錄並移除所有誤判後,請停用預覽模式。
如要在預覽模式中新增預先設定的規則,請按照下列步驟操作:
在預覽模式中使用預先設定的運算式組合建立安全性政策:
gcloud compute security-policies rules create 1000 --security-policy POLICY_NAME --expression "evaluatePreconfiguredWaf('xss-stable')" --action deny-403 --preview
查看 HTTP(S) 記錄,瞭解 HTTP 要求欄位 (例如
url
和cookie
)。例如,requestUrl
與 OWASP CRS 規則 ID 941180 的正比對結果如下:httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/foo?document.cookie=1010" responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: POLICY_NAME outcome: ACCEPT priority: 2147483647 preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ] statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE forwarding_rule_name: mydev-forwarding-rule project_id: mydev-staging target_proxy_name: mydev-target-http-proxy url_map_name: mydev-url-map zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'
更新 Google Cloud Armor 安全性政策中的規則,排除 OWASP CRS 規則 ID 941180:
gcloud compute security-policies rules update 1000 \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \ --action deny-403 \ --preview
再次查看記錄,然後停用預覽模式來套用規則。
系統不會封鎖或拒絕使用已拒絕簽章的用戶端
如果將 Google Cloud Armor 與 Cloud CDN 搭配使用,系統僅會針對下列要求執行安全性政策:動態內容、快取失敗,或其他目的地為 CDN 原始伺服器的要求。即使下游 Google Cloud Armor 安全性政策會防止快取命中要求抵達 CDN 原始伺服器,仍會執行快取命中要求。
使用預先設定的網路應用程式防火牆規則時,降低超過 8 KB 的 POST 主體風險
在 Google Cloud Armor 安全政策中評估預先設定的網路應用程式防火牆規則時,系統會檢查最多 8 KB 的 POST 主體,看看是否有與網路應用程式防火牆規則相符的簽章。這種做法可讓您在維持其他 Google 客戶可用性的同時,提供低延遲的 Layer 7 檢查和防護功能。
您可以在安全性政策中建立規則,確保不會有未檢查的內容傳送至後端,藉此降低大型 POST 要求的風險。建立規則,拒絕超過 8 KB (8192 位元組) 的 POST 主體大小流量。以下程式碼範例說明如何建立這項規則:
gcloud compute security-policies rules create 10 \ --security-policy my-policy \ --expression "int(request.headers['content-length']) > 8192" \ --action deny-403 \ --description "Block requests great than 8KB"
已命名 IP 位址清單的問題
本節提供如何解決命名 IP 位址清單問題的資訊。
已命名 IP 位址清單中的 IP 位址
清單中的 IP 位址一律會與 Google Cloud Armor 已命名 IP 清單指南中列出的提供者網站中的 IP 位址相符。如對這些清單有任何疑問,請與 Cloud 支援團隊聯絡。
已命名 IP 位址清單中的 IP 位址在 Google Cloud Armor 中已過時
Google Cloud Armor 會每天將清單與 IP 位址清單供應商同步。資料可能會過時,比供應商的資料延遲幾小時或一天。不過,如果您認為過時資料的延遲時間超過預期 (例如超過一週),請與雲端支援團隊聯絡。
無法建立參照已命名 IP 位址清單的安全政策
您可以嘗試使用以下指令,建立參照已命名 IP 位址清單的安全政策:
gcloud compute security-policies rules create 750 \ --security-policy my \ --expression "evaluatePreconfiguredExpr('sourceiplist-example')" \ --action "allow"
如果指令失敗,您會看到類似下方的錯誤訊息:
ERROR: (gcloud.compute.security-policies.rules.create) Could not fetch resource: - Invalid value for field 'resource.match.expr': '{ "expression": "evaluatePreconfiguredExpr(\u0027sourceiplist-example\u0027)"}'. Error parsing Google Cloud Armor rule matcher expression: sourceiplist-example is not a valid preconfigured expression set.
請確認系統支援特定供應商,且 IP 位址清單的名稱正確無誤。您可以使用下列 gcloud
指令,列出目前預先設定的運算式組合,以便確認這項資訊:
gcloud compute security-policies list-preconfigured-expression-sets
雖然已預先設定名為 IP 位址許可清單的規則,但流量仍遭到封鎖
您可能會發現,來自已命名 IP 位址清單的 IP 位址會遭到封鎖:
確認流量來自已命名 IP 位址許可清單中的 IP 位址。
請檢查是否有其他優先順序較高的安全規則,可封鎖流量。如果問題仍未解決,請與 Cloud 支援團隊聯絡。
確認安全性政策已附加至正確的後端服務:
gcloud compute backend-services describe BACKEND_SERVICE
檢查安全性政策中的規則。例如:
gcloud compute security-policies describe POLICY_NAME
指令會傳回類似以下的資訊:
--- … name: POLICY_NAME rules: -action: allow description: allow fastly ip addresses kind: compute#securityPolicyRule match: expr: expression: evaluatePreconfiguredExpr('sourceiplist-fastly') preview: false priority: 100 -action: deny(403) description: Default rule, higher priority overrides it kind: compute#securityPolicyRule match: config: srcIpRanges: -'*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 -action: deny(404) description: deny altostrat referer kind: compute#securityPolicyRule match: expr: expression: request.headers['Referer'].contains('altostrat') preview: false priority: 50 …
上述安全政策包含三個規則:預設拒絕規則、適用於 Fastly IP 位址的允許規則,以及適用於包含
altostrat
的參照來源的拒絕規則。並列出各自的優先順序。查看記錄,判斷哪些規則與您的流量和相關動作相符。如要瞭解記錄功能,請參閱「使用記錄檔探索工具」。
以下是記錄範例:
httpRequest: { referer: "http://www.altostrat.com/" remoteIp: "23.230.32.10" requestMethod: "HEAD" requestSize: "79" requestUrl: "http://www.example.com/" responseSize: "258" status: 404 userAgent: "Mozilla/5.0" } … jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" enforcedSecurityPolicy: { configuredAction: "DENY" name: "POLICY_NAME" outcome: "DENY" priority: 50 } statusDetails: "denied_by_security_policy" } …
根據上述記錄,要求來自
23.230.32.10
,而23.230.32.10
已納入 Fastly 的公開 IP 位址清單。不過,這項要求與優先順序較高的拒絕規則相符,該規則的優先順序為 50。與安全性政策中的內容相比,這個規則對應到包含altostrat
的參照來源的拒絕規則。由於要求具有http://www.altostrat.com/
的參照來源,因此安全性規則的強制執行機制運作正常。
Security Command Center 發現項目的問題
本節提供 Security Command Center 發現項目相關問題的資訊。
Google Cloud Armor 資訊卡未顯示在 Security Command Center 中
在 Security Command Center 介面中啟用 Google Cloud Armor 發現項目。
Google Cloud Armor 的發現項目不會顯示在 Security Command Center 中
如果 Security Command Center 中沒有顯示 Google Cloud Armor 的發現項目,表示後端服務的流量可能不符合提出發現項目的條件。
如對後端的流量有疑問,請在 Cloud Monitoring 資訊主頁的「Network Security Policies」下方查看要求統計資料。
發現項目過於雜亂
如需這項問題的協助,請與 Cloud 支援團隊聯絡。
Google Cloud Armor Adaptive Protection 相關問題
請按照下列操作說明解決 Adaptive Protection 相關問題。
為安全性政策啟用自動調整式防護機制,但 Cloud Logging 中沒有任何記錄
自適應防護記錄會與 Google Cloud Armor 要求記錄分開產生,並顯示在 Cloud Logging 的不同資源下。Adaptive Protection 記錄和事件位於 Cloud Logging 中的 網路安全性政策資源下方。在安全性政策中啟用 Adaptive Protection 後,系統會先進行至少一小時的訓練,然後 Adaptive Protection 才會開始針對可疑攻擊產生快訊。在訓練期間,Adaptive Protection 會從傳入的要求流量中學習,並為每個受該安全性政策保護的後端服務建立獨特的基線。之後 Adaptive Protection 便可識別可疑活動。
如果您為安全性政策啟用 Adaptive Protection,且在訓練期間過後未發現任何快訊,表示沒有任何活動可認定為針對與該安全性政策相關聯的任何後端服務,進行潛在惡意鎖定的行為。
如果潛在攻擊或異常流量持續一段較長的時間 (超過數小時),Adaptive Protection 就會開始將該行為視為基準行為,並不會繼續針對類似的流量模式發出快訊。潛在攻擊結束或您已使用適當的 Google Cloud Armor 規則封鎖攻擊,導致潛在攻擊消退,並且流量模式恢復到原始基準後,Adaptive Protection 就會針對日後的流量行為發出警報,因為系統會將這些行為視為偏離基準。
Adaptive Protection 會分析 Google Cloud Armor 安全性政策允許的流量。如果您將預設規則設為拒絕存取,並限制流量的許可清單,Adaptive Protection 只會偵測通過許可清單評估的流量惡意活動。
Cloud Logging 中的警告或記錄過多,導致 Adaptive Protection 無法正常運作
Adaptive Protection 快訊會提供可信度分數,指出 Adaptive Protection 模型如何判定偵測到的活動是否異常,以及是否可能為攻擊。您可以透過 Cloud Logging 篩選記錄檔的特定項目,只顯示 (或轉送至下游) 信心分數高於特定門檻的警示。
自適應防護提供的機制可將快訊視為誤報,詳情請參閱「監控、回饋和回報事件錯誤」一節。請注意,回報的誤判警報可能不會立即變更 Adaptive Protection 的警示項目。隨著時間過去,Adaptive Protection 模型會學習到這類流量模式是正常且可接受的,並停止針對這些模式發出警報。
如果安全性政策中的後端服務子集出現過多 Adaptive Protection 快訊,可能表示這些後端服務的正常流量有顯著波動,而 Adaptive Protection 會持續將這些波動視為異常行為。您可以建立不啟用 Adaptive Protection 的獨立安全性政策,並將這些後端服務與新安全性政策建立關聯。
認為 Adaptive Protection 回報的特定事件是誤報或不相關
自適應防護提供回報誤報警示的機制。請按照「監控、回報及回報事件錯誤」一節所述的程序操作。請注意,回報的誤判警報可能不會立即變更 Adaptive Protection 的警示內容。隨著時間過去,Adaptive Protection 模型會學習到這類流量模式是正常且可接受的,並停止針對這些模式發出警報。
如何得知 Edge 安全政策已生效?
您可以查看監控資訊主頁、監控指標或個別要求記錄,瞭解邊緣安全性政策採取的動作。
Monitoring 資訊主頁
您可以在「網路安全性政策」頁面中的「監控」下方,找到 Cloud Monitoring 功能。您可以使用頁面上安全性政策的分項資料,評估已設定邊緣安全性政策所允許和拒絕的要求數量。您也可以依後端服務檢視細目,藉此對特定後端服務進行偵錯。如要進一步瞭解 Cloud Monitoring 資訊主頁,請參閱「監控 Google Cloud Armor 安全性政策」。
監控指標
邊緣安全政策可提供用於評估允許和拒絕要求的原始指標。詳情請參閱「監控安全政策的指標」。
個別要求記錄
邊緣安全性政策決定會記錄至 enforcedEdgeSecurityPolicy
下的負載平衡要求記錄中。這與 enforcedSecurityPolicy
不同,後者會擷取後端安全性政策決定。
機器人管理
本節提供有關疑難排解機器人管理問題的資訊。
使用者未如預期豁免
您可能已設定安全性政策規則,並為 reCAPTCHA 評估服務指定重新導向動作,但發現部分您認為合法的使用者並未如預期獲得豁免。請按照下列步驟進行疑難排解。
首先,請檢查個別要求記錄,看看是否有優先順序較高的安全性政策規則與流量相符,且該規則的動作不同。請特別留意 configured_action
和 outcome
欄位。請注意,使用者必須提出至少兩項要求,才能獲得豁免。初始要求不含豁免 Cookie,如果使用者通過 reCAPTCHA 評估,後續要求就會附帶豁免 Cookie。因此,至少會有兩個記錄項目。
- 如果您看到
GOOGLE_RECAPTCHA
是設定的動作,而REDIRECT
是結果,表示要求已重新導向進行 reCAPTCHA 評估; - 如果您看到
GOOGLE_RECAPTCHA
是設定的動作,而ACCEPT
是結果,表示要求已豁免重新導向至 reCAPTCHA 評估。 - 如果您在上述欄位中看到不同的值,表示系統比對的是具有不同動作的規則。在這種情況下,使用者不會遭到重新導向或豁免。
第二,使用者必須符合幾項條件,才能免於重新導向至 reCAPTCHA 評估。
- 使用者必須使用瀏覽器。
- 瀏覽器必須啟用 JavaScript,才能正確載入嵌入 reCAPTCHA JavaScript 的重新導向頁面。
- 瀏覽器必須啟用 Cookie,才能設定並自動附加豁免 Cookie。
- 使用者必須通過 reCAPTCHA 評估,例如必須解決彈出式驗證問題 (如有)。
請注意,如果規則中包含 reCAPTCHA 評估的重新導向動作,但使用者無法滿足上述任何一項條件,就不會獲得豁免。
第三,只有在嵌入 reCAPTCHA JavaScript 的重新導向頁面呈現時,才會執行 reCAPTCHA 評估。因此,如果要求預期會收到導致整個網頁算繪的回應,重新導向 reCAPTCHA 評估作業的做法就不適用。其他要求 (例如在網頁中載入的素材資源,或是來自嵌入式指令碼的請求,且該指令碼不預期回應會顯示) 不應取得 reCAPTCHA 評估結果。因此,建議您針對符合此條件的網址路徑,搭配相符條件套用這項動作。
舉例來說,假設您的網頁包含嵌入的元素,例如圖片、其他網頁的連結和指令碼。您不想針對代管圖片的網址路徑,或在不需要全頁面轉譯的情況下,由指令碼存取的網址路徑,套用 reCAPTCHA 評估的重新導向動作。您可以改為針對代管網頁的網址路徑 (例如主要網頁或其他連結網頁),套用重新導向動作的 reCAPTCHA 評估。
最後,如果重新導向頁面已順利轉譯,請在瀏覽器提供的開發人員工具中檢查是否已設定豁免 cookie,以及是否已附加至同一網站的後續要求。如需進一步協助,請與 Cloud 支援團隊聯絡。
頻率限制相關問題
流量未如預期受到節流
您可能會發現,某個用戶端 IP 位址以超過您設定的頻率,向應用程式傳送大量流量,但流量並未如預期受到限流。請按照下列步驟調查問題。
首先,請確認優先順序較高的規則是否允許來自該 IP 位址的流量。檢查記錄,瞭解是否已針對 IP 位址觸發 ALLOW
規則。這可能是單獨的 ALLOW
規則,或是其他 THROTTLE
或 RATE_BASED_BAN
規則。
如果找到優先順序較高的規則,請執行下列任一操作:
- 變更優先順序,為計量限制規則指派較低的數字值,確保該規則的優先順序較高。
- 從優先順序較高的規則中,排除相符運算式中的 IP 位址。
問題也可能是閾值設定不正確。如果是這種情況,系統會正確比對要求,但會觸發相符動作。請檢查記錄檔,確認是否屬實,然後降低規則中的閾值。
最後,IP 位址可能不符合節流或以速率為準的封鎖規則。如要修正這個問題,請檢查比對條件是否有錯誤,然後將規則的比對條件變更為正確的值。