Google Cloud Armor 最佳实践

本页面介绍优化和调整 Google Cloud Armor 部署的最佳实践。

Google Cloud Armor 是使用全球外部应用负载均衡器、传统版应用负载均衡器或外部代理网络负载均衡器进行部署的。部署 Google Cloud Armor 时,您可以将安全政策附加到要保护的负载均衡器后端服务。安全政策由您确定的预配置规则和自定义规则的集合组成。

安全政策和规则创建

以下部分介绍了新安全政策和规则的最佳实践和建议。

提供规则说明

使用规则说明来提供每条规则的创建原因以及规则的预期功能的其他背景信息。说明字段限制为 64 个字符,因此引用配置管理数据库或其他代码库是捕获上下文的高效方式。

考虑优先级间隔

最初配置规则时,请在每个规则优先级值之间保留至少 10 的间隔。例如,安全政策中的前两个规则的优先级可以是 20 和 30。这样,您就可以在需要时插入更多规则。此外,我们建议您将类似规则分组到块中,并在各组之间保留较大的间隔。

使用预览模式

安全政策规则(包括开放式 Web 应用安全项目 (OWASP) 签名)可能会对您的应用产生不可预测的影响。使用预览模式来评估规则的引入是否会对生产流量产生负面影响。

启用 Google Cloud Armor 自动调节式保护

启用自动调节式保护,以进一步保护您的应用。自动调节式保护会监控流量,并在必要时为您的安全政策建议新规则。此外,我们建议您制定提醒政策,以确保向适当的人员发出有关潜在攻击的提醒。自动调节式保护最适合容量保护。非容量类型的攻击可能不会触发自动调节式保护。

启用 JSON 解析

如果您的应用在 POST 请求的正文中发送 JSON 内容,请务必启用 JSON 解析。如果您未启用 JSON 解析,则 Google Cloud Armor 不会解析预配置 WAF 规则的 POST 正文中的 JSON 内容,并且结果可能会受到干扰并产生假正例。如需了解详情,请参阅 JSON 解析

测试逻辑

当规则的匹配条件计算结果为 true 时,则触发规则;例如,如果请求的区域代码为 AU,则匹配条件 origin.region_code == 'AU' 的计算结果为 true。如果优先级较高的规则的计算结果为 true,则系统将忽略优先级较低的规则中的操作。在以下示例中,假设您要创建一个安全政策,以阻止来自 AU 区域的用户,但 IP 地址范围 10.10.10.0/24 内的流量除外。您可以考虑使用以下具有两条规则的安全政策:

Rule1
expr: inIPRange(origin.ip, '10.10.10.0/24')
action: allow
priority: 1
Rule2
expr: origin.region_code == 'AU'
action: deny(403)
priority: 2

在此示例中,Rule1 允许来自 IP 地址范围 10.10.10.0/24 的流量。由于 Rule1 是优先级较高的规则,因此系统在根据 Rule2 进行评估之前便会允许此类流量,这意味着 Google Cloud Armor 不会根据 Rule2(或任何其余规则)评估此类流量。

创建 Google Cloud Armor 政策时,测试规则的逻辑以确保实现预期行为。为此,我们建议您生成合成流量来了解哪些规则会阻止流量,并验证结果与您的规则设计决策是否一致。如果您不确定请求会如何流经系统,请使用预览模式来查看哪些规则与请求匹配。

确定扫描器的来源 IP 地址

您的安全扫描器可以位于 Google 内部或外部。如果您想要对您的应用进行外部和未经过滤的评估,则可以在根据任何其他规则对其进行评估之前明确允许基于 IP 地址(或其他令牌)的流量。

对安全政策中的规则进行分组和排序

您的应用可能会为不同的客户子集提供服务。在以下示例中,假设您想要拒绝来自特定地理区域或 IP 地址范围的流量,因此您会将政策中的第一条规则配置为拒绝此类流量。此外,您希望明确允许一些流量进入应用,而无需安全政策对这些流量进行任何处理。对于此示例,我们建议使用以下规则优先级结构,从最高优先级到最低优先级排序:

  1. 显式拒绝规则(ASN、区域、IP 地址范围)
  2. 可信的显式允许规则(扫描器、可信系统 - 请谨慎使用)
  3. 安全规则(OWASP、自定义规则)
  4. 显式允许规则(ASN、存在标头值、IP 地址范围)
  5. 默认拒绝规则

使用 reCAPTCHA Enterprise 管理聊天机器人

Google Cloud Armor 与 Google 的 reCAPTCHA Enterprise 集成,可在 WAF 层进行机器人检测。在此集成中,reCAPTCHA Enterprise 会生成 reCAPTCHA 令牌,而 Google Cloud Armor 而不是 reCAPTCHA Enterprise 执行令牌评估过程。这样可以减少源站负载,从而可能降低您的费用,并将安全控件置于更靠近最终用户(而非后端)的位置。如需了解详情,请参阅聊天机器人管理概览

设置速率限制阈值

速率限制是一种非常有用的灵活功能,用于防止滥用和缓解撞库攻击或 L7 DDoS 攻击等高流量威胁。首次部署速率限制时,请务必选择适合您的应用的阈值。我们建议您先从预览模式强制执行该限制。在分析和了解流量配置文件时,您可以调整速率限制的参数。此外,请务必考虑为速率限制规则分配的优先级。在根据速率限制规则评估流量之前,该流量便可能已通过优先级较高的其他规则明确允许或拒绝。

规则调整

Web 应用可能允许看起来像是攻击的请求,并且可能允许甚至要求用户发送与预配置 WAF 规则中的签名匹配的请求。请务必先针对应用验证 Google Cloud Armor 规则并处理与应用可能不相关的任何发现结果,然后再在生产应用中停用预览模式来提升该规则。以下部分包含调整预配置 WAF 规则的最佳做法和建议。

选择预配置的 WAF 规则灵敏度级层

实现任何预配置的 WAF 规则时,您可以根据安全性要求和时间轴选择适当的敏感度级别。对于必须满足组织安全性要求的大多数应用,我们建议您从敏感度级别 1 开始。配置为敏感度 1 的规则会使用高保真度的签名,并可减少规则中的潜在干扰。与较高敏感度相关的签名可能会检测并阻止大量攻击尝试,但是会给某些受保护的应用带来潜在的干扰。不过,具有严苛安全性要求的工作负载可能需要采用最高敏感度级别。对于这些用例,可能存在大量干扰或不相关的发现结果,您必须在将安全政策应用到生产环境之前使用调节功能解决这些问题。

启用详细日志记录

如果您需要了解有关哪些请求特性和载荷会触发特定 WAF 规则的详细信息,请启用详细日志记录。详细日志记录提供触发特定规则的请求的详细信息(包括请求违规部分的代码段),这有助于排查 Google Cloud Armor 问题并相应进行调整。由于详细日志记录可能会导致最终用户的请求内容被记录在 Cloud Logging 中,因此您可能会在日志中累积最终用户的个人身份信息 (PII)。因此,我们不建议在启用了详细日志记录的情况下长时间运行生产工作负载。

使用稳定或 Canary 版规则

Google Cloud Armor 有两种类型的预配置 WAF 规则:稳定和 Canary 版规则。将新规则添加到当前 ModSecurity 核心规则集 (CRS) 时,我们会先将它们发布到 Canary 版规则版本,然后再自动将其发布到稳定规则版本。我们建议您在测试环境中部署 Canary 版规则,以查看环境中任何更改和添加的影响。您可以在调整 Google Cloud Armor WAF 规则页面上查看规则名称,以验证 Canary 版本是否与稳定版本同步。

日志记录和监控

以下部分介绍了配置日志记录和监控的最佳实践和建议。

使用 Security Command Center

Google Cloud Armor 会自动与 Security Command Center 集成。Google Cloud Armor 会将各种发现结果导出到 Security Command Center:

  • 允许的流量高峰
  • 拒绝率提高

请您的 Web 安全人员务必检查这些发现结果。

选择 Cloud Logging 采样率

Google Cloud Armor 每个请求日志使用全球外部应用负载均衡器或传统版应用负载均衡器的日志记录基础架构。因此,Google Cloud Armor 的日志生成取决于负载均衡器上配置的日志采样率。我们建议您在主动调整和实现 Google Cloud Armor 时将采样率保持为 1。完成调整并实现 Google Cloud Armor 后,我们建议您保持完整请求日志记录处于启用状态;但是,您可能会希望降低采样率。默认情况下,全球外部应用负载均衡器和传统版应用负载均衡器都不会启用日志,因此请务必手动启用日志记录。

使用 Cloud Monitoring 信息中心

请务必清楚了解您的 Google Cloud Armor 配置。为了简化这一过程,您可以使用安全信息中心。此外,您还可以将 Google Cloud Armor 日志直接从 Logging 导出到您自己的平台。如果您使用自动调节式保护,请务必为触发的任何自动调节式保护提醒提供上报路径。

常规管理

下面介绍了有关配置 Google Cloud Armor 的其他最佳实践和建议。

设置 Identity and Access Management 访问权限控制

根据一般 Google Cloud IAM 最佳做法,请确保合适的人员有权访问 Google Cloud Armor。您需要具有 Compute Security Admin 角色才能配置、修改、更新和删除 Google Cloud Armor 安全政策。此外,您需要具有 Compute Network Admin 角色或 compute.backendServices.setSecurityPolicy 权限才能将 Google Cloud Armor 安全政策附加到后端服务。

尽可能减少政策数量

您可以在多个后端服务之间重复使用 Google Cloud Armor 政策。我们建议您采用一组可重复使用的安全政策以确保一致性。

使用 Terraform

为了确保能够轻松回滚配置并在不同项目中重用配置,我们建议您使用 Terraform。Google Cloud Armor 与 GA 功能进行完整的 Terraform 集成

使用 Google Kubernetes Engine 配置 Google Cloud Armor

如果您使用 GKE,则必须通过 BackendConfig 参数配置 Google Cloud Armor 和其他入站流量功能。我们建议您不要手动配置全局外部应用负载均衡器或传统版应用负载均衡器作为入站流量点。如需详细了解如何使用 GKE 配置 Google Cloud Armor,请参阅配置入站流量功能