【发布时间】:2020-05-01 16:27:34
【问题描述】:
我正在尝试为名为 files.mybucket.com 的全新漂亮存储桶设置一项政策,其中指出:
- 每个人都可以阅读我的对象
- 只有部分 IAM 用户可以执行其他所有操作。
这是我迄今为止尝试过的:
"Statement": [
{
"Sid": "getAll",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::files.mybucket.com",
"arn:aws:s3:::files.mybucket.com/*"
]
},
{
"Sid": "writeSome",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/John",
"arn:aws:iam::111111111111:user/Dave"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::files.mybucket.com",
"arn:aws:s3:::files.mybucket.com/*"
]
}
]
以上似乎没有效果:即使我从语句中删除“John”主体,我仍然可以通过控制台和 Cloudberry Explorer 上传内容。
"Statement": [
{
"Sid": "getAll",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::files.mybucket.com",
"arn:aws:s3:::files.mybucket.com/*"
]
},
{
"Sid": "writeSome",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::111111111111:user/John",
"arn:aws:iam::111111111111:user/Dave"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::files.mybucket.com",
"arn:aws:s3:::files.mybucket.com/*"
]
}
]
这个看起来很有前途,因为它可以阻止用户写作(如果我删除 John,我就不能再用它写了)但它也阻止了来自未经身份验证的人的获取请求(我希望他们能够看到内容) .
那么,问题来了:如何让人们获取我的文件并阻止除 John 和 Dave 之外的所有人在存储桶上写字?
这让我发疯了。感谢您的帮助。
【问题讨论】:
-
那么第二个策略不起作用?
-
不,它会正确阻止写入请求,但也会阻止人们阅读。我正在使用它来存储网站的图像,并在我尝试在那里显示图像时被拒绝访问。
-
我明白了。你使用
s3:*,它拒绝了除了约翰和戴夫之外的所有人的一切。 拒绝总是胜利。但要小心使用NonPrinciple。 AWS 建议 NOT 使用它,除非您绝对必须这样做。 -
很高兴知道否认者获胜!但我仍然不明白:如果我不使用 NotPrincipal,似乎唯一的方法是使用除 GetObject 之外的每个操作创建“拒绝”到“*”,但这将优先于每个“允许”校长在另一个声明中,对吗?对于这种情况,我没有看到不涉及 NotPrincipal 的解决方案:(
标签: amazon-web-services amazon-s3