我的账户中有 3 个桶 A、B、C。我创建了一个限制 IAM 用户访问特定存储桶的策略。政策如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::A"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::A/*"
}
]
}
将此策略应用于 IAM 用户后,我尝试使用带有凭据的
aws s3 ls
命令。
# list buckets
➜ aws s3 ls
2020-06-20 03:54:56 A
2020-06-20 03:54:56 B
2020-06-20 03:54:56 C
➜ aws s3 ls s3://A
PER sub-foler/
➜ aws s3 ls s3://B
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
看起来成功限制了A以外的Bucket的用户访问。但是用户仍然可以看到B、C等其他Bucket的存在。
是否可以限制用户仅列出授权给它的存储桶(即A)?
2024 年更新: Amazon S3 为 ListBuckets API 添加了新的区域和存储桶名称过滤 - AWS
s3:ListAllMyBuckets
权限授予在 AWS 账户中列出存储桶的能力。
所有桶都将被退回。无法限制返回哪些存储桶。
如果您不希望用户看到其他存储桶的列表,请不要授予他们列出存储桶名称的能力。