我想做的是列出存储桶的所有内容,但特定文件夹(存档)的内容除外。问题是当我"ls"存储桶时,我也从"存档"文件夹中获取文件。这是我当前的设置:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Sid": "Stmt1382452205000",
"Resource": [
"arn:aws:s3:::mybucket"
],
"Condition":{
"StringNotLike":{"s3:prefix":["archive/"]}
},
"Effect": "Allow"
},
{
"Sid": "ExplictDenyAccessToArchive",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::mybucket/archive/*"]
},
{
"Sid": "DenyListBucketOnArchive",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["archive/"]}
}
}
]
}
IAM 策略中的 ListBucket 操作适用于存储桶级别。您不能在存储桶的子集上授予它。
听起来您的目标是从文件列表中排除文件,而不是限制对用户的访问。 遗憾的是,S3 API 不允许您指定要排除的前缀。 但是,您可以使用 API 的分隔符选项获取所有顶级路径的顶级列表,然后使用前缀和标记参数进行后续调用,以仅列出您感兴趣的路径。
更多详情请见:http://docs.aws.amazon.com/AmazonS3/latest/API/SOAPListBucket.html