You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloud Armor同一后端WAF规则与速率限制规则共存配置问题咨询

问题描述

我为某后端服务配置了包含多条预配置WAF规则和一条速率限制规则的Cloud Armor策略,但遇到了优先级冲突问题:

  • 若将预配置WAF规则设为更高优先级,即便遭遇大量合法请求的洪水攻击,速率限制规则也不会被触发;
  • 若将速率限制规则设为更高优先级,虽能拦截洪水攻击,但低优先级的预配置WAF规则无法生效。

我使用siege和GoTestWaf进行了测试,结果如下:

  • 当速率限制规则优先级更高时,siege请求达到阈值后会被拦截,但GoTestWaf报错提示:WAF was not detected. Please use the '--blockStatusCodes' or '--blockRegex' flags. Use '--help' for additional info. Baseline attack status code: 200
  • 当预配置WAF规则优先级更高时,siege请求始终不会被拦截,但GoTestWaf可正常检测到防火墙,完成测试并按预期拦截恶意请求。

预配置WAF规则为Cloud Armor的CRS 3.3规则,速率限制规则通过以下gcloud命令创建:

gcloud compute security-policies rules create 10000 \
--project=<GCP project> \
--security-policy=<Policy name> \
--expression="true" \
--action=rate-based-ban \
--rate-limit-threshold-count=120 \
--rate-limit-threshold-interval-sec=60 \
--ban-duration-sec=300 \
--conform-action=allow \
--exceed-action=deny-404 \
--enforce-on-key=IP

请问该现象的原因是什么?是否有其他方法可让两类规则作用于同一后端服务?


原因分析
  1. Cloud Armor规则执行逻辑的核心限制:Cloud Armor规则按优先级从高到低匹配,一旦某条规则触发了终止性动作(如allow、deny系列),后续低优先级规则会直接跳过,不再评估。

    • 预配置WAF规则优先级更高时:合法请求会被WAF规则直接allow,速率限制规则根本没机会处理这些请求,自然无法触发限流。
    • 速率限制规则优先级更高时:其conform-action=allow会直接放行所有未超阈值的请求,低优先级的WAF规则得不到执行,GoTestWaf发送的恶意请求被直接放行,因此检测不到WAF存在。
  2. 速率限制规则的表达式过于宽泛:你用expression="true"意味着所有请求都会先经过这条规则,只要速率合规就直接放行,完全绕过了后续的WAF检测。


解决方案

要让两类规则同时生效,核心是打破“单规则终止后续评估”的逻辑,让合法请求既经过WAF检测,又接受速率限制,以下是可行方案:

方案1:修改速率限制规则的触发条件

调整速率限制规则的表达式,让它只对通过WAF检测的合法请求生效,同时把WAF规则优先级设为更高:

gcloud compute security-policies rules create 10000 \
--project=<GCP project> \
--security-policy=<Policy name> \
--expression="evaluatePreconfiguredExpr('crs-v33-strict')" \
--action=rate-based-ban \
--rate-limit-threshold-count=120 \
--rate-limit-threshold-interval-sec=60 \
--ban-duration-sec=300 \
--conform-action=allow \
--exceed-action=deny-404 \
--enforce-on-key=IP

这样:

  • 恶意请求会被高优先级的WAF规则直接拦截;
  • 合法请求通过WAF检测后,才会进入速率限制规则接受流量控制。

方案2:使用continue动作实现规则串联(推荐)

Cloud Armor支持continue动作,允许规则执行后继续评估后续低优先级规则,配置方式:

  1. 预配置WAF规则:将规则的动作设置为continue(仅对恶意请求执行deny等终止动作,合法请求走continue);
  2. 速率限制规则:保持现有配置,将优先级设为低于WAF规则。
    这种方式下,合法请求会依次经过WAF检测和速率限制,恶意请求则在WAF阶段被拦截,两类规则互不干扰。

方案3:分层配置安全策略

创建两个独立的Cloud Armor策略,分别绑定到不同的防护节点:

  1. 第一个策略仅包含预配置WAF规则,绑定到负载均衡器的前端,负责恶意请求拦截;
  2. 第二个策略仅包含速率限制规则,绑定到后端服务的入口,负责流量限流。
    通过分层防护,让两类规则在请求的不同阶段生效,从根源上避免优先级冲突。

验证建议
  • 用siege发送超阈值的合法请求,确认速率限制规则正常触发拦截;
  • 用GoTestWaf发送恶意请求,确认WAF规则正常拦截,工具不再报“未检测到WAF”的错误。

内容的提问来源于stack exchange,提问作者Gonzalo Aspee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:22:45