我想使用 Google Cloud Armor 应用基于速率的限制。在规则配置中,有一个
match
参数,但它用于匹配 IP 范围。我找不到一种方法来过滤,然后对特定 URL 端点应用基于速率的限制。
enforceOnKey
来实现 HTTP_PATH
,但它只需要请求的前 128 个字节。
我想知道是否有一些示例可以用来对特定 URL 应用基于速率的限制。例如
/login
1k QPS,/insert
10k QPS。
从日志中,我认为
httpRequest.requestUrl
参数可用于强制执行此规则。
我不确定我是否完全理解您想要设置的工作流程。
您可以起草如下复合 CEL 规则:
request.path.lower().matches('/login') && inIpRange(origin.ip, '9.9.9.0/24')
在其中检查路径和 IP 范围,然后将操作设置为速率限制。
gcloud compute security-policies rules create 299 --project=[projectName] --action=throttle --security-policy=test --expression=request.path.lower\(\).matches\(\'/login\'\)\ \&\&\ inIpRange\(origin.ip,\ \'9.9.9.0/24\'\) --preview
你不能使用像 inIpRange(origin.ip, '*') && request.path.lower().matches('/login|/insert') 这样的规则,因为值需要在两个中都等于 TRUE CEL 语句的一半,并且通配符语句中没有字符串匹配来判断它是否为真。
我可能想太多了你想要做什么 - 也许你可以将路径精确匹配为 CEL 规则,然后设置速率限制(没有 IP 范围)。您将设置 2 条不同的规则,每一条规则对应一条路径 + 速率限制。如果您有 2 个单独的规则,则计数将单独维护。