S3公共只读文件,但私有目录

时间:2015-10-08 19:30:01

标签: amazon-web-services amazon-s3

我在一个带有~7000个子目录的存储桶下有一个子目录。然后每个子目录可能有1-100个文件。

我需要将文件公开,但我不希望任何人能够看到子目录列表,甚至是给定目录下的文件列表。

我知道我可以将文件的ACL设置为只读,然后我想我可以将目录设置为private。但是对于这么多文件,我希望有一个更简单的解决方案吗?

3 个答案:

答案 0 :(得分:9)

要允许每个人获取对象,但不允许任何人列出对象,您可以应用存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::mybucket/myfolder1/*",
                "arn:aws:s3:::mybucket/myfolder2/*"
            ]
        }
    ]
}

请注意,发现对象网址的任何人都可以检索该对象。

答案 1 :(得分:0)

简短的回答是,你不需要做任何事情。 只需将您的存储桶公开,并提供指向各个文件的链接。

S3实际上没有目录和文件。这只是一个关键 - >对象映射。 "目录"只是一个帮助人们的惯例,但内部却没有结构。

2个场景:

答案 2 :(得分:0)

对于此问题仍在使用空存储桶的用户,对我有用的是从“公共访问配置”选项卡中允许该存储桶的公共ACL,然后在上载该存储桶时传递属性{ ACL: "public-read" }使用SDK的上载方法添加文件。这样,新文件具有公共链接,但是存储桶仍然受到限制。糟糕的是,先前的文件仍然没有该公共读取的ACL。该文档说,您可以批量分配ACL,因此对于非空存储分区,这也是一种选择。