启用自定义Lambda授权后API Gateway返回内部服务器错误求助
排查HTTP API Gateway自定义授权后500错误的步骤
1. 验证授权Lambda返回的策略格式与内容
HTTP API对自定义授权返回的策略有严格要求,必须确保:
- 策略版本为
2012-10-17,不能使用旧版本 Resource字段必须是HTTP API的Route ARN(格式:arn:aws:execute-api:<region>:<account-id>:<api-id>/<stage>/<method>/<route-path>),而非SQS的ARN- 必须包含
Action: "execute-api:Invoke"和Effect: "Allow"的语句 - 返回的JSON格式无语法错误(比如逗号遗漏、引号不匹配)
示例正确返回格式:
{ "principalId": "auth-user-001", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": "arn:aws:execute-api:us-east-1:123456789012:abcxyz/prod/POST/send-to-sqs" } ] } }
2. 检查API Gateway执行日志的具体错误信息
开启API Gateway的Execution Logs(在API Gateway控制台的Stage设置中配置),查看CloudWatch日志里的errorMessage字段:
- 如果是
Invalid policy document,说明授权Lambda返回的策略格式或内容不符合要求 - 如果是
AccessDenied,需确认API Gateway的执行角色是否仍持有sqs:SendMessage权限(排除授权开启后角色权限被意外覆盖的情况) - 其他错误直接根据日志提示定位问题
3. 确认授权器与Route的关联配置
- 确保Route的
AuthorizationType设置为CUSTOM,且AuthorizerId正确关联到自定义Lambda授权器 - 检查授权器的
PayloadFormatVersion是否为2.0(HTTP API默认使用2.0版本,与REST API的1.0格式不兼容)
4. 排除授权Lambda的隐性执行错误
虽然你看到授权Lambda执行完成,但需检查:
- Lambda返回的JSON是否有特殊字符或编码问题(比如中文乱码、转义错误)
- Lambda的执行超时时间是否足够(建议设置为1-2秒,避免授权过程超时导致API Gateway返回500)
5. 关于SQS权限的说明
你关闭授权时消息能正常流转,说明API Gateway的执行角色已经具备sqs:SendMessage权限,启用自定义授权后不需要额外给授权Lambda配置SQS权限——授权Lambda只负责生成允许调用API Route的策略,SQS的访问权限由API Gateway的执行角色控制。
内容的提问来源于stack exchange,提问作者PM-MC-23
相关产品推荐
相关产品推荐

