跨AWS账户访问S3,如何规避EC2与S3间的数据传输成本?
跨AWS账户访问S3的低成本方案(私有子网场景)
核心结论:VPC Gateway Endpoint 完全支持跨账户访问S3,这是你的最优选择
VPC网关型端点(Gateway Endpoint)本身就支持跨账户访问同区域的S3存储桶,流量直接通过AWS内部网络传输,无需走公网,能彻底规避NAT网关带来的数据传输成本。
具体配置步骤
1. 在账户A的VPC中创建S3 Gateway Endpoint
- 关联到EC2实例所在的私有子网
- 无需指定目标账户,网关端点是区域级资源,只要后续权限配置到位,就能访问同区域内任意账户的S3桶
2. 配置账户B的S3存储桶策略
在账户B的目标S3桶上添加桶策略,允许账户A的IAM实体(根用户/特定角色/用户)访问。示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::账户A-ID:root" // 可替换为具体IAM角色/用户ARN }, "Action": ["s3:GetObject", "s3:ListBucket"], // 根据应用需求调整权限范围 "Resource": [ "arn:aws:s3:::目标桶名称", "arn:aws:s3:::目标桶名称/*" ] } ] }
3. 配置账户A的IAM权限
确保账户A中EC2实例使用的IAM角色(或应用Access Key对应的IAM用户)拥有访问目标S3桶的权限。示例IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::目标桶名称", "arn:aws:s3:::目标桶名称/*" ] } ] }
4. 验证路由表配置
确认私有子网关联的路由表中,已添加指向S3 Gateway Endpoint的路由(目标前缀为S3区域前缀列表pl-xxxxxxxx,下一跳为网关端点ID)。AWS创建网关端点时通常会自动添加该路由,建议手动确认。
关于VPC Interface Endpoint的说明
接口型端点(Interface Endpoint)不适用于S3的低成本访问场景:
- S3本身没有对应的Interface Endpoint,这类端点仅针对EC2 Messages、SSM等服务
- 即使通过其他方式绕路,Interface Endpoint的数据传输会产生额外费用,性价比远低于Gateway Endpoint
额外注意事项
- 区域限制:Gateway Endpoint仅支持访问同区域的S3桶。若账户B的S3桶在不同区域,可考虑在账户A的区域创建S3跨区域复制,将数据同步后再访问,避免跨区域公网传输成本。
- 应用无需修改:应用使用标准S3 API调用(Access Key/Secret方式),配置网关端点后会自动通过内部网络访问S3,无需任何代码改动,完全适配遗留应用需求。
内容的提问来源于stack exchange,提问作者The Unknown Dev
相关产品推荐
相关产品推荐

