能否通过AWS PrivateLink实现S3到S3的直接跨账号数据复制?
完全可以不需要EC2中转,直接通过AWS PrivateLink实现跨账号S3桶之间的复制,全程流量不会经过公网,也不需要中间实例做中转。
实现前提
- 两个S3桶必须和配置的S3接口端点(PrivateLink for S3资源)在同一个AWS区域,跨区域暂时无法直接通过PrivateLink做原生S3复制
- 你方账号和客户账号都已经在对应VPC中配置了S3接口端点,且两端的端点安全组都放行443端口的HTTPS出入站流量
- 两边S3桶策略都配置了对应VPC端点的访问权限,同时完成跨账号读写授权
具体配置步骤
1. 配置双向S3 PrivateLink接口端点
- 你方账号在自有VPC中创建S3接口端点,端点策略中配置允许访问你方源S3桶,同时开放跨账号访问权限给客户账号
- 客户账号在自有VPC中创建S3接口端点,端点策略中配置允许写入客户侧目标S3桶,开放跨账号访问权限给你方账号
2. 配置桶策略与访问权限
你方源桶添加如下策略,允许复制角色通过指定VPC端点读取源桶数据:
{ "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::执行复制操作的账号ID:role/跨账号复制角色"}, "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::你的源桶名/*", "arn:aws:s3:::你的源桶名" ], "Condition": { "StringEquals": { "aws:SourceVpce": "你方S3接口端点ID" } } }
客户方目标桶添加如下策略,允许复制角色通过指定VPC端点写入目标桶:
{ "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::执行复制操作的账号ID:role/跨账号复制角色"}, "Action": ["s3:PutObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::客户目标桶名/*", "arn:aws:s3:::客户目标桶名" ], "Condition": { "StringEquals": { "aws:SourceVpce": "客户方S3接口端点ID" } } }
3. 执行S3跨桶复制
直接使用S3原生同步命令即可,执行时指定S3接口端点地址,流量全程走PrivateLink链路:aws s3 sync s3://你的源桶名 s3://客户目标桶名 --region 对应区域 --endpoint-url https://bucket.vpce-xxx-xxx.s3.区域ID.vpce.amazonaws.com
注意事项
- 如果你使用S3原生同区域复制(SRR)功能,需要在复制规则中额外指定流量走VPC端点,避免走公网路径
- 执行复制的IAM角色需要同时拥有两边桶的对应读写权限、以及S3接口端点的访问权限
- 所有数据传输全程在AWS骨干网内完成,完全符合PrivateLink的安全合规要求
内容的提问来源于stack exchange,提问作者Gul
相关产品推荐
相关产品推荐

