AWS WAF(Web应用程序防火墙)标签提供了一种灵活的方式,根据网络ACL(Web访问控制列表)中的规则结果来标记和管理网络请求。此功能可用于日志记录、监控,并根据先前规则的结果实施复杂的规则逻辑。
标签是规则与请求匹配时规则添加到 Web 请求中的元数据。AWS WAF标签有以下几个关键特性:
- 标签是当请求与网络ACL中的特定规则匹配时分配的简单字符串值。
- 标签是在规则组中的每个单独规则级别生成的, 不管是AWS托管规则组(AMRs)还是自定义规则都可以产生标签。
- AWS WAF按优先级顺序处理规则,从最低到最高编号。在同一网络ACL中,较低优先级规则创建的标签可用于较高优先级规则。
在AWS WAF中最有效利用标签的方式是在较低优先级规则中创建具有非终止操作(如"计数"或"Challenge")的标签,然后使用较高优先级规则匹配这些标签并采取所需操作(如"阻止")。
用法1:根据城市级别的地理位置阻止请求
使用地理匹配语句时,它只会列出国家,不能精确到城市。如果要在城市级别阻止请求,例如阻止来自纽约市和新泽西州的请求,但允许美国其他地区的请求,您可以按以下步骤操作:
- 创建一个检查来自美国的请求的规则,并将操作设置为"计数"作为非终止操作。
- 创建另一个规则,检查带有"US-NJ"或"US-NY"区域代码的请求,使用OR语句。
- 在第二条规则中,如果请求匹配标签
awswaf:clientip:geo:region:US-NJ
或awswaf:clientip:geo:region:US-NY
之一,则设置操作为"阻止"。
- 确保使用地理匹配语句的规则具有较低的优先级编号(更高的优先级)。
用法2:在AWS WAF速率限制规则中使用自定义标签
速率限制规则根据请求IP地址聚合和限制请求速率。但是,您可以使用"客户聚合键"根据自定义标签来聚合和限制请求速率。
- 创建一个检查基于您所需匹配语句的请求的标记规则,并将操作设置为"计数"及附加自定义标签(例如my:customer:label1)。
- 在AWS WAF日志中,找到格式为
awswaf:<account ID>:webacl:<your webACL name>:<custom namespace>:<label name>
的标签,拷贝这个标签。
- 创建一个速率限制规则,将请求聚合选择为"自定义键", 然后在标签命名空间字段中粘贴WAF日志中的标签(删除冒号之后的标签名称部分)。正确格式为:
awswaf:<your account>:webacl:<webACL name>:<namespace>:
。注意以冒号结尾。
- 确保速率限制规则的优先级编号高于(优先级低于)标记规则。
用法3: 缓解AWS托管规则的误报
有两种方法可以缓解由AWS托管规则引起的误报:
使用标签是一种更细致的方法,可以修改AWS托管规则组内特定规则语句的行为。
- 将规则覆盖为"计数"非终止操作
- 添加具有以下逻辑的自定义规则
IF Has a label from the overridden rule
AND
Not Match <合法请求条件>
THEN Block
通过以上这些用法举例中,有效地利用AWS WAF标签,您可以细化网络ACL,达到更好的安全性,同时减少误报并确保合法流量流动。
参考文档:
https://repost.aws/knowledge-center/waf-detect-false-positives-from-amrs
https://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/waf-labels.html