首页 > 解决方案 > Cloudfront - 如何将签名的 url 传播到所有网站请求?

问题描述

我正在使用 CloudFront 私下访问作为网站启用的 S3 存储桶。

所以我打开Restrict Viewer Access了以前创建的Trusted Key Group.

现在,当我通过 AWS CLI 创建一个签名的云端 URL 时,例如:

http://...cloudfront.net/?Expires=...&Signature=...Key-Pair-Id=...

它仅适用于我的网站(index.html)的第一个请求,因为它具有查询字符串,但任何后续请求(任何 javascript、图像)它只是返回index.html,可能是因为那些没有得到签名的标头。

有没有办法来解决这个问题?我不确定它是我在浏览器或index.html标题中配置的还是在 CloudFront 中配置的,也许是 lambda?

标签: amazon-web-servicesamazon-s3amazon-cloudfront

解决方案


您的用例很奇怪,因为作为网站启用的 S3 存储桶需要将 HTML、JS、CSS、图像等文件公开,以便您的网站正常运行。

您遇到的错误是意料之中的,因为您只签署了 S3 存储桶中的 index.html 文件。渲染您的网站所需的其他其他资源文件(如 javascript、图像、css)未签名。因此,您的网站未正确呈现。

Cloudfront 签名 URL 专门绑定到 S3 存储桶中的文件,您不能重复使用签名查询参数或 cookie 来访问其他文件。

我的建议是,如果您在 S3 中托管网站,请将存储桶公开并且不要使用 Cloudfront 签名 URL。

对于私有内容,您可以将它们放在其他存储桶中,并使用 Cloudfront 签名 URL 单独访问它们。

或者,如果您不想公开整个存储桶,您可以公开单个文件。

参考: https ://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html


推荐阅读