- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最初我设置了一个 S3 存储桶“bucket.mydomain.com”并在我的 DNS 中使用了一个 CNAME,这样我就可以从那里提取文件,就好像它是一个子域一样。这适用于 http:
bucket.mydomain.com/image.jpg
或者像 https 一样:
s3.amazonaws.com/bucket.mydomain.com/image.jpg
此存储桶中的某些文件是公开访问的,但有些文件是“经过身份验证的读取”,因此我必须生成一个已过期的签名 URL 才能读取/下载它们。
我希望能够在 URL 中不带亚马逊名称的情况下使用 https,因此我设置了一个以 S3 存储桶为源的 CloudFront 分配。现在我可以像这样使用 https:
bucket.mydomain.com/image.jpg
我现在遇到的问题是,似乎我存储桶中的所有文件都必须公开读取,或者它们都必须经过身份验证才能读取。
如何强制将签名 URL 用于某些文件,但让其他文件公开读取?
最佳答案
it seems either all my files in the bucket have to be public read, or they all have to be authenticated read
这在某种程度上是正确的,至少在简单的配置中是这样。
CloudFront 具有称为源访问身份 (OAI) 的功能,允许它对发送到您的存储桶的请求进行身份验证。
CloudFront 还支持使用 CloudFront 签名 URL(和签名 cookie)控制查看者对您的资源的访问。
但这两个特性是相互独立的。
如果配置了 OAI,它总是向存储桶发送身份验证信息,无论对象是私有(private)的还是公共(public)的。
同样,如果您启用 Restrict Viewer Access对于缓存行为,CloudFront 将始终要求签署查看器请求,无论对象是私有(private)的还是公共(public)的(在存储桶中),因为 CloudFront 不知道。
有几个选项。
如果您的内容在逻辑上按路径分隔,解决方案很简单:创建多个缓存行为,并匹配路径模式,如 /public/*
或 /private/*
并使用单独的、适当的限制查看器访问设置来配置它们。对象在存储桶中是否公开并不重要,因为如果缓存行为不“限制查看者访问”,CloudFront 将传递对(例如)/public/*
的请求而不需要签名 URL ”默认情况下,您可以创建 25 个独特的缓存行为路径模式。
如果这不是解决方案,您可以创建两个 CloudFront 分配。一个是没有 OAI 并且没有启用限制查看者访问。此分发只能获取公共(public)对象。第二个分发将有一个 OAI,并且需要签名的 URL。您可以将它用于私有(private)对象(它也适用于公共(public)对象——但它们仍然需要签名 URL)。这里不会有价格差异,但您可能需要应对跨域问题。
或者,您可以修改您的应用程序,以便在呈现 HTML(或 API 响应,或您的链接的任何上下文)时为所有其他公共(public)内容的 URL 签名。
或者,根据您平台的架构,可能还有其他更复杂的方法可能有意义,具体取决于公共(public)和私有(private)的组合以及您是否愿意使用 Lambda@Edge 触发器在边缘添加一些智能,这可以执行诸如检查/修改正在运行的请求、查询外部逻辑和数据源(例如在 DynamoDB 中查找 session cookie)、拦截错误和生成重定向等操作。
关于amazon-s3 - S3 支持的 CloudFront 和签名 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959664/
我已经为我们的 Cloudfront 分配设置了一个备用域名,这样我们就可以从 oursite.com 提供服务。我们想禁用 ourdistid.cloudfront.net,这样我们的站点只能从一个
假设一个域名为 www.example.com 的网站托管在网站托管商(而非亚马逊)的 LAMP 服务器上。该域由 Route53 管理。 是否有可能以某种方式保留 LAMP 网络服务器上的所有设置并
我在使Cloudfront具有多个来源的工作时遇到麻烦。 我有两个起源: 起源1 小路: 默认 (*) 起源: Custom-example1.com/p 起源2 小路: ns/ 起源: Custom
TLDR:我们必须通过为来自 Lambda 函数的响应创建新的缓存行为来欺骗 CloudFront 307 重定向缓存。 你不会相信我们离实现这一目标有多近。我们在最后一步卡得太厉害了。 商业案例:
How do you set a default root object for subdirectories for a statically hosted website on Cloudfron
有人知道如何使使用友好 url 的自定义来源的根文档无效吗? 例如:example.com ? 通过 AWS Create Invalidation 对话框请求的正确对象路径是什么? 文档仅引用实际文
我正在使用带有自定义源的 CloudFront,并希望将来自 Web 应用程序的某些请求重定向到 CloudFront(客户端使用直接 URL,不能更改为基于 CloudFront 的 URL)。为了
我正在尝试在 AWS CloudFront 上上传公钥。我按如下方式生成 key ssh-keygen -t ecdsa -b 521 我也试过 ssh-keygen -b 4096 当我通过控制台上
我在 wordpress 重定向中的重定向导致域更改时遇到了一些问题。 例子:网站 - noncdn.somedomain.comCDN 网址 - www.domain.com 当我打开没有尾部斜杠的
在 CloudFront 行为设置中,“全部”是将所有请求 header 转发到源吗? Values That You Specify When You Create or Update a Dist
我们的应用程序中使用的图像是从 Amazon CloudFront 呈现的。 修改现有图像时,它不会立即反射(reflect)图像更改,因为 CloudFront 需要大约 24 小时才能更新。 作为
我想设置亚马逊云端,但是 Assets 需要在 http 和 https 上都可用。 我也想使用多个 cname。例如xyz0.cloudfront.netxyz1.cloudfront.netxyz
路径模式属性的文档并不完全详尽。 The pattern to which this cache behavior applies. For example, you can specify imag
我浏览了文档并进行了大量搜索。这些是我知道我可以使用 CloudFront 创建的签名 url 做的事情: 使用固定策略设置时间限制 监控该项目被查看的次数 我还可以为我的签名 URL 设置命中限制吗
cloudfront 是否支持 TLSv1.3 我没有看到任何文档说它在 cloudfront 和自定义来源之间支持?我强烈要求使用 TLSv1.3 最佳答案 CloudFront 现在支持 TLS
我最近才在阅读 Varnish Cache 的功能,以帮助优化我的 PHP 网站的性能。我读到了一个名为 Edge Side Includes 的功能,它似乎让我可以选择构建可以缓存在组件级别的 ht
我是部署静态站点的新手。搜索了大约一段时间的解决方案,根据我遇到的问题,我没有找到任何有用的信息。 宗旨 :我想在 CloudFront 上运行我生成的 Nuxt.js 静态站点。 问题 : 跑命令n
我正在使用 Amazon CloudFront 传送一些 HDS 文件。我有一个原始服务器,它检查 HTTP HEADER REFERER,如果不允许,它会阻止它。 问题是云前端正在删除引用 head
我正在使用 lambda@edge 通过 cloudfront 重定向我的网站。 我已将版本化 lambda arn 附加到我的云前端缓存行为及其所有 4 个事件。 当我访问我的云端端点时,它会显示
有没有办法让 Amazon CloudFront 失效(通过管理控制台),使所有匹配模式的文件失效?例如图像/*.png 语境 - 我在我的网站上为图像设置了缓存控制,但错误地在 Apache 的缓存
我是一名优秀的程序员,十分优秀!