在不暴露来源的情况下将 AWS API 网关与 Cloud Front 集成

Integrating AWS API Gateway with Cloud Front without exposing origin

我正在从事一个采用无服务器架构的项目。

我发现尽管 AWS 说 API 网关可以保护您的资源免受 DDoS 攻击。

但是如果有恶意用户不断向您的服务发送垃圾邮件,

API 网关无法提供适当的方式来处理此类问题。

所以我开始思考我能做什么:

我在 Whosebug 上找到了这个 post:

然后为了设置WAF,

我在 API 网关前面放置了一个 Cloud Front 分布。

我意识到这可能是一个变通解决方案,但真的是这样吗?

这是我发现的问题:

  1. 我有一个云前端分发,它的域名是cdn.net

  2. 我将原始路径设置为我的 api 网关:https://sampleagigw.amazon.com,并将路径设置为其阶段 dev.

  3. 当我调用 GET http://cdn.net/posts 时,它将 return 一个我期望的结果。

  4. 然后如果你把 http://cdn.net/posts 放在浏览器上,它比你想象的更让你惊讶,它也暴露了 API 网关的 url 在 url 浏览器栏:https://sampleagigw.amazon.com/dev/posts

这意味着所有WAF和Cloud front的工作都是没有意义的。

我是不是理解错了什么?

检查您的附加 CloudFront 分配 (cdn.net) 上的 "Viewer Protocol Policy" 并确保将其设置为 "Redirect HTTP to HTTPS" 或 "HTTPS Only"。或者,您可以编辑您的来源并将 "Origin Protocol Policy" 设置为 "HTTPS Only"。

如果您将 "Viewer Protocol Policy" 设置为 "HTTP and HTTPS" 并将 "Origin Protocol Policy" 设置为 "Match Viewer",那么我可以看到您将如何获得此结果。您在浏览器中输入 http://cdn.net/posts,然后 cdn.net 分发尝试连接到 http://sampleagigw.amazon.com(没有 https/tls/ssl)。这将转到由 API 网关创建的 CloudFront 分配,该网关设置为 "Redirect HTTP to HTTPS"。由于它收到 HTTP 请求,它 returns 302 重定向到 http://sampleagigw.amazon.com。这是由 cdn.net 分发返回给浏览器的。然后浏览器跟随 302 重定向,在浏览器的 URL 栏中留下 http://sampleagigw.amazon.com URL。