You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

默认VPC内Lambda访问AWS S3连接问题求助

解决Lambda在VPC内无法访问S3但能连接EC2的问题

我来帮你一步步排查这个问题,这种情况通常是VPC网络配置里的几个关键点没到位,咱们逐个来确认:

1. 先确认NAT网关的配置是否真的正确

你提到加了NAT网关但没效果,先核对这几个核心点:

  • NAT网关必须部署在公有子网里(也就是这个子网的路由表有指向互联网网关IGW的路由),而你的Lambda所在子网得是私有子网,私有子网的路由表需要把0.0.0.0/0的流量全部指向这个NAT网关。
  • 检查NAT网关是否绑定了弹性公网IP(EIP),状态显示为"可用"。如果EIP没绑定或者NAT网关状态异常,那肯定没法转发外网流量。

2. 验证Lambda所在子网的路由表

登录VPC控制台,找到Lambda对应子网的路由表:

  • 确认存在一条路由规则:0.0.0.0/0 -> 你的NAT网关ID,而不是直接指向IGW(如果是指向IGW那就是公有子网,但Lambda在公有子网里默认没有公网IP,还是需要NAT来转发流量)。
  • 你说同子网的EC2能上网,那EC2要么是分配了公网IP,要么是依赖了NAT网关。如果是后者,那Lambda没理由不行,大概率是路由表配置漏了或者错了。

3. 更优且省钱的方案:改用S3 VPC端点(推荐)

其实完全不需要NAT网关就能让Lambda访问S3,而且更安全、成本更低——创建S3的网关型VPC端点:

  • 登录VPC控制台,进入"端点"页面创建端点,选择S3服务,关联你的VPC和Lambda所在的子网。
  • 创建时可以勾选自动给子网路由表添加指向S3端点的路由,这样Lambda访问S3的流量会直接走VPC内部通道,不用绕公网,速度更快还省NAT网关的费用。
  • 注意:S3网关端点不需要配置安全组,但要确保Lambda的执行角色有对应的S3操作权限,同时端点的策略允许你要执行的S3动作(比如s3:PutObject)。

4. 检查安全组和网络ACL的规则

  • Lambda的安全组:要允许出站流量到S3(可以直接放行0.0.0.0/0的443端口,或者如果用VPC端点的话,放行到S3端点的IP段)。
  • 网络ACL:因为是无状态的,所以入站和出站都要允许相关流量——比如出站允许443端口到S3的IP范围,入站允许对应的响应流量(比如1024-65535端口的TCP流量)。

最后核对Lambda的弹性网络接口(ENI)状态

Lambda在VPC里运行时会自动创建弹性网络接口(ENI),你可以在EC2控制台的"网络接口"里找到对应的ENI,检查它的状态是否为"可用",有没有分配到私有IP,以及关联的安全组是否正确。

按照这些步骤排查下来,应该能解决你的问题。优先试试S3 VPC端点的方案,比NAT网关更适配这种场景。

内容的提问来源于stack exchange,提问作者Sunaina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:35:04