我无法弄清楚如何设置我的存储桶策略来实现我想要的 . 任何帮助将非常感激!我希望的规则是:
我帐户中的
-
用户可以通过用户政策进行访问,因此不需要专门授予他们的访问权限
-
匿名用户(或我的AWS账户以外的任何人)应该没有访问权限,除了:
-
一个文件夹/ temp_public应该有一个公共GetObject(即如果你知道你可以获取文件的URL)
-
这些策略应覆盖存储桶中文件的对象ACL,因为对象ACL有时设置为公共读取 .
创建存储桶策略的原因是存储桶中的许多对象具有公共读取ACL(在文件上载时无意中设置,但也可能在将来发生,因此我希望使用存储桶ACL覆盖对象ACL) .
忽略temp_public文件夹,我希望我可以这样做:
{
"Version": "2008-10-17",
"Id": "Policy123456789",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
(其中 123456789012
是我的AWS账号),但是我拒绝了具有该存储桶策略的所有用户的访问权限 . 我想NotPrincipal在这种情况下不起作用?
谢谢你的任何建议!
罗里
更新:在AWS论坛上交叉发布here,并回答了!
1 回答
非常感谢来自AWS Forums的this answer的IP,我已经确认这对我有用:
无论这些文件上的ACL如何,此语句都将授予任何人对temp_public文件夹内对象的读访问权限 . 要覆盖所有其他文件的公共访问权限,您应该提供Deny-type语句 . 显式拒绝会覆盖任何允许访问权限,因此您必须排除已经授予的权限 . 所以使用NotResource作为排除掩码(NOT FINAL YET,如下所示):
但是,这将拒绝访问包括您帐户在内的所有用户,因为本金设置为“*” . 因此,您必须从此拒绝中排除您的帐户(仍然没有结束):
(XXXXYYYYZZZZ是您的12位AWS账户ID)
有's still problem: the statement above denies access to all IAM users (except root account). You'想要排除所有的IAM用户,但这很棘手 . 出于某些原因,Amazon S3不支持通配符来指定存储桶策略中的IAM用户 . 您不能将
"arn:aws:iam::XXXXYYYYZZZZ:user/*"
写为Principal(它会给出错误:"Invalid principal in policy") . 您必须指定确切的用户名:来自Rory的注意事项:S3文档建议您可以使用
arn:aws:iam::XXXXYYYYZZZZ:root
来覆盖帐户中的所有用户,但这似乎不起作用因此,最终政策将如下所示: