【问题标题】:Serving a S3 bucket and an API Gateway through CloudFront通过 CloudFront 提供 S3 存储桶和 API 网关
【发布时间】:2015-12-22 15:31:38
【问题描述】:

我想通过以下网址从 S3 存储桶为 Web 应用程序的前端提供服务:www.acme.com。

同时,我希望从 API 网关阶段(lambda 函数在后面运行)在此 url:www.acme.com/api(我没有api.acme.com url 以避免不得不处理违反同源政策)。

此时,我可以设置 Cloudfront 来为 S3 存储桶或 API Gateway 阶段提供服务,但不能一起使用。

我尝试将两者声明为资源(首先是存储桶,然后是 API 网关)和两个行为路径(存储桶的默认路径和网关的第二个 /api)。存储桶服务良好,但 GET 到 www.acme.com/api/users 会导致:

{"message":"Missing Authentication Token"}

感谢您提供有关如何解决此问题的所有线索。

【问题讨论】:

  • 您是否在 CloudFront 中配置了源以将所有必要的标头转发到 API Gateway 源? docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… ...推测,您可能不配置 CloudFront 以转发 Host 标头。
  • 我都尝试了:在行为中将转发标题字段设置为全部,也设置为无。没有任何效果,迈克尔。
  • 我对@9​​87654322@ 很感兴趣,所以我希望这个周末能玩上它。在此期间,我会看看是否可以尝试复制您的设置并看看我想出了什么。您的 API-GW 使用什么来进行访问控制/身份验证? API令牌?我是?公开/无?还有什么?它是否需要某些标头?
  • 哦...您没有在 CloudFront 中设置 origin path,是吗?如果你这样做了,那可能是错误的。如果您将其设置为/api,那么您的请求将被转发为/api/api/users,并且此消息虽然晦涩难懂,但可以预期。不要与path pattern 混淆,您当然会需要它。
  • API-GW 是公开的。我都尝试了,设置而不是设置原始路径。我还尝试了两种路径模式 /dev/* 和 dev/* (不带斜线)。我可以在 API GW 前使用 cloudFront 的唯一方法是直接作为默认行为。看:d2xj67tzdts77c.cloudfront.net/users/list

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


【解决方案1】:

我的错:我在 Origin 中将 Origin Path 设置为 /api,在 Behavior 中将 Path Pattern 设置为 api/*。我不知道为什么,但我假设 Behavior 中的设置 api/* 会在 url 路径中剪切“api/”。实际上,通过这种设置,CF 会路由到 API GW 中不存在的 url (/api/api/...)。

这就是为什么我得到了一个:{"message":"Missing Authentication Token"}。

结论:如果您在网关中使用多个阶段,则该阶段将是您的 url 路径的基础,您不应将 Origin Path 留空。

【讨论】:

  • 谢谢,我有一个关于此类设置收费的问题:您是否需要为 CloudFront 和 APIGW 的带宽和请求支付两次费用,还是只是 API 网关费用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2019-07-30
  • 2021-01-25
  • 2019-04-13
  • 2019-05-21
相关资源
最近更新 更多