如何配置 amazon cloudfront 以阻止某些 S3 存储桶文件访问?

Ran*_*iev 2 amazon-s3 amazon-web-services amazon-cloudfront

在 S3 上,我们将所有文件设为私有。用户无法通过 S3 链接加载任何文件。但它们都是通过cloudfront链接公开的。

如何限制对 ./restricted.txt 的访问?(只有使用签名 URL 链接的用户才能通过 cloudfront 链接看到该文件),./not_restricted.txt 必须同时公开。

我是怎么做到的。

我在 s3 上创建了 /public 和 /private 文件夹,分隔了我的私有/公共文件,创建了指向 /public 的 cloudfront 源。因此,/public 文件夹中的所有 S3 文件都是公共的,我可以使用不带公共前缀 /img1.jpg 的链接加载它们,而不是 /public/img1.jpg,因为 cloudfront 将 /public 视为根文件夹。

现在,我位于 /private 或 /public 文件夹上方任何其他位置的所有文件通过 S3 和 cloudfront 链接都是私有的。

但我不知道如何为具有 cloudfront 路径的 /private/restricted.txt 文件创建签名 URL。我可以创建使用 S3 路径的签名 url,但我需要有 cloudfront 链接。

提前致谢。

小智 7

CloudFront 中有“缓存行为”的概念。基于 URL 路径,您可以修改缓存行为,包括使用签名 URL/Cookie 的要求。

如果我理解你想要:

  • 维护您的私有 S3 存储桶
  • 通过 CloudFront (/public) 维护一些公共路径
  • 拥有通过 CloudFront 的私有路径 (/private)

只需在 CloudFront 发行版中添加新的缓存行为并将其设置Restrict Viewer Access (Use Signed URLs or Signed Cookies)为“是”即可完成此操作。例如:

CloudFront 缓存策略

所以重申一下,实现这一目标的最简单方法是

  • 在 S3 和 CloudFront 之间使用 OAI
  • 有一个 CloudFront 分配指向您的 S3 存储桶(根,而不是 /public)
  • 创建一个新的缓存行为,为 /private 启用签名 URL

如果这不能回答您的问题,例如,如果您需要维护路径并且无法在 URL 架构本身中使用 /public 和 /private,请通过评论告诉我,我可以尝试详细说明。谢谢!