我在一个带有~7000个子目录的存储桶下有一个子目录。然后每个子目录可能有1-100个文件。
我需要将文件公开,但我不希望任何人能够看到子目录列表,甚至是给定目录下的文件列表。
我知道我可以将文件的ACL设置为只读,然后我想我可以将目录设置为private。但是对于这么多文件,我希望有一个更简单的解决方案吗?
答案 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,因此对于非空存储分区,这也是一种选择。