本文档为 Google Cloud 上托管的 Web 应用提供了参考架构。该架构使用全球前端,其中融合了 Google Cloud 最佳做法,以帮助扩缩、保护和加速面向互联网的应用交付。该架构包括对 Cloud Build 的支持,以及对 Jenkins 和 GitLab 等第三方持续集成 (CI) 和持续交付 (CD) 工具的支持。此架构适用对象:希望使用负载均衡器扩缩应用并使用 Web 应用防火墙 (WAF) 保护其应用免受分布式拒绝服务攻击 (DDoS) 和基于网络的攻击的开发者和应用所有者。
架构
下图展示了本文档介绍的架构。
在此架构中,应用通过全球外部应用负载均衡器实现负载均衡,这些负载均衡器跨多个后端实例、跨多个区域分配 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 配置,有助于缓解常见威胁途径:
基于 ModSecurity 核心规则集 CRS 3.3 的预配置 WAF 规则。通过这些规则,Google Cloud Armor 可以通过引用预先命名的规则来评估数十种不同的流量签名,而无需您手动定义每个签名。
Google Cloud Armor 边缘安全政策的基本配置,用于过滤传入的请求并控制对受保护的后端服务和 Cloud Storage 存储桶的访问权限。
使用的产品
此参考架构使用以下 Google Cloud 产品:
设计考虑事项
本部分提供的指导可帮助您将本文档作为着手点,以开发满足特定安全性、可靠性、运营效率、费用和性能要求的架构。
安全性、隐私权和合规性
本部分介绍了使用此参考架构部署 Web 应用时应考虑的其他因素。
建立安全基准
为了帮助进一步增强安全性,本文档中介绍的架构还与企业基础蓝图兼容。此蓝图可帮助使用 Google Cloud 的组织为未来的所有工作负载建立安全基准,包括 Identity and Access Management (IAM)、Cloud Key Management Service 和 Security 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 政策和规则的数量、缓存填充和出站流量,以及数据量。如需了解详情,请参阅以下内容:
- Google Cloud Armor 价格
- Cloud Load Balancing 价格
- Cloud CDN 价格
- 如需了解特定部署场景的价格,请参阅 Google Cloud 价格计算器
部署
如需部署此参考架构,请使用 Terraform 示例。
如需了解详情,请参阅 README
文件。web_app_protection_example
文件夹包含 (main.tf
) 文件。此文件中的代码会创建本文档中所述的架构,并为自动部署提供额外的支持。
Terraform 文件夹中的文件夹结构如下所示:
- 源代码库:Web 应用保护示例是 Web 应用和 API 保护 (WAAP) 制品库的一部分。
- CD 和 CI:构建文件夹包含以下 Jenkins、GitLab 和 Cloud Build 的描述性文件:
- Jenkins:此制品库包含 Jenkins 文件,其中包含流水线执行的规则。
- GitLab:此制品库包含 .gitlab-ci YAML 文件,其中包含 GitLab 流水线执行的规则。
- Cloud Build:此制品库包含 Cloud Build 文件,其中包含基于分支名称的规则。
- 该制品库包含多环境(生产和开发)部署选项。如需了解详情,请参阅
README
文件。
当您向流水线所基于的任何分支提交更改时,这些更改会触发流水线运行,并且这些更改会在完成后集成到新版本中。首次拉取该工具包时,解决方案将加载到您选择的 Google Cloud 项目中。
后续步骤
详细了解此参考架构中使用的 Google Cloud 产品的最佳实践:
- Web 安全最佳实践
- 外部应用负载均衡器性能最佳实践
- 内容分发最佳实践
- 调整 Google Cloud Armor WAF 规则的最佳实践
Cloud Armor Enterprise:此架构中的 Google Cloud Armor 功能在 Google Cloud Armor Standard 层级下提供。通过将项目注册到 Cloud Armor Enterprise,您可以使用其他功能,例如:
- 威胁情报,可让您根据多个类别的威胁情报数据允许或阻止流向外部应用负载均衡器的流量。
- 自动调节式保护,可帮助保护您的 Google Cloud 应用、网站和服务免受 HTTP 洪水等第 7 层 DDoS 攻击以及其他高频第 7 层(应用级)恶意活动。 自动调节式保护可构建机器学习模型,以检测异常活动并发出提醒,生成描述潜在攻击的特征,并生成自定义 Google Cloud Armor WAF 规则来阻止该特征。
- DDoS 攻击可见性,它通过指标以及事件记录(例如第 3 层、第 4 层容量攻击尝试)提供可见性。
- 其他服务,例如 DDoS 响应支持和 DDoS 账单保护。 如需了解详情,请参阅 Cloud Armor Enterprise 概览
如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。
贡献者
作者:
- Lihi Shadmi | 产品经理
- David Tu | 客户工程师
其他贡献者:
- Alex Maclinovsky | 企业架构师
- Anderson Duboc | 客户工程师
- Grant Sorbo | 解决方案架构师
- Michele Chubirka | 云安全技术推广工程师
- Rob Harman | 技术解决方案工程师经理
- Susan Wu | 对外产品经理