默认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
相关产品推荐
相关产品推荐

