我对用户有以下 IAM 政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1395161912000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Sid": "list",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
目标是让用户将文件上传到存储桶,但不能覆盖或删除。是用来备份的。我从ListBucket
and开始PutObject
,但*
由于它不起作用而添加。甚至*
不让用户上传文件,只是获取Access Denied
.
当我尝试模拟器时,它返回Denied - Implicitly denied (no matching statements found).
for ListBucket
,这似乎很奇怪,因为我已经隐含地允许这样做。
我已经尝试过 Cyberduck 和 3Hub 作为 S3 客户端。
知道有什么问题吗?
在为Amazon S3制定Amazon IAM策略时,您需要了解服务上的操作(例如ListAllMyBuckets)、桶上的操作(例如ListBucket)和对象上的操作(例如GetObject)之间的区别。
特别是,
Resource
您的策略规范需要根据以下模式处理适当的目标实体(例如,请参阅Amazon S3 的各种示例策略):arn:aws:s3:::*
arn:aws:s3:::<bucket>
arn:aws:s3:::<bucket>/<object>
解决方案
您遇到
Access Denied
,因为您为 指定了存储桶级资源PutObject
,这需要对象级资源规范,例如arn:aws:s3:::<bucket>/*
- 因此,以下策略应涵盖您的示例用例: