安全政策的常见使用场景

本页面介绍了 Google Cloud Armor 安全政策的常见使用场景。Google Cloud Armor 安全政策可通过 IP 地址许可名单和拒绝名单等功能以及防范常见 Web 攻击的预配置规则来保护您的应用。

控制对 Web 应用和服务的访问权限

本部分介绍了几种使用 Google Cloud Armor 安全政策来控制对应用或服务的访问权限的方法。

通过许可名单允许特定 IP 地址的用户的访问权限

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

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

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

在此配置中,您只希望允许您组织中使用某个 IP 范围内的 IP 地址的用户访问全球外部 HTTP(S) 负载均衡器或全球外部 HTTP(S) 负载均衡器(经典版)。您希望所有其他流量都被拒绝。

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

  1. 创建 Google Cloud Armor 安全政策。
  2. 在安全政策中,添加将范围添加到许可名单的规则作为第一条规则。此规则的描述为 allow [RANGE],其中 [RANGE] 是所需的 IP 地址范围。
  3. 将政策中的默认规则从允许规则修改为拒绝规则。默认规则用于管理与上述任何规则都不匹配的流量。这是该政策中的最后一条规则。将规则从 allow 更改为 deny 会阻止所有不在许可名单中的相应范围内发起的流量。
  4. 将此政策与全球外部 HTTP(S) 负载均衡器或全球外部 HTTP(S) 负载均衡器(经典版)的后端服务相关联。

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

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

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

通过拒绝名单阻止特定 IP 地址的用户的访问权限

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

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

用于根据第 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')

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

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

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

保护您的部署免受应用层攻击并帮助缓解 OWASP 十大风险

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

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

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

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

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

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

evaluatePreconfiguredExpr('xss-stable')

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

evaluatePreconfiguredExpr('sqli-stable')

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

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

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

Google Cloud Armor 可针对以下攻击提供缓解措施,而无论它们是部署在 Google Cloud 中、本地还是第三方提供商中:

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

您可以使用这些功能来解决一些最常见的 Web 应用安全风险,包括 OWASP 十大风险列表中确定的风险。

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

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

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

此外,您还可以使用边缘安全政策来保护存储在缓存中的内容。如需详细了解边缘安全政策,请参阅安全政策概览

第 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 的后端服务。

后续步骤