源访问身份 (OAI) 与 CloudFront 签名 URL 之间的关系

Relationship between Origin Access Identities (OAIs) and CloudFront Signed URLs

所以我一直在关注 CloudFront 和 S3 上的指南,但我觉得我仍然缺少原始访问身份 (OAI) 和 CloudFront 签名 URL 之间关系的核心信息。

我想要的:一个私有 CDN,用于托管音频片段(长度为几秒)和低分辨率图像。我只希望在从特定域(即网络应用程序所在的域)和可能是测试服务器请求时可以访问这些文件,这样我的网络应用程序就可以获取这些文件,但其他任何人都无法访问它们没有通过网络应用程序。

我感到困惑的是:我对 CloudFront 原始访问身份 (OAI) 和签名 CloudFront 之间的关系(如果有的话)感到困惑 URLs。

我目前已经为我的 CloudFront 分配创建了一个私有 S3 存储桶,一个 OAI,并通过 CloudFront 为图像生成了签名 URL。但我看不出这些东西是如何相关的以及它们如何阻止其他人访问 CDN 文件(例如,如果他们能够检查一个元素并获得签名 URL)。

确保签名的 URL 快速过期的重点是什么?如果是这样,OAI 如何在其中发挥作用?这是在 CORS 中设置的吗?

添加指向您的 CloudFront 域的新 CNAME 条目。此条目应与 CloudFront 控制台中“备用域名”中输入的条目相匹配。

默认情况下,CloudFront 会自动生成域名(例如 d3i29vunzqzxrt.cloudfront.net),但您可以定义备用域名。

您还可以保护 Cloudfront Serving Private Content through CloudFront

原始访问身份是 CloudFront 中的一个实体,它 可以通过存储桶策略授权访问存储桶中的objects。当 CloudFront 使用原始访问身份访问存储桶中的内容时,CloudFront 使用 OAI 的凭证生成一个签名请求,并将该请求发送到存储桶以获取内容。查看者无法访问此签名。

此处使用的词 "origin" 的含义不应与其他上下文中使用的词 "origin" 混淆,例如 CORS,其中 "origin" 指的是站点允许访问内容。

原始访问标识与仅限于包含特定 OriginReferer header.[ 的请求的访问无关=14=]

一旦签名的 URL 被 CloudFront 验证为匹配与您的 AWS 账户(或您指定为可信签名者的另一个账户)关联的 CloudFront 签名密钥,object 将从存储桶,使用在存储桶中授予原始访问身份的任何权限。

Is the whole point to make sure the signed url's expire quickly?

基本上,是的。

通过尝试根据发现 link 的站点限制访问来对请求进行身份验证和授权 不是 可行的安全措施。它可以防止来自其他站点的 hot-linking,但无法防止任何人伪造请求 header。击败这样的措施是微不足道的。

相比之下,带符号的 URL 对计算不可行点具有极强的防篡改能力。

签名的 URL 不仅在到期前有效,而且如果您使用 custom policy.一旦签署,对 URL 的任何更改,包括政策声明,都会使整个 URL 无法使用。

OAI 仅与 CloudFront 签名的 URLs 间接连接 -- 它们可以单独使用,也可以一起使用 -- 但如果没有 OAI,CloudFront 无法证明它有权请求 objects 来自您的存储桶,因此存储桶需要是 public,这将破坏在 CloudFront 上签名 URLs 的大部分目的。