gpt4 book ai didi

amazon-s3 - S3 支持的 CloudFront 和签名 URL

转载 作者:行者123 更新时间:2023-12-04 17:42:10 25 4
gpt4 key购买 nike

最初我设置了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com