安全政策概览

本页面介绍了如何使用 Google Cloud Armor 安全政策来保护您的 Google Cloud 部署。

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

Cloud Armor 安全政策适用于以下负载均衡器和端点类型:

  • 所有外部应用负载均衡器,包括传统应用负载均衡器
  • 区域级内部应用负载均衡器
  • 全球外部代理网络负载均衡器 (TCP/SSL)
  • 传统代理网络负载均衡器 (TCP/SSL)
  • 外部直通网络负载均衡器 (TCP/UDP)
  • 外部协议转发
  • 具有分配给网络接口 (NIC) 的外部 IPv4 地址或外部 IPv6 地址范围的虚拟机

负载均衡器可以位于高级层级或标准层级中。

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

当您使用 Cloud Armor 保护混合部署或多云架构时,后端必须是互联网 NEG 或混合 NEG。当流量通过负载均衡器进行路由时,Cloud Armor 还可保护无服务器 NEG。如需了解如何在流量到达无服务器 NEG 之前通过负载均衡器路由流量,请参阅入站流量控制

Cloud Armor 还可以为外部直通式网络负载均衡器协议转发和具有公共 IP 地址的虚拟机提供高级网络 DDoS 防护。如需详细了解高级 DDoS 防护,请参阅配置高级网络 DDoS 防护

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

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

借助 Cloud Armor 安全政策,您可以允许或拒绝请求、限制请求的速率,或者将请求重定向到 Google Cloud 边缘的后端服务,尽可能接近传入流量的来源。这样可以防止不受欢迎的流量占用资源或进入您的虚拟私有云 (VPC) 网络。

下图显示了全球外部应用负载均衡器、传统应用负载均衡器、Google 网络和 Google 数据中心的位置。

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

要求

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

  • 后端服务的负载均衡方案必须是 EXTERNALEXTERNAL_MANAGEDINTERNAL_MANAGED
  • 后端服务的协议必须是 HTTPHTTPSHTTP/2UDPTCPSSLUNSPECIFIED 中的一个。

关于 Cloud Armor 安全政策

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

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

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

Cloud Armor 提供两种安全政策类别:分层安全政策和服务级安全政策。分层安全政策在组织级、文件夹级或项目级进行附加,而服务级安全政策则与一个或多个后端服务关联。如需详细了解分层安全政策,请参阅分层安全政策概览

一个后端服务可以同时与两个服务级安全政策关联,但不能同时与两个后端安全政策或两个边缘安全政策关联。不过,后端服务无需与同一安全政策关联。如需在受支持的后端服务和功能中附加和移除安全政策,请参阅附加和移除安全政策

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

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

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

网络边缘的 Cloud Armor 安全政策。
网络边缘的 Cloud Armor 安全政策(点击可放大)。
Cloud Armor 安全政策具有以下功能:

  • 您可以选择将 QUIC 协议与使用 Cloud Armor 的负载均衡器搭配使用。

  • 您可以将 Cloud Armor 与属于以下任一 Network Service Tiers 的负载均衡器搭配使用:

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

  • 您可以在配置以下负载均衡器之一时使用默认安全政策,用于防止流量超过用户指定的阈值:

    • 全球外部应用负载均衡器
    • 传统应用负载均衡器
    • 区域级外部应用负载均衡器
    • 区域级内部应用负载均衡器
    • 全球外部代理网络负载均衡器 (TCP/SSL)
    • 传统代理网络负载均衡器 (TCP/SSL)

此外,您还可以配置 Google Cloud Armor 预配置的 WAF 规则,这些规则是复杂 Web 应用防火墙 (WAF) 规则,具有根据开源业界标准编译而成的数十个特征签名。每个特征签名都对应于规则集中的攻击检测规则。Google 按原样提供这些规则。借助这些规则,Cloud Armor 可以通过引用方便命名的规则评估数十种不同的流量特征签名,而无需您手动定义每个特征签名。如需详细了解预配置的 WAF 规则,请参阅预配置的 WAF 规则概览

安全政策的类型

下表显示了服务级安全政策的类型以及它们支持的功能。对勾标记 () 表示相应类型的安全政策支持相关功能。

后端安全政策

后端安全政策用于由以下负载均衡器类型公开的后端服务:

  • 全球外部应用负载均衡器
  • 传统应用负载均衡器
  • 区域级外部应用负载均衡器
  • 区域级内部应用负载均衡器
  • 全局外部代理网络负载均衡器
  • 传统代理网络负载均衡器

您可以使用后端安全政策来过滤请求,并保护引用位于之前列出的负载均衡器类型后面的实例组或任何受支持 NEG 类型的后端服务。如需详细了解负载均衡器支持的 NEG,请参阅网络端点组概览

使用全球外部代理网络负载均衡器或传统代理网络负载均衡器时,Cloud Armor 仅对新连接请求强制执行安全政策规则 deny 操作。deny 操作会终止 TCP 连接。此外,如果您在 deny 操作中提供状态代码,则系统会忽略该状态代码。

后端安全政策具有可选的 type 标志值 CLOUD_ARMOR。如果您未设置 type 标志,则默认值为 CLOUD_ARMOR

边缘安全政策

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

  • 全球外部应用负载均衡器
  • 传统应用负载均衡器

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

将边缘安全政策和后端安全政策附加到同一后端服务时,仅针对已通过边缘安全政策的缓存未命中请求强制执行后端安全政策。

边缘安全政策在 Identity-Aware Proxy (IAP) 之前评估和强制执行。在 IAP 评估请求者的身份之前,被边缘安全政策阻止的请求会被拒绝。使用边缘安全政策中的规则阻止请求可防止 IAP 提供登录页面或以其他方式尝试对用户进行身份验证。

边缘安全政策具有 type 标志值 CLOUD_ARMOR_EDGE

网络边缘安全政策

通过网络边缘安全政策,您可以配置规则以屏蔽 Google 网络边缘的流量。强制执行网络边缘安全政策不会消耗虚拟机或主机资源,这有助于避免庞大的流量耗尽目标工作负载上的资源,或者导致拒绝服务攻击。您可以为以下资源配置网络边缘安全政策:

  • 外部直通网络负载均衡器
  • 协议转发
  • 具有公共 IP 地址的虚拟机

网络边缘安全政策支持根据与后端安全政策相同的部分参数进行过滤,并且是唯一支持字节偏移过滤的安全政策类型。如需查看可用参数的完整列表,请参阅安全政策类型表。

网络边缘安全政策具有 type 标志值 CLOUD_ARMOR_NETWORK。 如需配置网络边缘安全政策,您必须先在打算创建政策的区域中配置高级网络 DDoS 防护。如需详细了解高级 DDoS 防护,请参阅配置高级网络 DDoS 防护

内部服务安全政策

内部服务安全政策使您可以使用 Cloud Service Mesh 配置 fairshare 速率限制。您会将内部服务安全政策附加到 Cloud Service Mesh 端点政策,而不是附加到后端服务或后端存储桶。如需详细了解内部服务安全政策,请参阅 Cloud Service Mesh 文档中的使用 Cloud Armor 配置速率限制

规则评估顺序

规则评估顺序取决于规则优先级,从最低数字到最高数字。分配了最低数值的规则具有最高逻辑优先级,并且在具有较低逻辑优先级的规则之前进行评估。最小数字优先级为 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 的规则。您不必对现有规则进行任何更改,但可以更改执行顺序。

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

对于 HTTP POST 请求,Cloud Armor 会在正文(载荷)之前接收到请求标头。由于 Cloud Armor 先接收标头信息,因此它会评估针对标头进行匹配的规则,但不会对正文匹配任何预配置规则。如果存在多个基于标头的规则,Cloud Armor 将按预期根据其优先级对它们进行评估。请注意,redirect 操作和插入自定义标头操作仅在标头处理阶段有效。如果 redirect 操作在以下正文处理阶段匹配,则该操作将转换为 deny 操作。如果自定义请求标头操作在正文处理阶段匹配,则该操作将不会生效。

Cloud Armor 收到包含正文的 HTTP POST 请求后,将评估适用于请求标头和正文的规则。因此,可能会在阻止请求正文的较高优先级规则之前匹配允许请求标头的较低优先级规则。在这种情况下,系统可能会将请求的 HTTP 标头部分发送到目标后端服务,但是会阻止包含潜在恶意内容的正文。Cloud Armor 会最多检查请求正文的前 64 kB 内容(具体取决于配置的检查限制,可以是 8 kB、16 kB、32 kB、48 kB 或 64 kB)。如需详细了解此限制,请参阅 POST 和 PATCH 正文检查限制

预配置规则的 evaluatePreconfiguredWaf() 表达式是根据请求正文评估的唯一表达式。所有其他表达式仅针对请求标头评估。在带有请求正文的 HTTP 请求类型中,Cloud Armor 仅处理 POSTPATCH 请求。检查仅限于配置的检查限制,最多为请求正文的前 64 kB 内容(8 kB、16 kB、32 kB、48 kB 或 64 kB),并且会像网址查询参数一样进行解码。Cloud Armor 可对 JSON 格式的 POST 正文 (Content-Type = "application/json") 进行解析并应用预配置 WAF 规则。但是,Cloud Armor 不支持其他基于 HTTP Content-Type/Content-Encoding 的解码器,例如 XML、Gzip 或 UTF-16。

示例

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

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: deny(403)
priority: 1
Rule2
expr: evaluatePreconfiguredWaf('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: evaluatePreconfiguredWaf('xss-stable')
action: deny(403)
priority: 3
Rule-default
action: allow
priority: INT-MAX

默认规则

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

您无法删除默认规则,但可以对其进行修改。默认规则的默认操作为 deny,但您可以将默认操作更改为 allow

指纹

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

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

规则语言和执行引擎

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

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

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

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

规则类型

Cloud Armor 具有以下类型的规则。

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

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

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

  • 将 IP 地址或 CIDR 范围添加到拒绝清单后,您可以阻止来源 IP 地址或 CIDR 范围访问受支持的负载均衡器。

  • 将 IP 地址或 CIDR 范围添加到许可清单后,您可以允许来源 IP 地址或 CIDR 范围访问受支持的负载均衡器。

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

  • 拒绝规则可能会返回 HTTP 403 Unauthorized404 Access Denied502 Bad Gateway 状态代码。

  • 超出阈值后的操作规则可能会返回 HTTP 429 Too Many Requests 状态代码。

来源地理位置规则

您可以允许或拒绝源自由 Unicode 国家/地区代码定义的所选地理区域的请求。

Cloud Armor 使用我们自己的 IP 地理位置数据库来识别请求的地理位置。该数据库会定期更新。虽然我们无法保证特定的更新频率,但在正常运行期间,Cloud Armor 使用的映射大约每周更新一次。

更新后的映射必须传播到 Google 分布在全球各地的基础设施。推出过程会逐步在部署 Cloud Armor 的多个可用区和区域中进行,通常需要几天时间。由于采用这种逐步推出过程,当来源 IP 地址的地理位置映射发生变化时,在推出期间,来自同一来源 IP 地址的请求可能会以不一致的方式进行处理。

预配置的 WAF 规则

Cloud Armor 提供基于 OWASP 核心规则集 (CRS) 的预配置 WAF 规则的完整列表,可帮助您检测以下攻击:

  • SQL 注入攻击
  • 跨站脚本攻击
  • 本地文件包含攻击
  • 远程文件包含攻击
  • 远程代码执行攻击
  • 方法强制执行攻击
  • 扫描程序检测攻击
  • 协议攻击
  • PHP 注入攻击
  • 会话固定攻击
  • Java 攻击
  • NodeJS 攻击

如需了解详情,请参阅 Cloud Armor 预配置的 WAF 规则概览

机器人管理规则

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

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

如需详细了解漫游器管理,请参阅漫游器管理概览

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

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

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

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

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

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

速率限制规则

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

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

将速率限制用于全球外部代理网络负载均衡器或传统代理网络负载均衡器时,需要遵循以下限制:

  • Cloud Armor 只会强制执行速率限制操作,例如节流或限制来自客户端的新连接请求。
  • 仅支持 ALLIP 键类型。
  • 如果您尝试将密钥类型 HTTP-HEADERHTTP-COOKIE 与 TCP/SSL 负载均衡器搭配使用,则密钥类型会被解释为 ALL,同样,XFF-IP 也会被解释为 IP

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

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

预览模式

您可以预览规则的效果,而无需执行规则。在预览模式下,操作记录在 Cloud Monitoring 中。您可以选择预览安全政策中的单个规则,也可以预览政策中的每个规则。 您需要为预览模式下的规则支付正常的按请求费用。

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

如需停用预览模式,请使用 --no-preview 标志。您还可以使用Google Cloud 控制台。

如果请求触发预览,Cloud Armor 会继续评估其他规则,直到找到匹配项。匹配的规则和预览规则都会在日志中提供。

自定义错误响应

使用全球外部应用负载均衡器时,您可以针对负载均衡器或后端实例生成的错误的 HTTP 状态代码配置自定义错误响应。此外,您还可以通过为现有安全政策规则使用的同一 4xx 系列或 5xx 系列状态代码配置自定义响应页面,来为 Cloud Armor 拒绝的流量配置自定义错误代码。

如需详细了解自定义错误响应,请参阅自定义错误响应概览。如需了解配置步骤,请参阅配置自定义错误响应

日志记录

Cloud Armor 具有全面的日志记录功能,可让您定义日志记录的详细程度。无论安全政策是否处于预览模式,Cloud Armor 日志都是根据与传入请求匹配的第一个(优先级最高)规则生成的。这意味着,系统不会为不匹配的规则生成日志,也不会为优先级较低的匹配规则生成日志。

如需全面了解日志记录,请参阅使用请求日志记录。如需详细了解详细日志记录,请参阅详细日志记录。如需查看 Cloud Armor 日志,请参阅查看日志

外部应用负载均衡器请求日志记录

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

如需了解详情,请参阅外部应用负载均衡器日志记录和监控

外部代理网络负载均衡器请求日志记录

您可以使用 TCP/SSL 代理负载均衡日志记录和监控中列出的 Google Cloud CLI 命令为外部代理网络负载均衡器配置日志记录功能。您无法使用 Google Cloud 控制台为外部代理网络负载均衡器启用日志记录功能。

限制

以下部分详细介绍了安全政策的限制。

POST 和 PATCH 正文检查限制

预配置规则的 evaluatePreconfiguredWaf 表达式是 Cloud Armor 针对请求正文求值的唯一表达式。在带有请求正文的 HTTP 请求类型中,Cloud Armor 仅处理 POSTPATCH 请求。

检查仅限于配置的检查限制,最多为 POSTPATCH 正文的前 64 kB 内容(8 kB、16 kB、32 kB、48 kB 或 64 kB)。如需详细了解如何在使用预配置的 WAF 规则时配置请求正文的检查限制,请参阅为预配置的 WAF 规则更新检查限制

请求正文的其余部分可能包含与 WAF 规则特征签名匹配的载荷,您的应用可能会接受这些内容。如需降低大小超过配置的检查限制(最多为前 64 kB,可以是 8 kB、16 kB、32 kB、48 kB 或 64 kB)的请求正文的风险,请参阅降低请求正文超过配置的检查限制的风险

Cloud Armor 可对采用默认网址编码及 JSON 格式的 POSTPATCH 正文 (Content-Type = "application/json") 进行解析并应用预配置 WAF 规则,在这种情况下,规则会独立应用于在数据中解码的名称和值。对于其他内容类型和编码类型,Cloud Armor 不会对数据解码,而是对原始数据应用预配置的规则。

WebSocket 连接的处理方式

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

gRPC 连接的处理方式

全球外部应用负载均衡器内置了对 gRPC 协议的支持。gRPC 是一个开源框架,使用 HTTP/2 作为其底层协议。gRPC 调用通过 HTTP(S) POST 请求发起。您可以配置 Cloud Armor 来阻止建立 gRPC 调用,例如,通过使用 IP 地址拒绝清单来阻止发起 IP 地址。不过,您可能会发现,负载均衡器仍会在其日志和指标中报告 200 OK HTTP 状态代码响应。但这并不意味着 Cloud Armor 未按预期运行。

后续步骤