Google Cloud Armor 安全政策概览

使用 Google Cloud Armor 安全政策来保护在负载平衡器后面运行的应用,以免它们受到分布式拒绝服务 (DDoS) 攻击和其他基于网络的攻击,无论这些应用是部署在 Google Cloud、混合环境还是多云端架构中。

Google Cloud Armor 安全政策由根据第 3 层、第 4 层和第 7 层属性过滤流量的规则组成。例如,您可以指定与传入请求的 IP 地址、IP 范围、地区代码或请求标头匹配的条件。

Google Cloud Armor 安全政策仅适用于在外部 HTTP(S) 负载平衡器后运行的后端服务。负载平衡器可以位于优质层级或标准层级中。系统自动为 HTTP(S) 负载平衡、SSL 代理负载平衡、TCP 代理负载平衡提供 DDoS 保护。

HTTP、HTTPS、HTTP/2 和 QUIC 协议均受支持。如需了解如何在 Google Kubernetes Engine (GKE) 上配置 Google Cloud Armor,请参阅通过 Ingress 配置 Google Cloud Armor

后端服务的后端可以是实例组中的虚拟机 (VM) 实例、区域网络端点组(区域 NEG)或互联网网络端点组(互联网 NEG)。当您使用 Google Cloud Armor 保护混合部署或多云端架构时,后端必须是互联网 NEG。

借助 Google Cloud Armor 安全政策实现边缘安全

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

利用 Google Cloud Armor 安全政策,您可以允许或拒绝对 Google Cloud 边缘尽可能靠近传入流量来源的外部 HTTP(S) 负载平衡器的访问。这样可以防止不受欢迎的流量占用资源或进入您的 Virtual Private Cloud (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 的负载平衡器使用 QUIC 协议。

  • 您可以将 Google Cloud Armor 与优质层级或标准层级的外部 HTTP(S) 负载平衡器搭配使用。

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

HTTP(S) 负载平衡安全政策

外部 HTTP(S) 负载平衡器的每项后端服务都可以引用单个 Google Cloud Armor 安全政策。您可以对相同或不同外部 HTTP(S) 负载平衡器上的多项后端服务使用同一安全政策。

配置多条规则时,应指定优先级(规则评估顺序)

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) 响应。

规则语言和执行引擎

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

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

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

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

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

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

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

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

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

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

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

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

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

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

预览模式

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

日志记录

对于向您的外部 HTTP(S) 负载平衡器发出的 HTTP(S) 请求,将记录 Google Cloud Armor 安全政策名称、匹配的规则优先级、关联的操作以及相关信息。为记录 Google Cloud Armor 日志记录信息,您必须为 HTTP(S) 请求启用日志记录。

关于 Google Cloud Armor 安全政策

Google Cloud Armor 安全政策是您定义的规则集,用于执行保护面向外部的应用或服务的应用层防火墙规则。每条规则都针对传入流量进行评估。

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

当满足条件时,操作将是允许或拒绝流量。默认情况下,将执行此操作,但是可以使用预览选项。当您将预览选项设置为 true 时,将记录但不执行预览的操作。

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

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

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

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

网络边缘的 Google Cloud Armor 安全政策。
网络边缘的 Google 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 的规则。您不必对现有规则进行任何更改,但可以更改执行顺序。

通常,将应用与请求匹配的最高优先级规则。但是,通过使用 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。指纹是存储在政策中的内容的哈希。创建新政策时,请勿提供此字段的值。提供的值会被忽略。但是,当您更新安全政策时,必须指定当前指纹,该指纹是在导出或描述该政策时获得的。

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

WebSocket 连接的处理方式

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

Google Cloud Armor 安全政策

以下各部分介绍了 Google Cloud Armor 如何与其他 Google Cloud 功能和产品交互。

Google Cloud Armor 和 VPC 防火墙规则

Google Cloud Armor 安全政策和 VPC 防火墙规则具有不同的功能:

  • Google Cloud Armor 安全政策提供边缘安全性,并且可以根据从客户端流向 Google Front Ends (GFE) 的流量执行操作。
  • VPC 防火墙规则允许或拒绝进出后端的流量。您必须创建入站流量允许防火墙规则,其目标是负载平衡的后端虚拟机,其源是外部 HTTP(S) 负载平衡器使用的 IP 范围。这些规则允许 GFE 和运行状况检查系统与您的后端虚拟机通信。

例如,设想一个场景,您只想允许来自 CIDR 范围为 100.1.1.0/24 和 CIDR 范围为 100.1.2.0/24 的流量访问您的外部 HTTP(S) 负载平衡器。您的目标是确保流量不能直接到达后端负载均衡实例。换句话说,只有通过具有关联安全政策的外部 HTTP(S) 负载平衡器代理的外部流量才应到达实例。

将 Google Cloud Armor 安全政策与入站流量防火墙配合使用来限制访问。
将 Google Cloud Armor 安全政策与入站流量防火墙配合使用来限制访问(点击可放大)

在上图中,您可以通过按如下方式配置 Google Cloud 部署来实现安全目标:

  1. 创建两个实例组,一个在 us-west1 地区,另一个在 europe-west1 地区。
  2. 将后端应用实例部署到实例组中的虚拟机。
  3. 在优质层级中创建一个外部 HTTP(S) 负载平衡器。配置一个简单的网址映射和一个后端服务,其中后端服务的后端是您在上一步中创建的两个实例组。确保负载平衡器的转发规则使用 120.1.1.1 外部 IP 地址。
  4. 配置 Google Cloud Armor 安全政策,以允许来自 100.1.1.0/24 和 100.1.2.0/24 的流量并拒绝所有其他流量。
  5. 将此政策与负载平衡器的后端服务相关联。如需了解相关说明,请参阅配置安全政策。具有更复杂的网址映射的外部 HTTP(S) 负载平衡器可以引用多个后端服务。您可以根据需要将安全政策与一项或多项后端服务关联。
  6. 配置入站流量允许防火墙规则以允许来自外部 HTTP(S) 负载平衡器的流量。如需了解详情,请参阅防火墙规则

Google Cloud Armor 与 HTTP(S) 负载平衡和 IAP

Identity-Aware Proxy (IAP) 验证用户的身份,然后确定是否应允许该用户访问应用。如需为外部 HTTP(S) 负载平衡器启用 IAP,请在负载平衡器的后端服务上将其启用。同样,边缘 Google Cloud Armor 安全政策将附加到外部 HTTP(S) 负载平衡器的后端服务。

如果为外部 HTTP(S) 负载平衡器的后端服务同时启用了 Google Cloud Armor 安全政策和 IAP,则先进行 IAP 评估。如果 IAP 阻止请求,则 Google Cloud Armor 不会评估该请求。如果 IAP 成功对请求进行身份验证,则 Google Cloud Armor 会评估该请求。如果 Google Cloud Armor 安全政策生成拒绝决策,则会阻止该请求。

将 IP 地址拒绝名单和许可名单与 IAP 配合使用。
将 IP 地址拒绝名单和许可名单与 IAP 配合使用(点击可放大)

如需详细了解 IAP 和相关配置,请参阅 Identity-Aware Proxy 文档。

Google Cloud Armor 与混合部署

在混合部署中,Google Cloud 负载平衡器需要访问在 Google Cloud 外部运行的应用或内容来源,例如,在另一个云提供商的基础架构中。您可以使用 Google Cloud Armor 保护此类部署。

在下图中,负载平衡器具有两项后端服务。一项后端服务将一个实例组用作后端。另一项后端服务将互联网 NEG 用作后端,并且互联网 NEG 与一个在第三方提供商的数据中心内运行的应用相关联。

适用于混合部署的 Google Cloud Armor。
适用于混合部署的 Google Cloud Armor(点击可放大)

当您将 Google Cloud Armor 安全政策附加到将互联网 NEG 用作后端的后端服务时,Google Cloud Armor 会检查到达该后端服务的外部 HTTP(S) 负载平衡器的每个 L7 请求。

适用于混合部署的 Google Cloud Armor 保护措施受到与互联网 NEG 相同的限制

Google Cloud Armor 与 Cloud CDN

为了保护 CDN 源服务器,您可以将 Google Cloud Armor 与 Cloud CDN 搭配使用。Google Cloud Armor 可确保 CDN 源服务器免受应用攻击,减轻 OWASP 10 大风险,以及执行第 7 层过滤政策。

Google Cloud Armor 将针对仅为缓存未命中启用 Cloud CDN 的后端服务(即,未命中或绕过 Cloud CDN 缓存的请求)执行安全政策。

将安全政策附加到启用 Cloud CDN 的后端服务时,Google Cloud Armor 会根据安全政策评估无法从缓存中传送的传入请求,以确定是否应将其转发到源服务器。如果规则与请求匹配,将执行规则中配置的操作。

但是,对于缓存命中,不会执行附加到启用 Cloud CDN 的后端服务的安全政策。如果可以从缓存中传送请求,则将请求传送到任何其他有效的客户端,而不管为该请求执行安全政策将会怎样。

下图显示了 Google Cloud Armor 如何与 Cloud CDN 源配合使用。

将 Google Cloud Armor 与 Cloud CDN 配合使用。
Google Cloud Armor 与 Cloud CDN(点击可放大)

Google Cloud Armor 与无服务器应用

您可以将 Google Cloud Armor 安全政策与指向 Cloud RunApp EngineCloud Functions 服务的无服务器 NEG 后端结合使用。

不过,当您将 Google Cloud Armor 与无服务器 NEG 和 Cloud Functions 配合使用时,必须采取特殊措施来解决安全问题。

拥有 Cloud Functions 服务默认网址的用户可以绕过负载平衡器并直接转到服务网址。这会绕过 Google Cloud Armor 安全政策。您无法停用 Google Cloud 自动分配给 Cloud Functions 服务的网址。

为了避免这种安全风险,您可以在配置 Cloud Functions 函数时使用 internal-and-gclb,以只允许内部流量和发送至由外部 HTTP(S) 负载平衡器所公开的公共 IP 地址的流量。发送至 cloudfunctions.net 或通过 Cloud Functions 设置的任何其他自定义网域集的流量都会被阻止。这将防止用户规避通过外部 HTTP(S) 负载平衡器设置的任何访问权限控制机制(例如 Google Cloud Armor 安全政策)。

如需详细了解无服务器 NEG,请参阅无服务器网络端点组概览设置无服务器 NEG

一般使用场景

本部分介绍 Google Cloud Armor 安全政策的几种常见使用场景。

使用场景 1:限制对 Google Cloud 外部 HTTP(S) 负载平衡器的访问

将用户 IP 地址放在许可名单上的典型使用场景是,仅一组特定用户使用外部 HTTP(S) 负载平衡器。在以下示例中,仅允许贵组织中的用户访问在负载平衡器后运行的服务。这些用户具有贵组织分配的 IP 地址或地址块。您可以将这些 IP 地址或 CIDR 范围放在许可名单上,以便只有这些用户可访问负载平衡器。

使用许可名单限制负载平衡器访问
使用许可名单限制负载平衡器访问(点击可放大)

您可以通过配置含允许从中访问负载平衡器的源 IP 地址或源 CIDR 范围的许可名单,控制对外部 HTTP(S) 负载平衡器的访问。下一部分将进一步描述此配置。

在此配置中,您只希望允许贵组织中 IP 地址为 203.0.113.0/24 的用户访问外部 HTTP(S) 负载平衡器。您希望所有其他流量都被拒绝。

如需创建此配置,请执行以下步骤:

  1. 创建 Google Cloud Armor 安全政策。
  2. 在安全政策中,添加第一条规则,即允许将 203.0.113.0/24 列入许可名单。此规则的说明为 allow 203.0.113.0/24
  3. 将政策中的默认规则从允许规则修改为拒绝规则。默认规则用于管理与上述任何规则都不匹配的流量。这是该政策中的最后一条规则。将规则从 allow 更改为 deny 会阻止所有不在许可名单上的 203.0.113.0/24 范围发起的流量。
  4. 将此政策与外部 HTTP(S) 负载平衡器后端服务相关联。

使用场景 2:使用拒绝名单在边缘阻止未经授权或恶意的流量

使用拒绝名单创建 Google Cloud Armor 安全政策,以拒绝来自某个 IP 地址或 CIDR 范围的流量。在下图中,Google Cloud Armor 安全政策具有 deny 规则,该规则会阻止来自 IP 地址 198.51.100.1 的流量,在该 IP 地址中已识别出恶意用户。

使用拒绝名单限制负载平衡器访问
使用拒绝名单限制负载平衡器访问(点击可放大)

使用场景 3:仅允许从第三方安全提供商和其他授权用户流向外部 HTTP(S) 负载平衡器的流量

如果贵组织使用第三方安全提供商来清理流量,则可以将安全提供商的 IP 地址列入许可名单,以确保仅清理后的流量可以访问外部 HTTP(S) 负载平衡器和后端。

在下图中,第三方提供商由 CIDR 范围 192.0.2.0/24 进行标识,并且此范围在许可名单中。

通过将来自第三方安全提供商的流量列入许可名单来限制负载平衡器访问
通过将来自第三方安全提供商的流量列入许可名单来限制负载平衡器访问(点击可放大)

使用场景 4:使用与第 3 层到第 7 层参数匹配的自定义规则来自定义防御机制

使用 Google Cloud Armor 自定义规则语言在规则的匹配条件中定义一个或多个表达式。Google Cloud Armor 收到请求后,将根据这些表达式评估请求。如果存在匹配项,则执行规则的操作,即拒绝或允许传入流量。

以下示例是用通用表达式语言 (CEL) 的 Google Cloud Armor 扩展编写的表达式。 如需了解详情,请参阅自定义规则语言参考文档

如需在规则中定义表达式,请使用 gcloud --expression标志或 Google Cloud Console。如需了解详情,请参阅创建 Google Cloud Armor 安全政策、规则和表达式

在以下示例中,来自 AU 地区中的 2001:db8::/32(例如您的 Alpha 版测试人员)的请求与以下表达式匹配:

origin.region_code == "AU" && inIpRange(origin.ip, '2001:db8::/32')

以下示例与来自 1.2.3.4 的请求以及包含字符串 WordPress 的用户代理相匹配:

inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('WordPress')

如需了解其他示例,请参阅自定义规则语言参考文档中的示例表达式

使用场景 5:使用预配置规则缓解应用层攻击

使用预配置规则检测和阻止常见应用层攻击,例如 XSS 和 SQLi。预配置规则是预定义的表达式集,您可以将其添加到 Google Cloud Armor 安全政策。如需将这些表达式集添加到规则中,请使用 gcloud --expression 标志或 Cloud Console。如需了解详情,请参阅创建 Google Cloud Armor 安全政策、规则和表达式

如需详细了解预配置规则,请参阅自定义规则语言参考文档中的预配置规则

下面的示例使用预配置规则来缓解跨站脚本攻击 (XSS):

evaluatePreconfiguredExpr('xss-stable')

下面的示例使用预配置规则来缓解 SQL 注入 (SQLi) 攻击:

evaluatePreconfiguredExpr('sqli-stable')

您还可以将预配置规则与其他表达式结合使用。下面的示例使用预配置规则来缓解 1.2.3.0/24 IP 地址范围内的 SQLi 攻击:

inIpRange(origin.ip, '1.2.3.0/24') && evaluatePreconfiguredExpr('sqli-stable')

混合部署使用场景

本部分介绍混合部署 Google Cloud Armor 安全政策的使用场景。

使用场景:适用于混合工作负载的 OWASP 10 大缓解措施

Google Cloud Armor 为您的应用提供 SQL 注入 (SQLi) 和跨站脚本攻击 (XSS) 缓解措施,而无论它们是部署在 Google Cloud 中、本地还是第三方提供商中。您可以使用这些功能来解决一些最常见的 Web 应用安全风险,包括 OWASP 10 大列表中确定的风险。

可以将 Google Cloud Armor 的预配置 WAF 规则添加到安全政策,以检测并拒绝包含 SQLi 或 XSS 尝试的不受欢迎的第 7 层请求。Google Cloud Armor 会检测恶意请求,并将其丢弃在 Google 基础架构的边缘。无论后端服务部署在哪里,都不会将请求代理到后端服务。

如需保护非 Google Cloud 托管工作负载免受 Google 网络边缘的 SQLi 或 XSS 攻击,请按照以下步骤操作:

  1. 使用将互联网 NEG 用作后端的后端服务配置外部 HTTP(S) 负载平衡器。
  2. 创建 Google Cloud Armor 安全政策。
  3. 将 SQLi 和 XSS 规则添加到政策。
  4. 将安全政策附加到您在步骤 1 中创建的后端服务。
  5. 通过使用 Cloud Logging、Cloud Monitoring 以及发送至 Security Command Center 的发现结果来监控 Google Cloud Armor 活动。

使用场景:Cloud CDN 外部源服务器 DDoS 防御和第 7 层监控

带外部源服务器的 Cloud CDN 部署可以将 Google 的边缘基础架构用作代理、缓存和 Google Cloud Armor 第 7 层过滤的前端。使用互联网 NEG,源服务器可以位于本地,也可以位于第三方基础结构提供商处。

Google Cloud Armor 和其他 Google 边缘基础架构可缓解和丢弃 L3/L4 攻击,对可疑的第 7 层活动发出警报,以及随时准备通过自定义规则拒绝不受欢迎的第 7 层请求。跨 Cloud Logging、Cloud Monitoring 和 Security Command Center 的 Google Cloud Armor 日志记录和遥测可为受保护应用提供富有实用价值的分析洞见,无论这些应用部署在何处。

如需为 CDN 外部源服务器启用 Google Cloud Armor 保护措施,请按以下步骤操作:

  1. 使用将互联网 NEG 用作后端的后端服务配置外部 HTTP(S) 负载平衡器。
  2. 为此后端服务启用 Cloud CDN。
  3. 创建 Google Cloud Armor 安全政策。
  4. 将安全政策附加到您在步骤 1 中创建的后端服务。
  5. 在 Security Command Center、Cloud Logging 和 Cloud Monitoring 中访问 Google Cloud Armor 警报、日志记录和遥测。

Cloud CDN 使用场景

本部分介绍带 Cloud CDN 的 Google Cloud Armor 的两个使用场景。

使用场景:SQLi 和 XSS 缓解措施

您可以使用 Google Cloud Armor 保护 Cloud CDN 源服务器免受 SQL 注入 (SQLi) 和跨站脚本攻击 (XSS) 等风险。缓存中的内容是静态的,并且大概不会构成网络定向攻击的风险。但是,底层内容源服务器可能是具有已知或潜在 Web 应用漏洞的动态应用。您的安全性或合规性要求可能要求您减轻这些风险,以防止互联网的漏洞利用成功地攻击源服务器。

如需缓解风险,请执行以下操作:

  1. 创建或标识启用 CDN 的后端服务。
  2. 创建 Google Cloud Armor 安全政策。
  3. 在安全政策中创建一条或多条规则以拒绝 XSS 和 SQLi 攻击。
  4. 将安全政策的某个目标配置为您在第 1 步中创建或标识的后端服务。

使用场景:第 7 层访问权限控制和缓存无效化攻击

根据应用架构,您可以配置一项后端服务来传送各种网址的请求,包括可缓存和不可缓存的内容。在此类部署情景中,创建 Google Cloud Armor 安全政策,以拒绝某些请求路径上不受欢迎的流量,但允许所有客户端访问不同请求路径上的静态内容。

在其他情况下,即使从缓存中高效地传送内容,恶意或有缺陷的客户端也可能会生成大量请求,从而导致缓存未命中,并要求底层源服务器获取或生成请求的内容。这可能会限制有限的资源,并对所有用户的应用可用性产生负面影响。您可以创建 Google Cloud Armor 安全政策,以匹配引起问题的所有客户端的签名,并在请求到达源服务器并影响性能之前拒绝请求。

为此,请按以下步骤操作:

  1. 创建 Google Cloud Armor 安全政策。
  2. 配置规则;例如,以下规则拒绝访问 "/admin"

    request.path.contains("/admin") && !inIpRange(origin.ip, '<allowed_ip_range>'
    
  3. 将第 1 步中的安全政策附加到启用 Cloud CDN 的后端服务。

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

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

如需了解详情,请参阅 IP 地址拒绝名单/许可名单

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

限制

  • Cloud Storage 后端存储分区不支持 HTTP(S) 负载平衡的 IP 地址拒绝名单/许可名单。

  • 内部 HTTP(S) 负载平衡不支持 Google Cloud Armor。

  • 仅针对 CDN 缓存未命中执行安全政策。 即使安全政策中的规则拒绝了请求,也将从缓存中传送内容。

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

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

后续步骤