发布于: Oct 10, 2021
演示环境搭建步骤
创建演示 VPC 环境
在每个区域中通过 VPC Console 的向导创建一个带有公有子网和私有子网的 VPC, 同时在 cn-northwest-1 区域创建S3桶(具体步骤略)。下面是我的演示环境中的截图:
cn-north-1 区域 VPC 及子网:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222.a0e97744ab27c93ceb4c86f028f3c19f8c2765c7.png)
cn-northwest-1 区域 VPC 及子网:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-1.584b5ecaa28584f377b8c21bbad64db30ec97d29.png)
在两个 VPC 中都启用 DNS hostnames 和 DNS resolution:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-2.f339f561c3e89cf80629b61e54c0c02b359c5ef3.png)
cn-northwest-1 区域 S3 桶:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-3.eb3d564512d78981c5870022de21d2ba9407ffa6.png)
把两个区域中的 VPC 创建对等连接,更新路由表(具体步骤略),下面是我的演示环境中的截图:
VPC 对等连接:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-4.91d553d599b552511094c2411c76eefad6906939.png)
在两个 VPC 对等连接中都启用 DNS 解析:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-5.624eb70ee0bd3e83ddfccad71d712c7d8a749a58.png)
cn-north-1 区域路由表:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-6.c71587bc83aa51ea7c1ed32c1174ed9254740a1a.png)
cn-northwest-1 区域路由表:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-7.6990e5fbb271089c81ee0c46cb34a385a42fbdf9.png)
在 cn-north-1 公有子网和私有子网各创建一台 EC2 实例,公有子网的 EC2 作为跳板机连接到私有子网的 EC2。 同时在 cn-northwest-1 的私有子网创建一台 EC2 实例。
cn-north-1 区域 EC2:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-8.aac02e3441efa6f4408c3fe6ae1677ed249e97c2.png)
cn-northwest-1 区域 EC2:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-9.303bbb49ff7eba144a12681719a227acceb782ef.png)
EC2 安全组入站:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-10.3a6f124760c6de3ad189df3062f306cab6b5c2a5.png)
EC2 安全组出站:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-11.99b73cddf635b49f1d01e3b179d189a4eb21c999.png)
借助于公有子网的 EC2 跳板机, 验证从 cn-north-1 私有子网的 EC2(IP:172.31.30.22) 成功 SSH 到 cn-northwest-1 的 EC2 实例(IP:10.10.1.94 )。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-12.b7e85a980c703553bfc180f6391292b7a594bb39.png)
首先为确保 Amazon Web Services 命令行工具(例如 Amazon CLI)可以通过 HTTPS 从 VPC 中的资源向 Amazon Web Services 服务发出请求,接口终端节点的安全组必须允许入站 HTTPS(端口 443)流量,所以在 cn-northwest-1 区域创建一个安全组,入站规则如下:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-13.fe4da21952e814a8318c5466dd8bd60b99e78849.png)
在 cn-northwest-1 区域的 VPC 创建 S3 的接口终端节点,关联对应的 VPC 和子网,来实现跨区域私有访问 S3。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-14.038db83a9f98150ae00590423470350d806b374e.png)
接下来给接口终端节点关联之前创建的安全组,然后创建S3的接口终端节点。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-15.e8da3a2d41cf6ce0ed1e091dbcf55260d9c532b2.png)
创建完成后,会生成两种类型的S3接口终端节点的 DNS:
- Regional DNS – 包括唯一的 VPC 端点 ID、服务标识符、Amazon Web Services区域和 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 来指定可用区,降低跨可用区数据传输成本
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-16.c703b38cac8a947fbc455220ca895a96db1d9b86.png)
S3 接口终端节点在选择的子网中,使用分配私有 IP 的 ENI 创建 S3 接口终端节点,从而实现与 S3 的安全连接。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-17.9250f64ded789cd520992051913eda5350f01959.png)
首先在 cn-north-1 创建 EC2 服务的 role, 赋予 S3 读写权限。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-18.6e19c77ff7973b80355f6ae5704480da1a3ad553.png)
把创建的 EC2 服务的 role 赋予 cn-north-1 私有子网的 EC2(IP:172.31.30.22)。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-19.c783e2b7d995e555ef8b91cb061f4a4127b0b5d6.png)
验证从 EC2 不能直接访问 cn-northwest-1 的 s3 桶,因为 EC2 在私有子网,不能访问 public 网络访问 S3 Endpoint,命令会一直 hung 住直到超时。
注意:需要先把 Amazon CLI 升级到最新版本。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-20.75c95a6d80f717d5d65f3e6ec964025dab078349.png)
验证通过 VPC 对等连接和 S3 接口终端节点 DNS,cn-north-1 的私有子网的 EC2 可以成功访问位于 cn-northwest-1 的 s3 桶并上传文件。
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-21.66e9eb321de5e91679c94a541b97849651e885b0.png)
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/lili/seo-blog-articles-page-creation---batch-2/222-22.76e797bc454567e4955848f7de261c20dae0df75.png)
S3 接口终端节点和之前的网关终端节点是可以共存的,建议本区域的 VPC 内应用程序通过网关终端节点私有安全 S3,这种方式不会产生额外的费用。对于其它区域和客户数据中心用接口终端节点, 通过 Amazon PrivateLink 以安全和私密的方式连接到 S3。推荐的架构如下:
![](https://s3.cn-north-1.amazonaws.com.cn/aws-dam-prod/zhyawenm/%e5%a6%82%e4%bd%95%e6%90%ad%e5%bb%ba-vpc-%e7%8e%af%e5%a2%83%e5%b7%b2%e8%ae%bf%e9%97%ae-amazon-s3-%e5%ad%98%e5%82%a8%e6%a1%b6%ef%bc%9f/1.b72349beaafb294c4f5feba06652f5d6521fccb1.jpg)
对于本地数据中心访问 S3 接口终端节点 DNS, Amazon Global 区域可以结合Route53 Resolver(参考文档1);Amazon Web Services中国区可以搭建 DNS Proxy 来实现 DNS 解析(参考文档2)。
本文介绍了利用 Amazon S3 的接口终端节点和跨区域间的 VPC 对等连接,来实现跨区域私有访问 S3,网络流量通过 Amazon PrivateLink 全部保持在 Amazon 网络上。客户可以根据自己的需要,可以通过 Amazon Direct Connect 或 Amazon VPN 提供的安全连接从本地应用程序私有访问 S3。从本地应用程序向 S3 发出的 API 请求和 HTTPS 请求会自动通过接口终端节点进行定向,这些终端节点通过 PrivateLink 以安全和私密的方式连接到 S3。
相关文章