我正在尝试在我的存储桶上放置一个策略,以允许对我的对象进行公共“GetObject”访问,但只允许在某个前缀中使用。像这样:
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/publicstuff/*"
}
问题是,AWS警告我这会使整个存档公开。确实如此,确实如此;如果我尝试从/ mybucket / anywhereelse /获取一个对象,S3会自由地提供它。因此,'mybucket'之后的所有内容都会被忽略。
有没有办法构建适用于存储桶中特定前缀的存储桶策略?我尝试了一个策略条件,但发现在使用s3:GetObject操作时不能使用s3:前缀。
答案 0 :(得分:0)
虽然你看到一个迹象表明你的存储桶是公开可访问的,但这完全没问题。您应该注意到此指示符显示提供了此存储桶的(某些内容)的公共访问权
因此,要检查没有问题,您可以只测试可公开访问的文件夹之外的文件,并将其与可以根据您的政策公开访问的文件进行比较。
您可以在下图中看到我已经创建了我的桶(托尼奥雷)的子文件夹,可供公众访问:
这是桶的树视图:
├──目录
│├──托尼奥雷
││└──i.txt
└──ni.txt
根据我的政策,i.txt可公开访问,但ni.txt不可用,指标显示公共访问权限。
答案 1 :(得分:0)
谢谢@michael和@mok,我找到了答案:我是个白痴。我用来验证标准行为的其他对象碰巧对它们具有单独的权限以允许getObject,我不记得将它们放在那里或注意到它们在那里。当我删除这些权限时,似乎我仍然可以访问这些对象,但我实际上是在获取缓存副本。删除这些虚假权限并使用完全不同的浏览器时,我验证了我最初发布的策略是否正确。抱歉,添麻烦了。