Lambda绑定VPC后无法调用跨账户API Gateway端点
Lambda绑定VPC后调用跨账户API Gateway报403问题排查与解决
已知场景
- Lambda未绑定VPC时,可正常调用跨账户的API Gateway(无自定义域名,调用地址:
https://*******.execute-api.ap-south-1.amazonaws.com:443/abc) - 绑定VPC后:
- 能正常访问
https://google.com及其他外部URL,NAT网关、私有子网关联的安全组出站规则配置有效 - 仅目标跨账户API Gateway调用返回
403 Forbidden - Postman及非VPC环境下调用该API Gateway均正常
- 能正常访问
核心原因分析
问题核心是目标API Gateway的资源策略或访问配置限制了来自Lambda所在VPC的请求——即使NAT网关能正常访问其他外部地址,但目标API的访问控制规则未放行Lambda的出口IP或关联VPC。
排查与解决步骤
1. 检查目标API Gateway的资源策略
登录目标AWS账户的API Gateway控制台,查看目标API的资源策略:
- 确认策略中是否包含允许Lambda出口IP(即NAT网关的公网IP)访问的规则
- 若API Gateway配置了私有访问(仅允许VPC内访问),需确认策略是否允许当前Lambda所在VPC的CIDR范围或对应的VPC端点访问
示例允许特定NAT IP的资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:ap-south-1:目标账户ID:目标API ID/*/*/*", "Condition": { "IpAddress": { "aws:SourceIp": ["NAT网关公网IP/32"] } } } ] }
2. 确认Lambda的出口IP
在Lambda中添加临时代码,调用外部IP查询接口获取当前执行环境的出口IP(即NAT网关的公网IP),确保该IP已被目标API Gateway的资源策略允许。
3. 检查API Gateway的访问类型
- 若目标API Gateway设置为私有,需在Lambda所在VPC中创建API Gateway的VPC端点(接口类型),并确保目标API的资源策略允许该VPC端点的访问
- 若API Gateway是公网类型,只需确保NAT网关的公网IP在资源策略的允许列表中即可
4. 验证IAM权限(若API使用IAM认证)
如果目标API Gateway启用了IAM认证,需确认:
- Lambda执行角色拥有
execute-api:Invoke权限,且资源范围包含目标API的ARN - 目标API Gateway的资源策略允许该Lambda角色的ARN访问
内容的提问来源于stack exchange,提问作者HMT
相关产品推荐
相关产品推荐

