是否可以通过Cloudfront对API网关进行IAM身份验证?

时间:2017-03-28 04:59:18

标签: amazon-web-services aws-api-gateway

是否可以通过Cloudfront将IAM角色身份验证用于API网关端点?

这是一个基本用例:

  • / api - > API网关
  • / * - > S3 HTML / Javascript

我已经能够使用无需身份验证,类似于以下设置: 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网关的主机......

2 个答案:

答案 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