Lambda多HTTP方法处理EC2:PUT/DELETE报认证缺失令牌问题
排查PUT/DELETE接口「Missing Authentication Token」问题的步骤
1. 核对Serverless.yml的API Gateway配置
- 确认PUT/DELETE方法的
authorizationType和GET/POST保持一致。如果GET/POST是NONE(无认证),但PUT/DELETE误设为AWS_IAM或其他认证类型,就会触发该错误。
错误配置示例:functions: updateEc2: handler: handler.update events: - http: path: ec2/{id} method: put authorizer: aws_iam # 与GET/POST的认证配置不一致 - 检查PUT/DELETE方法是否遗漏
cors配置,跨域配置缺失可能导致请求被拦截,表现为认证错误。确保所有方法开启cors:http: path: ec2/{id} method: put cors: true
2. 验证请求路径与HTTP方法的匹配性
- 确认curl调用PUT/DELETE时的路径和Serverless.yml定义完全一致。比如GET是
/ec2,PUT可能需要/ec2/{instance-id},路径错误(如缺少实例ID)会让API Gateway返回403认证错误而非404。
错误调用示例:curl -X PUT https://xxx.execute-api.us-east-1.amazonaws.com/dev/ec2 # 缺少实例ID参数 - 检查HTTP方法是否正确发送,部分工具或脚本可能误将PUT转为POST,导致API Gateway无法匹配对应方法,返回认证错误。
3. 检查Lambda触发与API Gateway集成
- 登录AWS控制台的API Gateway页面,查看PUT/DELETE方法的集成请求是否正确关联到对应Lambda函数。集成配置错误会导致API Gateway拒绝请求并返回认证类错误。
- 确认API Gateway的阶段部署包含最新的PUT/DELETE方法配置,修改Serverless.yml后未重新部署会导致线上路由规则未更新。
4. 排查IAM权限(若启用认证)
- 如果PUT/DELETE确实需要IAM认证,检查curl调用时是否携带正确的AWS签名。比如用
aws-cli调用需配置正确凭证,或curl请求包含Authorization头。
正确调用示例(用aws-cli生成签名):aws apigateway test-invoke-method --rest-api-id xxx --resource-id yyy --http-method PUT --path-with-query-string "/ec2/i-123456" --body '{"instanceType": "t2.medium"}'
5. 查看API Gateway日志定位细节
- 开启API Gateway访问日志,查看具体错误原因。在Serverless.yml中添加日志配置:
部署后到CloudWatch日志组查看PUT/DELETE请求的日志,日志会包含认证类型不匹配、路径不匹配等具体错误信息。provider: apiGateway: metrics: true logging: level: INFO fullExecutionData: true
内容的提问来源于stack exchange,提问作者Liz Riv
相关产品推荐
相关产品推荐

