我在Amazon S3上使用getObject和putObject请求,并在创建访问存储桶的策略时发现,如果我不允许listBucket,我会收到“访问被拒绝”错误 .
这个问题是listBucket意味着用户可以列出存储桶中的密钥,这会带来安全威胁 .
是否可以在不允许listBucket的情况下允许getObject和putObject?或者有解决方法吗?
这是政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt##",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::myBucket"
]
},
{
"Sid": "Stmt##",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::myBucket/*"
]
}
]
}
1 回答
来自Get Object documentation:
我已经通过编辑与您的策略基本相同的策略来确认此行为 .
I am able to get an existing object without trouble, whether or not I have the s3:ListBucket privilege ,只要我拥有
s3:GetObject
权限 .仅当我还没有
s3:ListBucket
权限时,行为才会更改,并且我请求一个不存在的对象 . 在这种情况下,S3不会向我承认该对象是否存在 - 我没有授权查看该列表 .在没有
s3:ListBucket
的情况下响应对不存在的对象的有效请求:使用
s3:ListBucket
响应对同一不存在对象的有效请求:因此,对于实际不存在的对象,"access denied"是没有
s3:ListBucket
的预期响应 . 否则,它按预期工作 .