Ror*_*ory 6 amazon-s3 amazon-web-services
我无法弄清楚如何设置我的存储桶策略以实现我想要的.任何帮助将非常感激!我希望的规则是:
创建存储桶策略的原因是存储桶中的许多对象具有公共读取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/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
(123456789012我的AWS账号在哪里),但我对所有使用该存储桶策略的用户都拒绝访问.我想NotPrincipal在这种情况下不起作用?
谢谢你的任何建议!
罗里
更新:跨张贴在这里的AWS论坛,并回答了!
Ror*_*ory 12
非常感谢来自AWS论坛的IP ,我已经确认这个答案对我有用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BucketName/temp_public/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
无论这些文件上的ACL如何,此语句都将为任何人提供对temp_public文件夹内对象的读访问权限.要覆盖所有其他文件的公共访问权限,您应该提供+ Deny + -type语句.显式拒绝会覆盖任何允许访问权限,因此您必须排除已经授予的权限.所以使用NotResource作为排除掩码(NOT FINAL YET,如下所示):
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::BucketName/temp_public/*"
}
Run Code Online (Sandbox Code Playgroud)
但是,这将拒绝访问包括您帐户在内的所有用户,因为本金设置为"*".因此,您必须从此拒绝中排除您的帐户(仍然不是最终):
{
"Effect": "Deny",
"NotPrincipal": { "AWS": "arn:aws:iam::XXXXYYYYZZZZ:root" },
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::BucketName/temp_public/*"
}
Run Code Online (Sandbox Code Playgroud)
(XXXXYYYYZZZZ是您的12位AWS账户ID)
仍然存在问题:上述语句拒绝访问所有IAM用户(root帐户除外).您也希望排除所有IAM用户,但这很棘手.出于某些原因,Amazon S3不支持在存储桶策略中指定IAM用户的通配符.你不能写"arn:aws:iam::XXXXYYYYZZZZ:user/*"为Principal(它给出一个错误:"策略中的无效主体").您必须指定确切的用户名:
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::XXXXYYYYZZZZ:root",
"arn:aws:iam::XXXXYYYYZZZZ:user/user1",
"arn:aws:iam::XXXXYYYYZZZZ:user/user2",
"arn:aws:iam::XXXXYYYYZZZZ:user/user3",
"arn:aws:iam::XXXXYYYYZZZZ:user/user4" ]
}
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::BucketName/temp_public/*"
}
Run Code Online (Sandbox Code Playgroud)
来自Rory的注意事项:S3文档建议您可以arn:aws:iam::XXXXYYYYZZZZ:root用来覆盖帐户中的所有用户,但这似乎不起作用
所以最终政策将如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BucketName/temp_public/*"
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::XXXXYYYYZZZZ:root",
"arn:aws:iam::XXXXYYYYZZZZ:user/user1",
"arn:aws:iam::XXXXYYYYZZZZ:user/user2",
"arn:aws:iam::XXXXYYYYZZZZ:user/user3",
"arn:aws:iam::XXXXYYYYZZZZ:user/user4" ]
}
"Action": "s3:GetObject",
"NotResource": "arn:aws:s3:::BucketName/temp_public/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4483 次 |
| 最近记录: |