我有一个存储桶,其中我不小心将数千个带有 ACL 的文件上传到了 :public_read 我希望除生成的访问 URL 之外的所有文件均不可用。
我尝试创建一个存储桶策略,拒绝所有人的所有操作,并允许我的所有操作。
它不起作用,即使生成了访问 URL,所有文件也被禁止:
{
"Version": "2008-10-17",
"Id": "Policy1331136935471",
"Statement": [
{
"Sid": "Stmt1331136294179",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myBucket/*"
},
{
"Sid": "Stmt1331136364169",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::6527...3775:root"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::myBucket/*"
}
]
}
更新:
我在文档中找到了对默认拒绝的引用,但 AWS 策略生成器只有 2 个值“允许”和“拒绝”有人知道默认拒绝的语法吗?
感谢您的帮助
最佳答案
这是由相应的 Evaluation Logic 引起的The Access Policy Language的与 Bucket Policies 一起使用:
The goal at evaluation time is to decide whether a given request should be allowed or denied. The evaluation logic follows several basic rules:
By default, all requests to use your resource coming from anyone but you are denied
An allow overrides any default denies
An explicit deny overrides any allows
The order in which the policies are evaluated is not important
[emphasis mine]
该页面还提供了一个具有指导性的流程图和讨论,[其中]更详细地描述了如何做出决策。
因此,您的拒绝“*”
会覆盖您的允许“arn:aws:iam::6527...3775:root”
。如上面链接的流程图所示,您可以通过删除显式拒绝以支持默认拒绝来解决此问题(请注意 Using ACLs and Bucket Policies Together 时的潜在微妙之处,但这似乎不适用于您的用例)。
关于amazon-s3 - 如何将 amazon S3 存储桶策略设置为除管理员之外的所有人私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605455/