是否可以通过Cloudfront将IAM角色身份验证用于API网关端点?
这是一个基本用例:
我已经能够使用无需身份验证,类似于以下设置: https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/
How do you add CloudFront in front of API Gateway
特别要注意的是不要从Cloudfront转发HOST标头...
当我在API中启用IAM身份验证时,收到以下响应:
选项:200
POST:403
{“message”:“我们计算的请求签名与 你提供的签名。检查您的AWS Secret Access Key并签名 方法。有关详细信息,请参阅服务文档。\ n \ n 此请求的规范字符串应具有 被\ n'POST \ N /测试/创建\ n \ naccept:应用/ JSON \ ncontent-类型:application / JSON \ n主机:*****执行-api.ap - **** - 2.amazonaws .COM \ NX-AMZ-日期:20170328T044253Z \ n \ naccept;内容类型;主机; X-AMZ-日期\ na57656a9def890d9de2b637789f7e5917f4b2823765ae0122087d08f89a97380' \ n \ n该 字符串到标志应该有 一直\ n'AWS4-HMAC-SHA256 \ n20170328T044253Z \ n20170328 / AP-东南-2 /执行的API / aws4_request \ ncae7fd6b4cabd593ad2ec6ce7091c94dc8cba306e81da95d567873eea8f981a5' \ n“个}
Canonical String中的主机是API网关的主机......
答案 0 :(得分:2)
如评论中所述,由于更改了HOST标头,您将遇到困难。理论上,理论上将API网关exceute-api
域的请求作为HOST
的值进行签名应该有效,假设CloudFront没有以任何其他方式更改有效负载。
答案 1 :(得分:0)
这是一个很难调试的人,我在这里写了一个博客,详细介绍了该解决方案,希望对其他人有帮助。感谢@Bob将我带入正确的轨道:https://www.rehanvdm.com/serverless/cloudfront-reverse-proxy-api-gateway-to-prevent-cors/index.html