Lambda调用API Gateway返回Forbidden问题排查求助
问题排查:VPC内Lambda调用API Gateway返回Forbidden
问题背景
- 已通过API Gateway区域终端节点将Lambda A以公开API形式对外暴露,且创建了对应API密钥
- 本地桌面可正常调用该API,但同处于具备互联网访问权限VPC内的Lambda B调用时返回
{'message':'forbidden'} - 尝试过
x-api-key、api-key等不同请求头传递API密钥,问题仍未解决
Lambda B调用代码
import requests import psycopg2 import time from datetime import datetime import uuid import json def lambda_handler(event, context): url = 'https://xxx.execute-api.ap-south-1.amazonaws.com/v1' myinp = { "s3url": "s3://xxxx-aws-dev-xxx/xxx/xxx.jpg", "sourcename":"xxx" } Api_key = "xxxCJnl97g5hfke85jmkG1a2F9uS4ZplaJxLjxxx" header = {"X-Api-Key" : Api_key} x = requests.post(url, json = myinp, headers=header).json() print(x)
调用响应
{'message':'forbidden'}
排查方向
API密钥与阶段关联检查
- 确认API密钥已绑定到API Gateway对应阶段(Stage),且该阶段已启用API密钥验证
- 检查API密钥状态是否为
Enabled,未被禁用或过期
VPC网络配置验证
- 确认Lambda B所在VPC的NAT网关/互联网网关正常转发HTTPS流量
- 检查Lambda B的安全组是否允许出站443端口访问
- 在Lambda B代码中添加测试逻辑,验证公网访问与域名解析:
# 测试公网连通性 print(requests.get('https://api.ipify.org').text) # 测试API Gateway域名解析 import socket print(socket.gethostbyname('xxx.execute-api.ap-south-1.amazonaws.com'))
请求头与WAF规则检查
- 确保
X-Api-Key请求头拼写完全正确(大小写敏感),可在代码中打印完整请求头确认未被篡改 - 检查API Gateway关联的WAF规则,是否拦截了VPC内Lambda的请求(如IP限制、频率阈值等)
- 确保
API Gateway资源策略与方法配置
- 确认API Gateway的资源策略未限制Lambda B所在VPC的IP范围或执行角色
- 检查对应POST方法是否已关联到要求API密钥的使用计划,且阶段设置中开启了"API Key Required"选项
内容的提问来源于stack exchange,提问作者Nitin G
相关产品推荐
相关产品推荐

