AWS EC2在VPC内连接S3:流量路径及网关端点使用问询
AWS VPC公有子网EC2连接S3的流量路径及网关端点使用方法
未配置S3网关型VPC端点时的流量路径
在公有子网中部署的EC2实例(带有公网IP或可通过Internet Gateway访问公网),通过Boto3连接S3时,流量会走公网路径:
- 实例的S3请求会先通过Internet Gateway离开VPC,进入AWS公网网络,再通过AWS的公网链路访问S3服务。
- 虽然AWS内部对这类流量有优化(不会真正进入公网互联网),但从网络架构归属和权限要求来看,属于公网流量范畴,需要实例具备公网访问权限(如安全组允许出站到公网、路由表指向Internet Gateway)。
通过Boto3使用S3网关型VPC端点的方法
要确保流量仅在AWS内网传输,需先完成VPC端点的基础配置,Boto3客户端无需额外修改即可自动利用该端点:
前置配置要求
- 在对应VPC中创建S3网关型VPC端点,并关联到EC2所在的公有子网路由表。
- 在路由表中添加路由规则:目标为S3服务的前缀列表(
pl-xxxxxx),下一跳为网关型端点的ID(vpce-xxxxxx)。 - 确认VPC端点的访问策略允许EC2实例(或其关联的IAM角色)访问目标S3资源。
- EC2实例的IAM权限需包含对应的S3操作权限(如
s3:ListBuckets、s3:GetObject等)。
Boto3客户端使用示例
网关型端点通过路由表和DNS解析自动生效,Boto3客户端无需指定额外参数,直接使用默认配置即可:
import boto3 # 初始化S3客户端,无需手动指定endpoint_url s3_client = boto3.client('s3') # 示例:列出所有有权限访问的存储桶 bucket_list = s3_client.list_buckets() for bucket in bucket_list['Buckets']: print(f"存储桶名称: {bucket['Name']}")
流量路径验证方法
可在EC2实例上执行traceroute s3.amazonaws.com命令,若路由结果中出现vpce-xxxxxx相关的内网地址,说明流量已通过VPC端点传输。
内容的提问来源于stack exchange,提问作者Marco Evasi
相关产品推荐
相关产品推荐

