根据 IP 地址进行过滤的 Google Cloud Armor 安全政策规则通常使用调用者的客户端 IP。如果您的服务位于中介(例如第三方内容分发网络 [CDN])后面,则 origin.ip 字段中的客户端 IP 是最后一个中介的 IP 地址,而不是原始客户端的 IP 地址。
借助用户 IP 功能,您可以配置备用字段 origin.user_ip,以从上游提供商填充的标头中解析。然后,您可以使用安全政策规则中的 origin.user_ip 字段来指定这些功能中使用的 IP 地址。使用 origin.user_ip 时,您可以在安全政策的 advancedOptionsConfig 字段中配置 userIpRequestHeaders[] 选项。
用户 IP 地址的工作原理
您可以配置 Cloud Armor 以从特定请求标头中提取最终用户的 IP 地址。此值会填充 origin.user_ip 字段,然后您可以在安全政策规则中使用该字段。
如果 userIpRequestHeaders[] 中指定的标头不存在,或者其值不是有效的 IP 地址,则 Cloud Armor 会回退到客户端 IP 地址 (origin.ip)。以下示例显示了默认情况下的直接比较。
origin.ip != origin.user_ip
以下示例展示了如何在规则语言中、与 Google Threat Intelligence 一起,以及在地址组中使用 origin.user_ip。
inIpRange
inIpRange(origin.user_ip, '9.9.9.0/24')
如需详细了解如何将 inIpRange 与 origin.user_ip 搭配使用,请参阅属性。
Google Threat Intelligence
evaluateThreatIntelligence('iplist-known-malicious-ips', origin.user_ip)
如需了解详情,请参阅应用 Google Threat Intelligence。
地址组
evaluateAddressGroup('example-address-group', origin.user_ip)
如需了解详情,请参阅配置地址组。
组织级地址组
evaluateOrganizationAddressGroup('example-org-address-group', origin.user_ip)
如需了解详情,请参阅使用组织级地址组。
最佳做法
由于 origin.user_ip 是从请求标头解析的,而不可信的客户端可以操纵请求标头,因此您必须验证流量来自可信的上游来源。
如需验证上游来源,请创建至少包含两条规则的安全政策。第一条规则的优先级较高,它检查直接客户端 IP (origin.ip) 是否属于您的可信上游提供商。第二条规则的优先级较低,它使用 origin.user_ip 字段应用您的预期逻辑。
例如,您可以创建包含以下两条规则的政策:
- 规则 1:
evaluateThreatIntelligence('iplist-public-clouds', origin.ip) - 规则 2:
inIpRange(origin.user_ip, '9.9.9.0/24')