对于Kinesis流,我使用AWS API Gateway创建了代理API。我添加了使用python Lambda作为代理的自定义授权者。在发布lambda函数和部署API之后,我能够使用Gateway Test功能成功测试API。我可以在cloudwatch中看到日志,其中包含来自自定义身份验证lambda函数的详细打印信息。身份验证成功后,API网关将记录推送到我的Kinesis流中。
但是,当我从Chrome Postman客户端调用相同的API时,出现500个内部服务器错误,响应标头包括X-Cache→来自Cloudfront的错误,x-amzn-ErrorType→AuthorizerConfigurationException
Lambda auth函数返回允许对我的API执行请求的策略。返回的政策文件为:
{ “ policyDocument”:{ “ Version”:“ 2012-10-17”, “陈述”: [ { “ Action”:“ execute-api:Invoke”, “资源”:[ “ arn:aws:execute-api:us-east-1:1234567:myapiId / staging / POST / *” ], “效果”:“允许” } ] }, “ principalId”:“ Foo” }
为什么Chrome或curl无法使请求失败,但是API Gateway可以正常执行相同的API测试?
找出导致问题的原因。从python lambda函数,我正在返回一个json字符串实例。相反,它应该是json对象。奇怪的是,当我从API网关的“测试”功能测试API时,相同的lambda函数没有出错。但是当从互联网(curl或chrome)调用API时,它失败了。
#return policy_string ... this is incorrect.
return json.loads(policy_string)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句