【发布时间】:2016-03-12 23:57:57
【问题描述】:
我希望能够以多种方式限制对 S3 存储桶中文件的访问。这是因为可以以不同的方式访问存储的文件。我们这样做是因为我们有 TB 的文件,所以我们不想复制存储桶。
一种访问方法是通过使用 S3 存储桶作为源的令牌化 CDN 交付。为了可以提取文件,我已设置文件的权限以允许所有人下载。使用存储桶策略,我可以限制可以获取存储桶中文件的 IP 地址。所以我将它们限制在 CDN IP 块中,这些 IP 地址之外的任何人都无法获取该文件。
另一种访问方法是使用我们的商店系统直接下载,该系统会生成 S3 时间到期的预签名 URL。
由于 CDN 拉取实际上需要文件是公开可读的,有没有办法:
首先检查有效的预签名 URL,如果请求有效,则提供文件
如果无效,回退到 IP 地址限制以防止进一步访问?
我有一个有效的 IP 限制存储桶策略正在运行,但这会消除预签名的访问权限...删除存储桶策略会修复预签名的访问权限,但文件是公开的。
【问题讨论】:
-
如果删除 IP 限制策略允许下载所有文件,则签名 URL 无法按预期工作 - 因为听起来各个对象无论如何都是公开的。他们不应该。如果操作正确,只需允许来自白名单 IP 的匿名访问,而不是拒绝来自“非”白名单 IP 的访问。
-
您能否说明您的 CDN 是 CloudFront 还是其他?原因是 CloudFront 支持对象访问身份,可以专门允许 CloudFront 访问 S3 存储桶。
-
您说 IP 限制“阻止了预签名访问”,这很奇怪——这应该是不可能的。您能否提供您创建的政策的(编辑)副本?
-
问题在于我在 IP 地址中使用了拒绝...感谢您对此的见解,Michael。我在下面列出了我的最终代码,以供将来遇到此问题的人使用。
标签: amazon-s3