如何分析 Count 模式下 AWS WAF 規則的 CloudWatch 指標和日誌?
我的 AWS WAF Web 存取控制清單 (Web ACL) 中的某些規則使用了 Count 動作。我想針對這些規則分析 Amazon CloudWatch 指標和日誌。
簡短說明
在實作 AWS WAF 規則的最終動作設定前,請使用 Count 規則動作來測試規則。AWS WAF 會針對設定為 Count 的規則評估請求。然後,AWS WAF 會在指標、請求範例與日誌中回報相符項目。
您也可以使用 Count 來對產生誤判的規則進行疑難排解。當規則或規則群組封鎖了您不希望封鎖的流量,便會產生誤判。如需更多資訊,請參閱如何偵測由 AWS 受管規則導致的誤判?
解決方法
若要瞭解 CloudWatch 如何針對 Count 規則動作格式化指標與日誌,請參閱下列情境範例:
分析設定為 Count 之自訂規則的日誌
在下列範例中,Web ACL 包含單一設定為 Count 的自訂規則: Geo-Count。若請求來自美國,Geo-Count 會計算該請求。Web ACL 的預設動作為 Allow。
Geo-Count 規則範例:
{ "Name": "Geo-Count", "Priority": 0, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "Action": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Geo-Count" } }
若用戶端 IP 位址部位於美國,Web ACL 會使用其預設動作並允許請求。
若用戶端 IP 位址位於美國,則會發生下列動作:
- AWS WAF 會計算請求。
- Geo-Count 的 CloudWatch 指標會在 CountedRequests 指標中顯示一個資料點。
注意: 只有在數值不為零時,CloudWatch 才會回報 CountedRequests 指標。若要在 CloudWatch 主控台中檢視資料,請前往圖形化指標,然後將統計數字更新為 Sum (總和)。 - AWS WAF 會使用 Web ACL 預設動作並允許請求。
- CloudWatch 會在此 Web ACL 的 AllowedRequests 指標中記錄一個資料點。
如需更多資訊,請參閱 AWS WAF metrics and dimensions (AWS WAF 指標與維度)。
設為 Count 的自訂規則在日誌中屬於非終止規則。若請求符合設為 Count 的自訂規則,AWS WAF 會記錄下列詳細資訊:
- nonTerminatingMatchingRules 會列出符合請求的非終止規則。
- ruleId 會列出符合請求且為非終止規則的規則。
- action 欄位恆為 COUNT。
- ruleMatchDetails 欄位包含符合請求之規則的詳細資訊。AWS WAF 僅針對 SQL injection 隱碼攻擊 (SQLi) 和跨網站指令碼 (XSS) 比對規則陳述式填入此欄位。
Geo-Count 比對的 nonTerminatingMatchingRules 詳細資訊範例:
"nonTerminatingMatchingRules": [{ "ruleId": "Geo-Count", "action": "COUNT", "ruleMatchDetails": [ ] }]
如需所有日誌欄位的更多資訊,請參閱 Log fields for protection pack (web ACL) traffic (防護套件 (Web ACL) 流量的日誌欄位)。
分析 AWS Managed Rules 規則群組中設為 Count 之個別規則的日誌
若要覆寫規則群組內規則的動作,請將規則群組中的一個或多個規則設定為 Count。此覆寫會變更動作,使 AWS WAF 僅計算符合的請求。覆寫不包含您在規則群組中設定為 Count 以外的規則動作。
若 Web 請求符合該規則,AWS WAF 會先將該比對處理為 Count。接著,AWS WAF 會評估規則群組中的後續規則。
在下列範例中,Web ACL 使用了 AWSManagedRulesKnownBadInputsRuleSet。Web ACL 中沒有其他規則,預設動作為 Allow。
AWSManagedRulesKnownBadInputsRuleSet 規則範例:
{ "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesKnownBadInputsRuleSet", "ExcludedRules": [ { "Name": "Log4JRCE" } ] } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet" } }
若您將 Log4JRCE 規則設為 Count,AWS WAF 會計算包含 Log4j 漏洞的請求數。若請求未符合規則群組中的任何其他規則,則 Web ACL 的預設動作會允許該請求。
若您將規則群組內規則的規則動作設為 Count,這些規則會作為排除的規則記錄在規則群組中。您會收到每個排除規則的 Count 指標。
若請求符合 Log4JRCE 規則,則會發生下列動作:
- AWS WAF 會計算請求。
- Log4JRCE 規則的 CloudWatch 指標會在 CountedRequests 指標中顯示一個資料點。
若 AWSManagedRulesKnownBadInputsRuleSet 內沒有其他規則符合該請求,則會發生下列動作:
- Web ACL 預設動作會允許請求。
- CloudWatch 會在此 Web ACL 的 AllowedRequests 指標中記錄一個資料點。
針對排除的規則,AWS WAF 日誌會擷取下列詳細資訊:
- excludedRules 欄位會列出已排除之規則群組中的規則。這些規則的動作會設為 Count。
- exclusionType 顯示有 Count 動作的已排除規則。
- ruleId 會列出已排除規則的 ID。
符合 Log4JRCE 規則之請求的 excludedRules 詳細資訊範例:
"ruleGroupList": [ { "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet", "terminatingRule": null, "nonTerminatingMatchingRules": [ ], "excludedRules": [ { "exclusionType": "EXCLUDED_AS_COUNT", "ruleId": "Log4JRCE" } ] } ]
若將規則群組內的個別規則更新為 Count,則會發生下列動作:
- 與此規則比對相符的請求日誌中,在 nonTerminatingMatchingRules 欄位下不會包含該規則的 Count 動作。
- AWS WAF 日誌會在 excludedRules 欄位下顯示此規則。
分析整個規則群組動作為 Count 時的日誌
若您將規則群組的動作覆寫為 Count,即是將整個規則群組設為 Count。
在下列範例中,Web ACL 使用了 AWSManagedRulesKnownBadInputsRuleSet。Web ACL 不包含其他規則。Web ACL 的預設動作為 Allow。AWSManagedRulesKnownBadInputsRuleSet 中的所有規則均使用預設動作,且未設為 Count。您已開啟覆寫規則群組動作為 Count。
覆寫為 Count 的 AWSManagedRulesKnownBadInputsRuleSet 規則範例:
{ "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesKnownBadInputsRuleSet" } }, "OverrideAction": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet" } }
若請求符合 AWSManagedRulesKnownBadInputsRuleSet 規則群組內的規則,則會發生下列動作:
- CloudWatch 會在該規則群組名稱的 CountedRequests 指標中顯示一個資料點。
- 在 Count 覆寫生效後,AWS WAF 會繼續處理 Web ACL 中的其餘規則。CloudWatch 會針對 Web ACL 預設動作比對該請求,並在該 Web ACL 的 AllowedRequests 指標中顯示一個資料點。
- 在 AWS WAF 日誌中,比對成功的請求會在 nonTerminatingMatchingRules 欄位中包含 Count 動作。
- ruleGroupList 會顯示規則群組內原本在終止動作被覆寫前封鎖該請求的規則。
若請求中的組件 (例如 URI 或查詢字串) 包含 Log4j 漏洞,則會發生下列動作:
- Log4JRCE 規則會封鎖請求。
- 由於 Block 屬於終止動作,AWS WAF 會停止評估該規則群組,並將終止動作結果傳回給 Web ACL。
- 覆寫規則群組動作為 Count 生效。AWS WAF 會將規則群組的終止動作覆寫為 Count。
- AWS WAF 會繼續處理 Web ACL 中的其餘規則。
- 日誌中的 ruleGroupList 與 nonTerminatingMatchingRules 詳細資訊會以下列格式顯示:
"ruleGroupList": [{ "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet", "terminatingRule": { "ruleId": "Log4JRCE", "action": "BLOCK", "ruleMatchDetails": null }, "nonTerminatingMatchingRules": [ ], "excludedRules": null }], "rateBasedRuleList": [ ], "nonTerminatingMatchingRules": [{ "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "action": "COUNT", "ruleMatchDetails": [ ] }]
查詢 CloudWatch Logs Insights 以分析 Count 規則比對項目
在將規則部署於 Count 模式後,請使用 Amazon CloudWatch Logs Insights 查詢您的 AWS WAF 日誌,以便在切換至 Block 前識別潛在的誤判。
注意: 若要使用這些查詢,您必須先開啟 Web ACL 的記錄功能,並將日誌傳送至 CloudWatch 日誌群組。
若要尋找在 nonTerminatingMatchingRules 中觸發特定規則的請求,請執行下列查詢。
fields @timestamp | filter @message like /"ruleId":"YOUR-RULE-SET-NAME","action":"COUNT"/ | sort @timestamp desc | display @timestamp, terminatingRuleId, httpRequest.clientIp, httpRequest.country, @message | limit 100
注意: 請將 YOUR-RULE-SET-NAME 替換為您的規則集名稱。
若要尋找觸發 nonTerminatingMatchingRules 的所有請求,請執行下列查詢:
fields @timestamp, @message | parse @message ',"nonTerminatingMatchingRules":[{"ruleId":"*","action":"*"' as rule, action | filter action = "COUNT" | display @timestamp, rule, action | sort @timestamp desc
若要尋找觸發多個非終止規則以及標籤的所有請求,請執行下列查詢:
fields @timestamp | filter @message like '"labels":[' | parse @message '"labels":[*]' as Labels | parse @message '"nonTerminatingMatchingRules":[*]' as nonTermRules | filter nonTermRules like /COUNT/ | display @timestamp, nonTermRules, Labels | sort @timestamp desc | limit 100
檢視查詢結果,以識別符合您 Count 規則之請求中的模式。若符合的請求代表合法流量,則該規則產生了誤判。在將動作切換至 Block 前,請調整該規則的條件。
相關資訊
How AWS WAF handles rule and rule group actions in a web ACL (AWS WAF 如何處理 Web ACL 中的規則與規則群組動作)
CloudWatch Logs Insights query language (Logs Insights QL) (CloudWatch Logs Insights 查詢語言 (Logs Insights QL))
This article was reviewed and updated on 2026-03-04.
This article was reviewed and updated on 2026-03-26.
相關內容
AWS 官方已更新 7 個月前