VPC内Lambda通过VPC端点无法访问API Gateway API Key问题
解决VPC内Lambda无需NAT访问API Gateway获取API Key的超时问题
针对你遇到的VPC公有子网中Lambda访问API Gateway超时的问题,以下是无需NAT Gateway的具体修复步骤:
1. 启用VPC端点的私有DNS名称
你创建的*.execute-api VPC端点如果未开启私有DNS,Lambda会尝试解析API Gateway的公网域名,导致流量走公网超时。
- 操作步骤:进入VPC控制台 → 找到目标
execute-api端点 → 编辑DNS设置 → 勾选「启用私有DNS名称」。 - 说明:开启后,Route 53会自动将API Gateway的域名解析到VPC端点的弹性网络接口(ENI),确保流量在VPC内部流转。
2. 补充Lambda安全组的出站规则
你仅配置了安全组的入站规则,但Lambda主动发起请求需要出站权限:
- 给Lambda关联的安全组添加出站规则:允许HTTPS(TCP 443)流量,目标选择VPC端点的安全组,或者直接指定VPC的CIDR范围。
- 注意:入站规则是允许外部访问Lambda,而出站规则才是Lambda对外发起请求的权限,这是最容易遗漏的配置。
3. 确认API Gateway的端点类型为「区域型」
如果你的API Gateway是边缘优化型,即使配置了VPC端点也无法通过私有网络访问,因为边缘优化型流量会先经过CloudFront全球节点:
- 操作步骤:进入API Gateway控制台 → 选择目标API → 「设置」标签页 → 查看「端点类型」,确保是「区域」。
- 若当前是边缘优化型,可修改端点类型(修改后会更换API的域名,需同步更新Lambda中的调用地址),或重新创建区域型API。
4. 验证子网路由表配置
确保公有子网的路由表中存在指向VPC端点的路由:
- 检查路由表:确认有一条目标为
pl-xxxx(execute-api服务的前缀列表)的路由,下一跳为你的VPC端点ID。 - 说明:启用私有DNS后,路由表会自动生成这条路由,但如果之前手动修改过路由表,可能需要重新确认。
5. 精简Lambda权限(可选)
你当前给Lambda角色配置的权限过于宽泛,建议仅保留必要的API Key读取权限,避免过度授权:
创建自定义权限策略并附加到Lambda角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:getApiKey", "apigateway:getApiKeys" ], "Resource": "arn:aws:apigateway:${你的区域}::/apikeys/*" } ] }
内容的提问来源于stack exchange,提问作者Jack Lee
相关产品推荐
相关产品推荐

