我的s3存储桶上有大量文件并添加存储桶策略以使它们全部公开。 现在,当我浏览根目录时,它会列出整个目录(或前1000个项目)。 如何防止目录浏览。
答案 0 :(得分:73)
应该注意的是,将index.html文件添加到存储桶中绝对没有任何意义。浏览存储桶根目录时,此文件将与所有其他文件一起列出。
此外,在存储桶上设置访问级别以便“每个人”都无法读取,这意味着您上传到存储桶的每个新文件都需要将其权限设置为“每个人”才能浏览。如果您要定期添加文件,这是不切实际的。
最佳解决方案是首先在存储桶上设置访问级别以拒绝“每个人”的读访问权限,然后创建一个存储桶策略,允许每个人读取存储桶中的内容。这样,没有人能够列出您的存储桶的内容,但是您添加的任何新文件都将被具有该文件链接的每个人读取。
以下是存储桶策略的外观。用你的水桶名称替换'my_bucket',你很高兴。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my_bucket/*"
}
]
}
答案 1 :(得分:5)
您可以单独在目录和单个文件上设置ACL,不要对目录赋予读取权限,但允许单个文件使用。有许多工具可以帮助解决这个问题,包括bucket explorer或s3 fox。
答案 2 :(得分:2)
据我所知,不应再需要一个存储桶策略(当问题的答案首次发布时,它可能已经回来了。)
现在,只需将您的存储桶设置为公共访问权限,但关闭“列出对象”权限。
答案 3 :(得分:1)
答案 4 :(得分:0)
截至 2020年5月
,您可以应用四种s3安全和策略类型其中您可以使用用户存储桶策略来应用策略
要聚焦的线只需将/*
放在资源中的bucket_name之后,如下所示
"Resource": "arn:aws:s3:::my_bucket/*"
{
"Version": "2012-10-17",
"Id": "Policy212127",
"Statement": [
{
"Sid": "Stmt112121212",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
}
]
}