You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现EC2与S3通信走VPC网关端点、其余流量走NAT网关的选择性路由控制

如何实现EC2与S3通信走VPC网关端点、其余流量走NAT网关的选择性路由控制

嗨,这个问题其实是VPC路由配置里的典型场景,我来给你一步步讲清楚怎么实现,以及背后的逻辑:

首先,先明确默认的流量走向逻辑

当你同时配置了S3网关端点和NAT网关时,AWS的路由表是按最长前缀匹配原则来决定流量走向的:

  • S3网关端点对应的路由条目是针对S3服务的具体IP前缀(AWS用「前缀列表」帮你汇总了这些IP,比如pl-xxxx对应你当前区域的S3所有IP段)
  • NAT网关对应的通常是0.0.0.0/0(匹配所有未被更具体路由覆盖的流量)

所以只要你把S3的前缀路由正确添加到EC2所在子网的路由表,EC2到S3的流量会自动优先走S3网关端点,剩下的所有流量都会走NAT网关——完全符合你想要的效果。

具体配置步骤(手把手教你)

1. 创建S3 VPC网关端点(如果还没创建)

  • 打开VPC控制台,找到左侧菜单的「端点」,点击「创建端点」
  • 端点类型选「网关」,然后在服务列表里找到com.amazonaws.<你的区域>.s3(比如com.amazonaws.us-east-1.s3
  • 选择你要关联的VPC,然后下一步,关联到EC2所在子网对应的路由表(这里可以先选,后面也能手动加)
  • 完成创建,记下你的端点ID(比如vpce-1234abcd

2. 配置子网的路由表(关键步骤)

找到EC2实例所在子网绑定的路由表,添加一条新的路由条目:

  • 目标:选择S3对应的前缀列表(在「前缀列表」里找com.amazonaws.<你的区域>.s3对应的ID,比如pl-0570a1d14aEXAMPLE
  • 目标类型:前缀列表
  • 下一跳:选择你刚创建的S3网关端点ID

同时,确保路由表里已经存在NAT网关的路由:

  • 目标是0.0.0.0/0,下一跳是你的NAT网关ID(比如nat-9876dcba

3. 验证配置是否生效

你可以在EC2实例上做简单测试:

  • traceroute s3.<你的区域>.amazonaws.com,看路径里不会经过NAT网关的IP,而是直接走VPC内部的端点
  • 查看VPC端点的监控指标(比如「数据包入/出」),当你访问S3时,这些指标会有增长
  • 同时看NAT网关的监控,S3相关的流量会明显减少(因为都走端点了)

几个需要注意的细节

  • 跨区域S3访问:S3网关端点只能访问同区域的S3桶,如果你要访问其他区域的S3,流量还是会走NAT网关,这是正常的
  • S3桶权限:记得在S3桶的访问控制策略里,允许来自你这个VPC端点的访问,不然EC2可能会收到权限拒绝的错误(可以添加一个条件,限制aws:SourceVpc为你的VPC ID)
  • 路由表关联:一定要确保EC2所在的子网绑定的是你修改过的路由表,不然配置不会生效

这样配置后,就完美实现了你要的效果:EC2到S3的流量走VPC网关端点省钱,其他所有流量(比如访问公网其他服务)走NAT网关。

备注:内容来源于stack exchange,提问作者santhu

火山引擎 最新活动