两个AWS API Gateway资源共用同一Lambda授权器异常求助
排查方案
1. 核对第二个资源的授权器绑定配置
- 确认第二个API资源的方法请求中,“授权”选项确实选中了目标Lambda授权器,而非“NONE”或其他授权方式。
- 检查两个资源的授权器调用模式一致:如果是令牌验证,确保都设置为“TOKEN”模式,避免第二个资源误设为“REQUEST”模式且参数提取规则错误。
- 临时关闭授权器缓存测试:若授权器开启了缓存,检查缓存键是否依赖第一个资源独有的请求参数/头,导致第二个资源请求命中无效缓存。关闭缓存后重新验证是否还能绕过授权。
2. 检查阶段配置的授权覆盖
进入API Gateway的“阶段”页面,确认当前部署阶段没有对第二个资源设置授权覆盖(Override Authorization)——阶段级配置会直接覆盖资源级的授权规则,若被强制设为允许访问,就会跳过授权器验证。
3. 排查Lambda授权器的逻辑与日志
- 给授权器添加详细日志:在代码中记录每个请求的资源路径、HTTP方法、令牌内容,确认第二个资源的请求是否真的触发了授权器。如果授权器没收到请求,问题出在API Gateway配置。
- 验证授权器返回的IAM策略:检查策略中是否错误地给第二个资源的ARN授予了
Allow权限。比如:
{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", // 此处应为Deny "Resource": "arn:aws:execute-api:us-east-1:1234567890:abc123/prod/GET/second-resource" } ] } }
- 检查授权器是否有路径相关的条件逻辑:比如代码中是否对特定路径做了跳过验证的处理,导致第二个资源被放行。
4. 确认资源路径与策略ARN的匹配性
- 核对授权器策略中的资源ARN是否覆盖了第二个资源的路径:如果策略用了精确路径,而第二个资源带路径参数(如
/second-resource/{id}),需确保策略中包含对应的ARN(比如用通配符/second-resource/*)。 - 检查第二个资源的方法配置:如果用了
ANY方法,需确认授权器策略对所有HTTP方法(GET/POST等)都设置了拒绝,避免遗漏。
5. 独立测试Lambda授权器
用AWS CLI直接模拟第二个资源的请求调用授权器,查看返回策略:
aws lambda invoke --function-name your-authorizer-lambda-name --payload '{ "type": "TOKEN", "authorizationToken": "your-test-token", "methodArn": "arn:aws:execute-api:your-region:your-account-id:your-api-id/your-stage/GET/second-resource" }' output.json
如果返回的策略是Allow,问题出在授权器代码;如果是Deny,则问题在API Gateway的配置环节。
内容的提问来源于stack exchange,提问作者sruthi ch
相关产品推荐
相关产品推荐

