如何在 Google Cloud Armor 中对特定 URL 应用基于速率的限制?

问题描述 投票:0回答:1

我想使用 Google Cloud Armor 应用基于速率的限制。在规则配置中,有一个

match
参数,但它用于匹配 IP 范围。我找不到一种方法来过滤,然后对特定 URL 端点应用基于速率的限制。

通过 Pulumi 文档,我发现我们可以利用

enforceOnKey
来实现
HTTP_PATH
,但它只需要请求的前 128 个字节。

我想知道是否有一些示例可以用来对特定 URL 应用基于速率的限制。例如

/login
1k QPS,
/insert
10k QPS。

从日志中,我认为

httpRequest.requestUrl
参数可用于强制执行此规则。

google-cloud-platform throttling rate-limiting pulumi google-cloud-armor
1个回答
0
投票

我不确定我是否完全理解您想要设置的工作流程。

您可以起草如下复合 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 个单独的规则,则计数将单独维护。

© www.soinside.com 2019 - 2024. All rights reserved.