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

Cloud Armor高级规则:能否在同一条件下匹配多个IP网段?

在Cloud Armor高级规则中匹配多个IP网段的解决方案

你不能直接用contains来匹配多个IP网段,原因很简单:origin.ip是客户端的单个IP地址,而你写的CIDR段是字符串格式,contains做的是字符串包含判断,不是网络地址归属判断——比如客户端IP34.90.1.1不会被'34.90.0.0/15,...'.contains(origin.ip)匹配到,因为前者不是后者字符串的子串。而国家代码的场景能生效,是因为origin.region_code是单个枚举值(比如AT),正好是逗号分隔列表里的元素,字符串包含逻辑能成立。

针对你的需求(在复杂多逻辑规则中实现IP网段排除),有两种可行方案:

方案1:用逻辑或组合多个inIpRange调用

直接为每个IP网段单独调用inIpRange,再用||(逻辑或)连接,最后用not包裹实现排除逻辑,再结合你的主机、路径匹配条件:

not (
  inIpRange(origin.ip, '34.90.0.0/15') ||
  inIpRange(origin.ip, '34.141.128.0/17') ||
  inIpRange(origin.ip, '66.249.64.0/19')
) && host.matches('your-host.com') && path.matches('/your-path/*')

这种方式适合IP网段数量较少的场景,逻辑清晰直观,注意用括号明确优先级,避免逻辑顺序出错。

方案2:使用Cloud Armor IP集合(IP Set)

如果需要管理的IP网段数量较多,推荐用IP集合来批量管理:

  1. 在Cloud Armor控制台创建一个IP集合,将所有需要排除的CIDR段添加进去
  2. 在规则表达式中用inIpSet函数引用这个集合,结合排除逻辑:
not inIpSet(origin.ip, 'projects/your-project-id/global/ipSets/your-excluded-ip-set') && host.matches('your-host.com') && path.matches('/your-path/*')

这种方式的优势是后续修改IP网段不需要调整规则,只需要更新IP集合即可,维护成本更低,也更适合复杂规则场景。

内容的提问来源于stack exchange,提问作者mati kepa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:15:26