使用 Google Cloud Armor、负载均衡和 Cloud CDN 部署可编程的全球前端

Last reviewed 2024-04-04 UTC

本文档为 Google Cloud 上托管的 Web 应用提供了参考架构。该架构使用全球前端,其中融合了 Google Cloud 最佳做法,以帮助扩缩、保护和加速面向互联网的应用交付。该架构包括对 Cloud Build 的支持,以及对 Jenkins 和 GitLab 等第三方持续集成 (CI) 和持续交付 (CD) 工具的支持。此架构适用对象:希望使用负载均衡器扩缩应用并使用 Web 应用防火墙 (WAF) 保护其应用免受分布式拒绝服务攻击 (DDoS) 和基于网络的攻击的开发者和应用所有者。

架构

下图展示了本文档介绍的架构。

Web 应用架构。

在此架构中,应用通过全球外部应用负载均衡器实现负载均衡,这些负载均衡器跨多个后端实例、跨多个区域分配 HTTP 和 HTTPS 流量。Cloud CDN 使用 Google 的边缘入网点 (PoP) 加速面向互联网的应用,并与全球外部应用负载均衡器搭配使用来向用户分发内容。后端受 Google Cloud Armor 安全政策的保护,这些政策通过清除常见 Web 攻击或其他第 7 层属性的传入请求来提供第 7 层过滤,从而帮助防止流量到达负载均衡后端服务。默认情况下,系统会启用针对容量 DDoS 攻击的保护。

当用户从您的服务请求内容时,请求将被发送到面向互联网的应用的全球前端,该前端由 Cross-Cloud Network 提供。该请求由 Google Cloud Armor 安全政策评估,从 Google Cloud Armor 边缘安全政策开始。如果允许请求并且 Cloud CDN 可以满足该请求,则系统会从 Google Cloud Armor 缓存中检索内容并将其发送回用户。如果请求导致缓存未命中,则后端政策会评估该请求,然后后端服务器会根据政策的规则拒绝或实现请求。

架构组件

上图包括以下组件:

  • 全球外部应用负载均衡器:此应用负载均衡器是一种基于代理的第 7 层负载均衡器,可让您运行和扩缩服务。应用负载均衡器将 HTTP 和 HTTPS 流量分发到在各种 Google Cloud 平台上托管的后端。应用负载均衡器具有以下功能:

    • 可配置的后端:此架构在不同区域使用两个托管式实例组 (MIG),但您可以配置全球外部应用负载均衡器支持的任何后端。您可以将同一负载均衡器用于 GKE、Cloud Run、Cloud Functions 和 App Engine 应用,以及使用不同后端配置在本地和其他云上托管的应用。如需了解详情,请参阅应用负载均衡器概览
    • 流量分配:您可以使用应用负载均衡器进行流量管理,包括通过将不同的用户发送到不同的后端服务器来管理软件版本。在本文档介绍的架构中,涉及 60/40 这一简单流量分配。但是,您可以更改此分配情况,以创建更复杂的流量管理方案。如需了解其他配置选项,请参阅可配置的超时和重试,并确定您偏好的均衡模式
  • Cloud CDN:Cloud CDN 平台充当缓存。它与源服务器一起部署,以提供全套 Cloud CDN 功能,包括 QUIC 和 HTTP/2,以及路由和缓存控件。这种方法让您的应用在不牺牲性能的情况下即可在全球范围内扩缩,同时降低带宽和前端计算费用。全球前端使用的默认配置基于 Cloud CDN 内容分发最佳实践Web 安全最佳实践

  • Google Cloud Armor:此组件包含 DDoS 防护和 WAF 规则。该架构具有以下基本 Google Cloud Armor 配置,有助于缓解常见威胁途径:

使用的产品

此参考架构使用以下 Google Cloud 产品:

设计考虑事项

本部分提供的指导可帮助您将本文档作为着手点,以开发满足特定安全性、可靠性、运营效率、费用和性能要求的架构。

安全性、隐私权和合规性

本部分介绍了使用此参考架构部署 Web 应用时应考虑的其他因素。

建立安全基准

为了帮助进一步增强安全性,本文档中介绍的架构还与企业基础蓝图兼容。此蓝图可帮助使用 Google Cloud 的组织为未来的所有工作负载建立安全基准,包括 Identity and Access Management (IAM)Cloud Key Management ServiceSecurity Command Center 的设置。

使用 Cloud CDN 保护用户数据

在此架构中,我们建议您不要缓存特定于用户的内容。对于缓存 HTML (text/html) 和 JSON (application/json) 内容类型,请在 Cloud CDN 响应中设置显式缓存控件标头。切勿缓存单个用户的数据,并将其传送给所有用户。

使用 IAP 控制对应用的访问权限

该架构还与 Identity-Aware Proxy (IAP) 兼容。IAP 验证用户的身份,然后确定是否应允许该用户访问应用。如需为全球外部模式或经典模式的应用负载均衡器启用 IAP,请在负载均衡器的后端服务上将其启用。Google Cloud Armor 会先评估入站 HTTP/HTTPS 请求,然后再由应用负载均衡器发送这些请求以进行负载均衡。如果 Google Cloud Armor 阻止请求,IAP 不会对请求进行评估。如果 Google Cloud Armor 允许请求,IAP 继而会评估请求。若请求未通过 IAP 的身份验证,则请求会被阻止。如需了解详情,请参阅将 Google Cloud Armor 与其他 Google 产品集成

费用优化

一般说来,将 Cloud CDN 与 Google Cloud Armor 结合使用有助于最大限度地降低数据传出费用的影响。

Cloud CDN

从缓存提供给客户端的静态对象不通过负载均衡器传输。有效的缓存策略可以减少负载均衡器处理的出站数据量,并降低费用。

Google Cloud Armor

Google Cloud Armor 防止您的账号因不必要的流量而产生费用,从而帮助您降低费用。受 Google Cloud Armor 阻止的请求不会从应用生成响应,从而实际减少负载均衡器处理的出站数据量。对费用的影响取决于您实施的 Google Cloud Armor 安全政策阻止的不良流量百分比。

最终费用也可能有所不同,具体取决于您要保护的服务或应用的数量、您拥有的 Google Cloud Armor 政策和规则的数量、缓存填充和出站流量,以及数据量。如需了解详情,请参阅以下内容:

部署

如需部署此参考架构,请使用 Terraform 示例。 如需了解详情,请参阅 README 文件web_app_protection_example 文件夹包含 (main.tf) 文件。此文件中的代码会创建本文档中所述的架构,并为自动部署提供额外的支持。

Terraform 文件夹中的文件夹结构如下所示:

当您向流水线所基于的任何分支提交更改时,这些更改会触发流水线运行,并且这些更改会在完成后集成到新版本中。首次拉取该工具包时,解决方案将加载到您选择的 Google Cloud 项目中。

后续步骤

详细了解此参考架构中使用的 Google Cloud 产品的最佳实践:

贡献者

作者:

其他贡献者: