AWS WAF 中计数规则操作的指标和日志是如何格式化的?
我已设置 AWS WAF,并且 Web ACL 中的部分规则正在执行 Count(计数)操作。如何分析计数规则操作中规则的 Amazon CloudWatch 指标和日志?
简短描述
您可以使用计数规则操作来测试规则,然后通过其常规操作设置来执行规则。AWS WAF 根据计数规则操作中的规则评估请求,并报告其在指标、请求示例和日志中找到的匹配项。
您还可以使用计数规则操作对生成误报的规则进行问题排查。当规则或规则组阻止您不希望其阻止的流量时,会出现误报。如果您确定了阻止要允许通过的请求的规则,则可以更新该规则的操作以进行计数。从而将该规则排除在对请求执行操作之外。有关检测和减少误报的更多信息,请参阅如何检测 AWS 托管规则导致的误报并将其添加到安全列表中?
解决方法
要了解如何为计数规则操作格式化指标和日志,请考虑以下三种场景:
- 将自定义规则的规则操作设置为计数模式。
- 将单个规则的规则操作设置为 AWS 托管规则规则组内的计数模式。
- 覆盖整个规则组的操作以计数。
将自定义规则的规则操作设置为计数模式
示例
您的 Web ACL(Test1-ACL)具有包含计数规则操作的单个自定义规则(Geo-Count)。如果请求来自美国,则 Geo-Count 规则会计算请求。如果客户端 IP 属于其他国家/地区,则会匹配包含 Allow(允许)操作的 Web ACL 默认操作。
以下是此规则的 JSON 表示:
{ "Name": "Geo-Count", "Priority": 0, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "Action": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Geo-Count" } }
如果请求来自位于美国的客户端 IP,会出现以下情况:
- 将该请求计入在内。
- 自定义规则 Geo-Count 的 CloudWatch 指标在 CountedRequests 指标中显示一个数据点。
**注意:**CloudWatch 仅在存在非零值时报告 CountedRequests 指标。要查看数据,请在 CloudWatch 控制台的 Graphed metrics(已绘制指标)选项卡上将统计数据切换为 Sum(总计)。 - 由于 Geo-Count 是包含 Count(计数)操作的自定义规则,AWS WAF 会对请求进行计数。
- 然后,AWS WAF 根据 Web ACL 默认操作评估请求。由于 Web ACL 默认操作设置为 Allow(允许),因此允许该请求。
- Web ACL 的 AllowedRequests 指标中会显示该操作的数据点。
有关 AWS WAF 命名空间下包含的指标和维度的更多信息,请参阅 AWS WAF 指标和维度。
将自定义规则的操作更新为 Count(计数)时,从日志记录的角度来看,该规则视为非终止规则。因此,如果请求与计数模式下的自定义规则匹配,则会记录以下字段:
- **nonTerminatingMatchingRules:**与请求匹配的非终止规则列表。
- **ruleId:**与请求匹配且为未终止规则的 ID。
- **action:**始终为 COUNT(计数)。
- **ruleMatchDetails:**与请求匹配的规则的详细信息。此字段仅针对与规则语句匹配的 SQL 注入(SQLi)和跨站脚本攻击(XSS)进行填充。
如果 Geo-Count 规则与请求匹配,则日志会显示 nonTerminatingMatchingRules 详细信息,如以下示例所示:
"nonTerminatingMatchingRules": [{ "ruleId": "Geo-Count", "action": "COUNT", "ruleMatchDetails": [ ] }]
有关所有可能的日志字段的更多信息,请参阅日志字段。
要开启 Web ACL 的日志记录,请参阅管理 Web ACL 的日志记录。
将单个规则的规则操作设置为 AWS 托管规则规则组内的计数模式
您可以覆盖规则组内的规则操作,将其设置为对部分或全部规则计数。对于在规则组内配置为非计数的规则操作,覆盖会更改操作,以便仅计算匹配的请求。
如果 Web 请求与规则匹配,则 AWS WAF 会将匹配作为计数处理,然后继续评估规则组内的后续规则。
有关如何将规则操作设置为计入规则组的详细信息,请参阅设置规则操作以计入规则组。
示例
您的 Web ACL(Test2-ACL)包含 AWS 托管规则规则组(AWSManagedRulesKnownBadInputsRuleSet)。此 Web ACL 中并无其他规则,并且 Web ACL 默认操作配置为 Allow(允许)操作。
将 AWSManagedRulesKnownBadInputsRuleSet 规则组内的 Log4JRCE 规则更新为 Count(计数)操作。现在,如果客户端请求中的某个组件(例如 URI、查询字符串等)存在 Log4j 漏洞,则该请求会被 Log4JRCE 规则计入在内。如果请求与规则组内的其他任何规则都不匹配,则 Web ACL 默认操作会允许该请求。
以下是此规则的 JSON 表示:
{ "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesKnownBadInputsRuleSet", "ExcludedRules": [ { "Name": "Log4JRCE" } ] } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet" } }
如果您将规则操作设置为计入规则组内的规则,则这些规则会视为规则组内的被排除规则。如果您启用了指标,则会收到每个被排除规则的 COUNT(计数)指标。
如果请求与 Log4JRCE 规则匹配,会出现以下情况:
- 将该请求计入在内。
- Log4JRCE 规则的 CloudWatch 指标在 CountedRequests 指标中显示一个数据点。
如果 AWSManagedRulesKnownBadInputsRuleSet 中没有其他规则与请求匹配,会出现以下情况:
- Web ACL 默认操作允许该请求。
- 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" } ] } ]
如果规则组内的单个规则更新为计数规则操作,会出现以下情况:
- 在 nonTerminatingMatchingRules 字段下,与此规则匹配的请求的日志不包含该规则的 Count(计数)操作。
- AWS WAF 日志在 excludedRules 字段下显示此规则。
覆盖整个规则组的操作以计数
有关如何覆盖规则组的操作以计数的信息,请参阅覆盖生成的规则组操作以计数。
有关如何覆盖规则组的操作以计数的信息,请参阅覆盖规则组的操作以计数。
示例
您的 Web ACL(Test3-ACL)包含 AWS 托管规则规则组(AWSManagedRulesKnownBadInputsRuleSet)。此 Web ACL 中并无其他规则,并且 Web ACL 默认操作为 Allow(允许)。AWSManagedRulesKnownBadInputsRuleSet 规则组内的所有规则都使用规则中定义的默认操作。这意味着此规则组内的规则未设置为 Count(计数)。但是,Override rule group action to count(覆盖规则组操作以计数)选项已启用。
以下是此规则的 JSON 表示:
{ "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesKnownBadInputsRuleSet" } }, "OverrideAction": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet" } }
如果客户端请求中的某个组件(如 URI、查询字符串等)存在 Log4j 漏洞,会出现以下情况:
- 该请求被 Log4JRCE 规则阻止。
- 由于 Block(阻止)为终止操作,因此 AWS WAF 会停止评估规则组,并将终止操作结果返回到 Web ACL。
- 此时,Override rule group action to count(覆盖规则组操作以计数)生效。规则组的终止操作被覆盖为计数。
- 然后,AWS WAF 会继续处理 Web ACL 中的其余规则。
如果请求与 AWSManagedRulesKnownBadInputsRuleSet 规则组内的 Log4JRCE 规则(或任何其他规则)匹配,会出现以下情况:
- CloudWatch 在 CountedRequests 指标中显示与规则组名称 AWSManagedRulesKnownBadInputsRuleSet 对应的数据点。
- 进行覆盖后,AWS WAF 会继续处理 Web ACL 中的其余规则。因此,该请求最终与 Web ACL 默认操作相匹配。这会显示为 Web ACL 的 AllowedRequests 指标中的一个数据点。
- 在 AWS WAF 日志中,匹配请求在 nonTerminatingMatchingRules 字段中包含计数操作。
- 此外,ruleGroupList 会显示在终止操作被覆盖以计数之前,最初阻止请求的规则组内的规则。
- 如果 Log4JRCE 规则与请求匹配,则日志将显示 ruleGroupList 和 nonTerminatingMatchingRules 的详细信息,如以下示例所示:
"ruleGroupList": [{ "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet", "terminatingRule": { "ruleId": "Log4JRCE", "action": "BLOCK", "ruleMatchDetails": null }, "nonTerminatingMatchingRules": [ ], "excludedRules": null } ], "rateBasedRuleList": [ ], "nonTerminatingMatchingRules": [{ "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet", "action": "COUNT", "ruleMatchDetails": [ ] }]
相关信息
相关内容
- AWS 官方已更新 4 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 6 个月前