amazon-web-services - 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?
解决方案
您的用例很奇怪,因为作为网站启用的 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
推荐阅读
- javascript - 显示错误 - 'TypeError: 无法读取属性'comments' of null'
- arduino - 从 ESP32 上的 NFC 卡获取 UID
- r - ggOceanmaps 中的限制和投影问题
- sql - 在sql中查找两行之间的差异
- cdi - UnsatisfiedResolutionException - Quarkus 扩展中的 CDI bean
- xamarin.forms - okta IDP 预填充用户名
- jenkins - 如何从脚本转换为声明式管道
- c# - 为什么 Finder Sync 扩展在调试配置中工作而不是在发布配置中工作?
- flutter - 如何将 LinearProgressIndicator 添加到 AlertDialog 的顶部
- nginx - 在 GKE 上的 nginx-ingress 中禁用 TLS 1.0 和 TLS 1.1