安全政策概览

Google Cloud Armor 安全政策通过提供第 7 层过滤并清除常见 Web 攻击或其他第 7 层特性的传入请求来防止流量到达负载平衡后端服务或后端,从而保护您的应用存储分区。每项安全政策都由一组规则组成,这些规则根据传入请求的 IP 地址、IP 范围、区域代码或请求标头等条件过滤流量。

Google Cloud Armor 安全政策仅适用于在外部 HTTP(S) 负载平衡器后运行的后端服务。负载平衡器可以在优质层级或标准层级中。

后端服务的后端可以是以下任何一种:

当您使用 Google Cloud Armor 保护混合部署或多云端架构时,后端必须是互联网 NEG。当流量通过负载均衡器路由时,Google Cloud Armor 还可保护无服务器 NEG。为确保只有通过负载均衡器路由的流量到达您的无服务器 NEG,请参阅 Ingress 控制

使用 Google Cloud Armor 安全政策保护您的 Google Cloud 部署

HTTP(S) 负载平衡是在全球 Google 接入点 (PoP) 的 Google 网络边缘处实施的。在优质层级中,定向到外部 HTTP(S) 负载平衡器的用户流量会进入距离用户最近的 PoP,然后通过 Google 全球网络负载均衡到具有足够可用容量的最近后端。在标准层级中,用户流量通过您部署了 Google Cloud 资源的地区中的对等网络、ISP 或传输网络进入 Google 网络。

利用 Google Cloud Armor 安全政策,您可以允许、拒绝或重定向对 Google Cloud 边缘尽可能靠近传入流量来源的外部 HTTP(S) 负载均衡器的请求。这样可以防止不受欢迎的流量占用资源或进入您的虚拟私有云 (VPC) 网络。

下图展示了外部 HTTP(S) 负载平衡器、Google 网络和 Google 数据中心的位置。

网络边缘的 Google Cloud Armor 政策。
网络边缘的 Google Cloud Armor 政策(点击可放大)

要求

以下是 Google Cloud Armor 安全政策的要求:

  • 负载平衡器必须是外部 HTTP(S) 负载平衡器。
  • 后端服务的负载平衡方案必须是 EXTERNAL
  • 后端服务的协议必须是 HTTPHTTPSHTTP/2 中的一个。

关于 Google Cloud Armor 安全政策

Google Cloud Armor 安全政策是一组规则,与第 3 层至第 7 层的特性相匹配,以保护面向外部的应用或服务。每条规则都针对传入流量进行评估。

Google Cloud Armor 安全政策规则包含一个匹配条件和一项满足该条件时要执行的操作。条件可以很简单,例如传入流量的源 IP 地址是否匹配特定 IP 地址或 CIDR 范围(也称为 IP 地址许可名单和拒绝名单规则)。或者,您也可以通过利用 Google Cloud Armor 自定义规则语言参考文档,创建与传入流量的各个属性(如网址路径、请求方法或请求标头值)匹配的自定义条件。

当传入请求与安全政策规则中的条件匹配时,Google Cloud Armor 会根据该规则是允许规则、拒绝规则还是重定向规则来允许、拒绝或重定向请求。也可以应用其他操作参数,如插入请求标头。此功能是 Google Cloud Armor 聊天机器人管理的一部分。如需详细了解聊天机器人管理,请参阅聊天机器人管理概览

您可以将 Google Cloud Armor 安全政策与一项或多项后端服务相关联。后端服务只能与一项安全政策关联,但您的后端服务无需与同一安全政策关联。

如果一项 Google Cloud Armor 安全政策与任何后端服务相关联,则无法将其删除。无论后端服务是否具有关联的安全政策,都可以将其删除。

如果多条转发规则指向具有关联安全政策的后端服务,则将针对进入这些转发规则 IP 地址中的每个 IP 地址的所有流量执行政策规则。

在下图中,Google Cloud Armor 安全政策 internal-users-policy 与后端服务 test-network 相关联。

网络边缘的 Google Cloud Armor 安全政策。
网络边缘的 Google Cloud Armor 安全政策(点击可放大)

Google Cloud Armor 安全政策具有以下核心功能:

  • 您可以选择对使用 Google Cloud Armor 的负载平衡器使用 QUIC 协议。

  • 您可以将 Google Cloud Armor 与以下任一网络服务层级中的外部 HTTP(S) 负载平衡器搭配使用:

    • 优质层级
    • 标准层级
  • 您可以将安全政策与 GKE 和默认入站流量控制器搭配使用。

安全政策的类型

下表显示了安全政策的类型以及您可以使用它们执行的操作。对勾标记 (✔) 表示安全政策的类型支持该功能。

后端安全政策 边缘安全政策(预览版)
连接点(受保护的资源) 后端服务
  • 后端服务
  • 后端存储分区
规则操作
  • 允许
  • 拒绝
  • 重定向(GOOGLE_RECAPTCHA 和 EXTERNAL_302);预览版
  • 允许
  • 拒绝
来源 IP 地址
来源地理位置
聊天机器人管理 ✔(预览版)
第 7 层过滤
WAF
自动调节式保护
已命名的 IP 地址列表

后端安全政策

后端安全政策用于保护外部 HTTP(S) 负载均衡器所公开的后端服务。它们可用于过滤请求并保护包含实例组或网络端点组 (NEG) 的后端服务,包括互联网、区域和无服务器 NEG。

边缘安全政策

借助边缘安全政策,用户可以为存储在缓存中的内容配置过滤和访问权限控制政策;这包括启用 Cloud CDN 的后端服务和 Cloud Storage 存储分区的端点。与后端安全政策相比,Edge 安全政策支持根据部分参数进行过滤。

您可以配置边缘安全政策,以便在从 Google 的缓存处理请求之前过滤请求。在 Google 网络的最外层(Cloud CDN 缓存所在的上游)部署和强制执行边缘安全政策。边缘安全政策可与后端安全政策共存,从而提供两层保护。无论后端服务指向何种资源(例如实例组或网络端点组),它们都可以同时应用于后端服务。您只能将后端安全政策应用于后端存储分区。

规则评估顺序

规则评估顺序取决于规则优先级,从最低数字到最高数字。分配了最低数值的规则具有最高逻辑优先级,并且在具有较低逻辑优先级的规则之前进行评估。最小数字优先级为 0。规则的优先级随其数字的增加而降低(1、2、3、N+1)。您不能配置两个或更多具有相同优先级的规则。每个规则的优先级均必须设置为 0 到 2147483646(含)之间的数字。优先级值 2147483647(也称为 INT-MAX)是默认规则的保留值。

优先级数字可能会有间隙,这使您将来可以添加或移除规则而不会影响其余规则。例如,1、2、3、4、5、9、12、16 是有效的优先级数字序列,您可以在将来添加编号为从 6 到 8、10 到 11 和 13 到 15 的规则。您不必对现有规则进行任何更改,但可以更改执行顺序。

通常,将应用与请求匹配的最高优先级规则。但是,根据使用 evaluatePreconfiguredExpr() 的预配置规则评估 HTTP POST 请求时例外。例外情况如下。

对于 HTTP POST 请求,Google Cloud Armor 会在正文(载荷)之前接收到请求标头。由于 Google Cloud Armor 先接收标头信息,因此它会评估与标头匹配的规则,但不会匹配正文上的任何预配置规则。如果存在多个基于标头的规则,Google Cloud Armor 将根据其优先级对它们进行评估。

Google Cloud Armor 收到 HTTP POST 正文后,将评估适用于请求标头和正文的规则。因此,可能会在允许请求正文的较高优先级规则之前匹配允许请求标头的较低优先级规则。在这种情况下,系统可能会将请求的 HTTP 标头部分发送到目标后端服务,而包含潜在的恶意内容的 POST 正文则可能会被阻止。

示例

在以下示例中,将针对 IPHTTP 标头字段按该顺序评估规则 1、2 和 3。但是,如果 IP 9.9.9.1HTTP POST 正文中启动 XSS 攻击,则只有正文被阻止(根据规则 2);HTTP 标头将直通到后端(根据规则 3)。

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: deny(403)
priority: 1
Rule2
expr: evaluatePreconfiguredExpr('xss-stable')
action: deny(403)
priority: 2
Rule3
expr: inIPRange(origin.ip, '9.9.9.0/24')
action: allow
priority: 3
Rule-default
action: deny(403)
priority: INT-MAX

在以下示例中,该政策允许 IP 9.9.9.1,而无需对 XSS 攻击进行扫描:

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: deny(403)
priority: 1
Rule2
expr: inIPRange(origin.ip, '9.9.9.0/24')
action: allow
priority: 2
Rule3
expr: evaluatePreconfiguredExpr('xss-stable')
action: deny(403)
priority: 3
Rule-default
action: allow
priority: INT-MAX

默认规则

每项 Google Cloud Armor 安全政策均包含一条默认规则;如果没有匹配更高优先级的规则,或者该政策中没有其他规则,则将匹配默认规则。系统会自动为默认规则分配优先级 2147483647 (INT-MAX),并且该规则始终存在于安全政策中。

您不能删除默认规则,但是可以对其进行修改。默认规则的默认操作为允许,但您可以将默认操作更改为拒绝。

指纹

每个 Google Cloud Armor 安全政策都有一个字段 fingerprint。指纹是存储在政策中的内容的哈希。创建新政策时,请勿提供此字段的值。提供的值会被忽略。但是,在您更新安全政策时,必须指定当前指纹,该指纹是在导出或描述政策时获得的(分别使用 EXPORTDESCRIBE)。

指纹可以防止您覆盖其他用户的更新。如果您提供的指纹已过期,这意味着自您上次检索指纹以来,已更新安全政策。如需检查是否存在任何差异并检索最新指纹,请运行 DESCRIBE 命令。

规则语言和执行引擎

规则语言和执行引擎提供以下内容:

  • 能够编写可与传入请求的各种第 3 层到第 7 层属性匹配的自定义规则表达式。Google Cloud Armor 提供灵活语言来编写自定义匹配条件。

  • 能够在单条规则中组合多个子表达式。

  • 能够根据传入请求的地区代码拒绝或允许请求。地区代码基于 ISO 3166-1 alpha 2 代码。地区代码有时会对应于特定的国家/地区,但有些代码包含国家/地区及其关联的地区。例如,US 代码包括美国各州、一个特区和六个美国本土外地区。

规则类型

IP 地址许可名单和拒绝名单规则

您可以在安全政策中创建 IP 地址许可名单和拒绝名单规则:下面是一些示例:

  • IP 地址/CIDR 的拒绝名单提供阻止源 IP 地址或 CIDR 范围访问外部 HTTP(S) 负载平衡器的功能。

  • IP 地址/CIDR 的许可名单提供允许源 IP 地址或 CIDR 范围访问外部 HTTP(S) 负载平衡器的功能。

  • 许可名单和拒绝名单规则支持 IPv4 和 IPv6 地址。

  • IP 地址规则可阻止或允许单个源 IP 地址或 CIDR。支持使用 IPv4 和 IPv6 源地址,但 IPv6 地址的子网掩码不得大于 /64。

  • 拒绝规则可能会返回 HTTP 403 (Unauthorized)、404 (Access Denied)、502 (Bad Gateway) 响应。

  • 超出操作规则可能会返回 HTTP 429(请求过多)。

XSS、SQLi、LFI、RFI 和 RCE 的预配置规则

您可以使用预配置规则缓解以下攻击:

  • 跨站脚本攻击 (XSS)
  • SQL 注入 (SQLi) 攻击
  • 本地文件包含 (LFI) 攻击
  • 远程文件包含 (RFI) 攻击
  • 远程代码执行 (RCE) 攻击

这些规则基于 OWASP Modsecurity 核心规则集 3.0.2 版。

聊天机器人管理规则

您可以使用聊天机器人管理规则执行以下操作:

  1. 重定向包含可选的手动验证的 reCAPTCHA Enterprise 评估请求。
  2. 评估附加到请求的 reCAPTCHA Enterprise 令牌,并根据令牌特性应用已配置的操作。
  3. 将请求重定向到您配置的备用网址,并返回 302 响应。
  4. 在将请求代理到后端之前,先将自定义标头插入到请求中。

如需详细了解聊天机器人管理,请参阅聊天机器人管理概览

已命名 IP 地址列表的预配置规则

已命名 IP 地址列表的预配置规则具有以下功能:

  • 将第三方提供商的已命名 IP 地址列表与 Google Cloud Armor 集成

  • 简化对允许或拒绝的 IP 地址范围的维护

  • 每日同步第三方提供商的列表。

  • 增加在安全政策中配置 IP 地址和范围的容量,因为已命名 IP 地址列表不受限于每个规则的 IP 地址数量。

速率限制规则

您可以使用速率限制规则执行以下操作:

  • 根据您配置的阈值限制每个客户端的请求数量
  • 暂时屏蔽超出您在配置的时长内设置的请求阈值的客户端

如需详细了解速率限制及其工作原理,请参阅速率限制概览

预览模式

您可以预览规则的效果,而无需执行规则。在预览模式下,操作记录在 Cloud Monitoring 中。您可以选择预览安全政策中的单个规则,也可以预览政策中的每个规则。

您可以使用 gcloud 命令行工具和 gcloud compute security-policies rules update--preview 标志为规则启用预览模式。

如需停用预览模式,请使用 --no-preview 标志,该标志当前未记录。您还可以使用 Cloud Console。

日志记录

Google Cloud Armor 具有全面的日志记录功能,可让您定义日志记录的详尽程度。如需全面了解日志记录,请参阅使用请求日志记录

JSON 解析和详细日志记录

默认情况下,在评估预配置的 WAF 规则时,Google Cloud Armor 不会解析 POST 正文的 JSON 内容。如果受保护的工作负载为 REST API 提供服务,或以其他方式接收 POST 正文中含有 JSON 的请求,则可能会导致 WAF 规则 be 杂且可能对传入请求生成假正例匹配:Content-Type = "application/json" )。

请求很可能被视为 to 杂规则,您很可能认为这些结果为假正例。例如,如果未启用 JSON 解析,JSON 请求正文(如 '{"test": "123"}')会触发 SQL 注入规则 owasp-crs-v030001-id942431-sqli

如果您希望工作负载收到 Content-Type = "application/json" 的请求(例如,如果您正在提供 REST API),我们建议您启用 JSON 解析。

为了减少噪声和假正例,您可以配置 Google Cloud Armor 来解析 POST 正文的 JSON 内容。这意味着 Google Cloud Armor 会忽略 POST 正文中的 JSON 消息的结构字符,并仅查看 JSON 消息中最终用户提供的值。如需详细了解预配置的 WAF 规则,请参阅调整 Google Cloud Armor WAF 规则

此外,您可能无法判断为什么特定请求触发了预配置的 WAF 规则。Google Cloud Armor 的默认事件日志包含触发的规则以及子签名。但是,您可能需要从触发规则的传入请求中识别详细信息,以进行问题排查、验证规则或调整规则。

您可以调整日志中记录的详细程度。我们建议您仅在首次创建政策、更改政策或排查政策问题时启用详细日志记录。如果您启用详细日志记录,那么它将适用于预览模式下的规则以及标准操作期间的有效(非预览)规则。

如需详细了解详细日志记录,请参阅使用请求日志记录

HTTP(S) 负载平衡请求日志记录

根据 Google Cloud Armor 安全政策评估的每个 HTTP(S) 请求都会通过 Cloud Logging 记录。日志提供详细信息,例如所应用安全政策的名称、匹配的规则以及是否执行了规则。新的后端服务资源的请求日志记录默认处于停用状态。为确保记录 Google Cloud Armor 请求,您必须为受安全政策保护的每个后端服务启用 HTTP(S) 日志记录。

如需了解详情,请参阅 HTTP(S) 负载平衡日志记录和监控以及使用请求日志记录

如需查看 Google Cloud Armor 日志,请参阅查看日志

限制

  • 系统仅会对通过边缘安全政策的缓存未命中请求强制执行后端安全政策。

WebSocket 连接的处理方式

外部 HTTP(S) 负载平衡内置了对 WebSocket 协议的支持。WebSocket 通道由 HTTP(S) 请求启动。Google Cloud Armor 可以阻止 WebSocket 通道的建立,例如,在 IP 地址拒绝名单阻止发起 IP 地址时。不过,该通道中的后续事务不符合 HTTP 协议,并且 Google Cloud Armor 不会在第一个请求之后评估任何消息。

后续步骤