亚马逊AWS官方博客

Amazon CloudFront 部署小指南(十三) – VPC Origins

CloudFront VPC Origins 是一种增强应用程序安全性和简化管理的解决方案。通过将应用程序部署在 VPC 的私有子网中,并使用 CloudFront 作为唯一入口点,可以显著提升整体架构的安全性和可管理性。

VPC Origins 的主要优势

在实施 VPC Origins 后,我们在安全性方面获得了显著提升。源站完全避免了暴露在公网的风险,所有流量都经由 CloudFront 的私有通道进行传输。相比之前需要大量配置安全组和验证规则的情况,现在的架构设计清晰且高效,极大降低了安全管控的复杂度。

在运维管理层面,工作效率得到明显提升。由于源站部署在私有网络环境中,免去了配置访问控制和限制机制的工作量。研发团队也不再需要投入额外精力开发安全防护措施,可以更专注于业务功能的开发。这不仅优化了人力资源配置,也有效降低了因配置失误带来的安全隐患。

从成本投入来看,无需为实例配置公网 IP,节省了相应的基础设施支出。特别是在需要部署大规模实例的场景下,成本优势更为明显。

值得一提的是,在获得这些优势的同时,我们依然保持了 CloudFront 的全球分发能力,为全球用户提供稳定快速的访问体验。总体而言,VPC Origins 在提升架构安全性和运维效率的同时,也让团队能够将更多资源投入到业务价值的创造中。

架构解析

CloudFront VPC Origins 的架构通过 CloudFront 和 VPC 私有子网的结合,提供了一种高效的流量管理方式。

  • 用户的所有请求首先到达 CloudFront,作为统一的入口点。CloudFront 根据配置规则,通过私密连接(由弹性网络接口 ENI 实现)将流量路由到 VPC 内的源站资源,例如 ALB、NLB 或 EC2 实例。这种设计让请求路径更加清晰,确保用户请求能够快速传递到后端应用程序。
  • 源站资源被部署在 Amazon VPC 的私有子网中,与公网隔离。虽然无需为源站配置公共 IP 地址或在路由表中添加公网路由,但子网仍需配置互联网网关(IGW),以支持 CloudFront 请求进入私有子网。这种架构设计简化了网络配置,同时确保源站只能通过 CloudFront 访问,提升了整体架构的一致性和可控性。
  • 此外,借助 CloudFront 的全球边缘节点网络,即使源站位于私有子网中,用户依然能够享受到低延迟、高吞吐量的访问体验。

开始部署 CloudFront VPC Origins

我们将以下列 Custom Origin EC2 源站架构作为范例,在不停机的情况下,将您的流量从 Custom Origin 的访问路径迁移到安全性更高使用 VPC Origins 的架构。

①—②:首先打开您的 CloudFront 控制台,选择左侧的列表 VPC 源,接着点击创建 VPC 源的按钮。

③:在创建 VPC Origin 之前,我们需要先取得 Origin 资源的 ARN。 本次我们使用 EC2 ARN 作为范例,您可以在 EC2 的详细讯息获取 EC2 实例的 ARN。

④—⑥:接下来,您需要提供 VPC Origin 的名称,以及定义您的 Origin ARN,最后点击创建 VPC 源。

创建完毕之后,您需要确认 VPC Origin 的状态为 Deployed 的状态,并且请您记录下 VPC Origin ID,稍后的配置介面将会参考这个 ID。

⑦—⑧:接着到您的 CloudFront 分配配置页面中,切换到源页签,您可以看到您既有的 Custom Origin。点击右上角创建源。

⑨:在 Origin Domain 的选项中,请选择您刚刚创建的 VPC Origin ID。

⑩:VPC origin domain 这个栏位,建议使用与 Custom Origin 模式相同的域名(例如 origin.example.com)。取决于您是否有在源请求中包含或修改 Host 标头,VPC origin domain 名称可能会被用来作为 Host 标头,或在使用 HTTPS 回源的场景下,作为源站 TLS 验证时使用的 SNI(Server Name Indicator)栏位。若无特定 Custom Origin 域名,也可直接使用 EC2 Private IPv4 DNS 名称。

注:若使用 HTTPS 回源,错误的配置可能会影响 CloudFront 和 Origin 的 TLS 验证,造成 CloudFront 502 的错误

⑫—⑮:当您在 CloudFront 分配创建 VPC Origin 后,您可以在行为的页签下将 Custom Origin 改成 VPC Origin。 最后,等待 CloudFront 分配的状态为 Deploy 后,CloudFront 将使用 VPC Origin 通道直接访问您的 VPC 内部 EC2 ,不再需要使用任何公网的资源访问源站 EC2。

(可选)进一步限缩 EC2 上的安全组,实现最小权限的实践

⑯—⑰:您可以在 VPC 的网路接口中,找到 CloudFront 在您的 VPC 创建了一个 CloudFront 专用的弹性接口,作为 CloudFront 访问 VPC Origin 的专用通道。此弹性接口会对应一组安全组,可以先将此安全组 ID 拷贝下来。

⑱—⑲:移除既有的公网访问规则或 CloudFront Origin-Facing 的规则。

⑳—㉓:使用在步骤 ⑰ 复制的安全组 ID,只放行 CloudFront 专用弹性接口来存取源站 80/443 端口。

恭喜!您已完成 CloudFront VPC Origins 的配置。请通过 CloudFront 域名测试应用程序访问情况,并验证源站是否已无法直接访问。确认功能和性能表现正常后即可投入使用。

补充说明

以上配置步骤同样适用于新建 VPC Origin 资源或替换现有 ALB/NLB 的场景。以下是一些后续可选的优化建议。

(可选)将您的公有子网迁移到私有子网上

遵循 VPC Origin 的最佳实践,建议将源站(EC2/ELB)部署在私有子网中。对于 EC2 源站,如果同一子网内的所有资源都具备内部访问能力,您可以通过修改路由表将公有子网转换为私有子网。

对于 ALB/NLB,建议在开始迁移前,先创建内网(Internal)模式的负载均衡器并配置相同的目标组。确认其可用性后再进行迁移,这样可以避免配置完成后原有的面向互联网负载均衡器仍然占用公有 IP 地址。

(可选)释放 Public IPv4  地址节省成本

AWS Cloud 中,所有指派给您的帐号或资源占用的公有 IPv4 地址,将会被收取每小时的固定费用。当您的 CloudFront 切换成 VPC Origin 的架构时,您有机会可以透过释放公有 IPv4 的地址来节省成本。

  • 释放弹性 IP:对于使用 EIP 的 EC2 实例,您可以解除关联并释放这些弹性 IP。
  • 禁用自动分配公有 IP:EC2 实例启用自动分配公有 IP 时会产生相应费用,您可以参考文档关闭此选项。
  • ELB 更改网路方案(Scheme):调整负载均衡器网络方案:如前所述,面向互联网的负载均衡器会自动分配公有 IPv4 地址。您可以通过重建为内网(Internal)模式来节省这部分开销。

注意事项

VPC Origins 前置要求

截至 2025 年 1 月,VPC Origins 仍然有部分架构与协议的前置要求,例如:跨帐号支持、AWS 区域支持或网路协议等等限制。未来 VPC Origins 将会开放支持更多元的使用情境与架构。因此,建议您在开始操作之前到VPC Origins 的文档确认前置要求是否符合您的使用情境。

Client IP 与 CloudFront Origin-Facing IP

使用 VPC Origins 时,CloudFront 仍然会使用 CloudFront Origin-Facing 面向源站 IP 地址范围访问您的源站。请您在源站的安全组允许这些面向源站的 IP 托管前缀或参考上述范例的 VPC Origins ENI 安全组 ID。另外,如果您有在源站使用四层 Client IP 相关功能,例如:NLB 保留客户端 IP、Proxy Protocol 等将会取得 CloudFront 面向源站的 IP 地址,而不是真实的用户地址。

如果您需要获取用户真实地址,您的 CloudFront 源服务器仍然需要透过 HTTP 七层的标头取得,例如:X-Forwarded-ForCloudFront Viewer 标头 或加挂 True-Client IP CloudFront Function。

完整且及时的说明请务必参考 VPC Origins 文档及 CloudFront 开发人员指南排查文档

结论

CloudFront VPC Origins 提供了一种新方法,使用户能够通过允许 CloudFront 发布点直接从私有子网中托管的资源提供内容来交付安全且高性能的应用程序。这不仅减少了维护公共面向来源的复杂性和成本,同时也确保了应用程序的安全性。

本篇作者

Tako Tsai

亚马逊云科技资深技术支持工程师,专门研究亚马逊云科技网络安全解決方案。作为亚马逊云科技网络安全主题专家,致力于帮助客户克服云环境的系统安全、网络性能的挑战。

Weidi Lin

亚马逊云科技技术客户经理,长期支持全球头部企业客户,专注于架构优化、成本管理和技术咨询等领域。对边缘服务和网络架构有丰富的实践经验,熟悉 Amazon CloudFront、Elastic Load Balancing 等服务的应用与优化,致力于通过扎实的技术支持帮助客户提升系统性能、稳定性和用户体验。