巧用 Amazon PrivateLink——轻松访问私有终端节点 Amazon S3
摘要
亚马逊云科技在 2021 年 2 月正式发布了适用于 Amazon S3 的 Amazon PrivateLink,Amazon PrivateLink 使用虚拟网络中的私有 IP 提供 Amazon Simple Storage Service (S3) 与本地资源之间的专用连接。借助此功能,您现在可以使用 Virtual Private Cloud 中的接口 VPC 终端节点,在安全的虚拟网络中直接访问作为私有终端节点的 Amazon S3。通过允许您使用私有 IP 地址访问 Amazon S3,这扩展了现有网关终端节点的功能。从本地应用程序向 Amazon S3 发出的 API 请求和 HTTPS 请求会自动通过接口终端节点进行定向,这些终端节点通过 PrivateLink 以安全和私密的方式连接到 Amazon S3。
适用于 Amazon S3 的
Amazon PrivateLink
https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html
Amazon PrivateLink
https://aws.amazon.com/privatelink/
Amazon Simple Storage Service (S3)
Virtual Private Cloud
本文档介绍的方案是通过利用跨区域间的 VPC 对等连接和 Amazon S3 的接口终端节点,来实现跨区域私有访问 Amazon S3。客户可以根据自己的需要,可以通过 Amazon Direct Connect 或 Amazon VPN 提供的安全连接从本地应用程序私有访问 Amazon S3。
Amazon Direct Connect
https://aws.amazon.com/directconnect/
Amazon VPN
📢 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注 2021 亚马逊云科技中国峰会!点击图片报名吧~更多精彩内容,敬请期待 8.19-20 北京、9.15 深圳分会吧!
服务介绍
早在 2015 年,Amazon S3 是第一个支持添加 VPC 终端节点的服务;通过 VPC 网关终端节点提供与 Amazon S3 的安全连接,而不需要网关或 NAT 实例。其原理是在指定的路由表里,创建到 Amazon S3 服务的路由,与路由表相关联的每个子网都可以访问终端节点,随后通过终端节点将来自这些子网实例的流量路由到 Amazon S3 服务。在下图中,子网 2 中的实例可通过网关终端节点访问 Amazon S3。
Amazon S3 是第一个支持添加 VPC 终端节点的服务
https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/
这种新的灵活性深受客户欢迎,但是也有它的局限性 – 不支持跨区域和本地数据中心私有访问 Amazon S3,最新推出的 Amazon S3 接口终端节点则可以满足这种需求,其通过在选择的子网中,使用分配私有 IP 的 ENI 创建 Amazon S3 接口终端节点,从而实现与 Amazon S3 的安全连接。VPC 内应用程序,或者是通过 Amazon Direct Connect 或 Amazon VPN 等安全连接到接口终端节点的本地应用程序,都可以通过接口终端节点私有访问 Amazon S3。当从本地应用程序连接到 Amazon S3 时,通过消除配置防火墙规则或互联网网关的需要,接口终端节点可简化您的网络架构。
Amazon Direct Connect
https://aws.amazon.com/directconnect/
Amazon VPN
Amazon S3 两种终端节点的对比:
演示环境整体架构
演示环境的 VPC 设置:
注意:
VPC 对等连接的 2 个 VPC 的 CIDR 块不能有重叠
使用具有接口 VPC 终端节点的私有 DNS (Amazon PrivateLink),则必须将 enableDnsHostnames
和 enableDnsSupport 属性设置为 true
在两个 VPC 对等连接中都需要启用 DNS 解析
接口终端节点的安全组必须允许入站 HTTPS(端口 443)流量
演示环境搭建步骤
4.1 创建演示 VPC 环境
在每个区域中通过 VPC Console 的向导创建一个带有公有子网和私有子网的 VPC, 同时在 cn-northwest-1 区域创建 Amazon S3 桶(具体步骤略)。下面是我的演示环境中的截图:
cn-north-1 区域 VPC 及子网
cn-northwest-1 区域 VPC 及子网
在两个 VPC 中都启用 DNS hostnames 和 DNS resolution:
cn-northwest-1 区域 Amazon S3 桶
4.2 搭建跨区域 VPC 对等连接
把两个区域中的 VPC 创建对等连接,更新路由表(具体步骤略),下面是我的演示环境中的截图:
VPC 对等连接
在两个 VPC 对等连接中都启用 DNS 解析
cn-north-1 区域路由表
cn-northwest-1 区域路由表
4.3 验证跨区域 VPC 对等连接
在 cn-north-1 公有子网和私有子网各创建一台 EC2 实例,公有子网的 EC2 作为跳板机连接到私有子网的 EC2。同时在 cn-northwest-1 的私有子网创建一台 EC2 实例。
cn-north-1 区域 EC2
cn-northwest-1 区域 EC2
EC2 安全组入站
EC2 安全组出站
借助于公有子网的 EC2 跳板机, 验证从 cn-north-1 私有子网的 EC2(IP:172.31.30.22) 成功 SSH 到 cn-northwest-1 的 EC2 实例(IP:10.10.1.94 )。
4.4 创建 Amazon S3 接口终端节点
首先为确保亚马逊云科技命令行工具(例如 Amazon CLI)可以通过 HTTPS 从 VPC 中的资源向亚马逊云科技服务发出请求,接口终端节点的安全组必须允许入站 HTTPS(端口 443)流量,所以在 cn-northwest-1 区域创建一个安全组,入站规则如下:
在 cn-northwest-1 区域的 VPC 创建 Amazon S3 的接口终端节点,关联对应的 VPC 和子网,来实现跨区域私有访问 Amazon S3。
接下来给接口终端节点关联之前创建的安全组,然后创建 Amazon S3 的接口终端节点。
创建完成后,会生成两种类型的 Amazon S3 接口终端节点的 DNS:
Regional DNS – 包括唯一的 VPC 端点 ID、服务标识符、Amazon 区域和 amazonaws.com, 本实例中为 vpce-0257c85882d96cc95-vj9syim9.s3.cn-northwest-1.vpce.amazonaws.com.cn
Zone DNS – 包括可用区,如 vpce-0257c85882d96cc95-vj9syim9-cn-northwest-1a.s3.cn-northwest-1.vpce.amazonaws.com.cn,客户用这种类型的 DNS 来指定可用区,降低跨可用区数据传输成本
Amazon S3 接口终端节点在选择的子网中,使用分配私有 IP 的 ENI 创建 Amazon Amazon S3 接口终端节点,从而实现与 Amazon S3 的安全连接。
4.5 测试验证
首先在 cn-north-1 创建 EC2 服务的 role, 赋予 Amazon S3 读写权限。
把创建的 EC2 服务的 role 赋予 cn-north-1 私有子网的 EC2(IP:172.31.30.22)。
验证从 EC2 不能直接访问 cn-northwest-1 的 Amazon s3 桶,因为 EC2 在私有子网,不能访问 public 网络访问 Amazon S3 Endpoint,命令会一直 hung 住直到超时。
注意:需要先把 Amazon CLI 升级到最新版本。
验证通过 VPC 对等连接和 Amazon S3 接口终端节点 DNS,cn-north-1 的私有子网的 EC2 可以成功访问位于 cn-northwest-1 的 Amazon s3 桶并上传文件。
使用建议
Amazon S3 接口终端节点和之前的网关终端节点是可以共存的,建议本区域的 VPC 内应用程序通过网关终端节点私有安全 Amazon S3,这种方式不会产生额外的费用。对于其它区域和客户数据中心用接口终端节点, 通过 Amazon PrivateLink 以安全和私密的方式连接到 Amazon S3。推荐的架构如下:
对于本地数据中心访问 Amazon S3 接口终端节点 DNS, 亚马逊云科技 Global 区域可以结合 Route53 Resolver(参考文档 1);亚马逊云科技中国区可以搭建 DNS Proxy 来实现 DNS 解析(参考文档 2)。
总结
本文介绍了利用 Amazon S3 的接口终端节点和跨区域间的 VPC 对等连接,来实现跨区域私有访问 Amazon S3,网络流量通过 Amazon PrivateLink 全部保持在 Amazon 网络上。客户可以根据自己的需要,可以通过 Amazon Direct Connect 或 Amazon VPN 提供的安全连接从本地应用程序私有访问 Amazon S3。从本地应用程序向 Amazon S3 发出的 API 请求和 HTTPS 请求会自动通过接口终端节点进行定向,这些终端节点通过 PrivateLink 以安全和私密的方式连接到 Amazon S3。
Amazon Direct Connect
https://aws.amazon.com/directconnect/
Amazon VPN
参考文档
https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/resolver.html
https://aws.amazon.com/blogs/security/how-to-set-up-dns-resolution-between-on-premises-networks-and-aws-by-using-unbound/
https://aws.amazon.com/cn/blogs/china/aws-privatelink-for-amazon-s3-now-available/
https://docs.aws.amazon.com/zh_cn/vpc/latest/peering/working-with-vpc-peering.html
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/privatelink-interface-endpoints.html
本篇作者
朱士洋
亚马逊云科技技术客户经理
负责企业级客户的架构和成本优化、技术支持等工作,致力于 AdTech 等行业,曾供职于 IBM,拥有 15+年的产品设计、开发/测试、技术支持经验。
评论