【发布时间】: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标头。 -
我都尝试了:在行为中将转发标题字段设置为全部,也设置为无。没有任何效果,迈克尔。
-
我对@987654322@ 很感兴趣,所以我希望这个周末能玩上它。在此期间,我会看看是否可以尝试复制您的设置并看看我想出了什么。您的 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