创建具有不同权限的S3存储桶文件夹

时间:2018-06-22 21:53:14

标签: amazon-web-services amazon-s3

我目前有一个用于提供静态文件的小型Web服务器,该服务器可以执行以下操作:

因此,从本质上讲,/ dl /是公共文件的存储库,而/ dl2 /是私有文件的存储库。但是,将此行为转换为S3似乎并不直接。目前,我的政策如下:

{
    "Version": "2012-10-17",
    "Id": "StaticPolicy01",
    "Statement": [
        {
            "Sid": "DLALlowPolicy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::static.spookyinternet.com/dl/*"
        }
    ]
}

但是,我找不到有关如何进行设置的任何具体文档。如何配置S3存储桶使其具有相同的行为?

编辑:一些其他信息(如果适用): 最终,它将使用我的个人域名坐在一个Cloudfront实例后面。

1 个答案:

答案 0 :(得分:1)

您的愿望似乎是:

  • 可以列出的dl目录,所有文件都可以访问
  • 无法列出 dl2目录,但是如果有人知道文件名,则可以访问所有文件

首先,这是一个非常差的安全性设计。仅由于某人无法列出dl2目录并不能确保您的文件安全。任何知道文件名的人(或可以猜测文件名的人)都可以访问这些文件。 Security through obscurity的安全性不是很好。

第二,请注意,权限没有放置在文件夹上。相反,存储桶策略(例如您列出的策略)可以基于路径授予权限,这实际上与在文件夹级别授予权限相同。

此外,请注意,Amazon S3不是传统的Web服务器。它是一个对象存储系统,还可以通过HTTP / S调用提供对对象的访问。因此,它无法执行“在/ dl /中给出所有可用文件的目录列表”之类的操作。 (它可以提供存储桶中所有文件的XML列表,但是您通常不想这样做。)

您上面显示的存储桶策略可以满足您授予对dl中所有文件的访问权限的愿望。如果您还希望授予对dl2中所有文件的访问权限(从安全角度考虑这是不好的),只需将其添加到策略中即可,例如:

"Resource": ["arn:aws:s3:::static.spookyinternet.com/dl/*", 
             "arn:aws:s3:::static.spookyinternet.com/dl2/*"]

S3无法满足您在dl中列出文件的愿望。您可以选择上传默认的index.htm文件并通过static website sharing进行投放,但是您需要一个应用程序以使列表始终保持最新。

因此,在一个简单的层次上,存储桶策略可以满足您的所有需求(列出dl的能力除外)。

但是,您可能会问,做事的更好方法是什么?我很高兴你问!

  • 授予公众对dl的访问权限
  • 制作一个网页,列出dl中的文件并链接到文件
  • 当您要提供私有文件时,请创建一个用户必须进行身份验证的应用程序。应用程序将验证其身份,确定是否允许它们访问文件,然后生成一个Amazon S3 Pre-Signed URL来授予对对象的时间限制访问。时间到期后,URL将不再起作用。因此,文件将保持私有状态,但是特殊的URL会授予临时访问权限。