允许每个用户仅列出 s3 中的某些文件夹



我正在为我的客户端设置一个新的 S3 存储桶以上传到其中。 我只想只允许每个客户端查看自己的文件夹,这样每个客户端就无法分辨我在和谁一起工作。

我可以对其进行设置,以便每个客户端都无法列出或查看任何其他客户端文件夹中的对象,但目前每个客户端都可以列出存储桶中的所有文件夹。

理想情况下,我希望存储桶的顶层包含多个文件夹,例如client-1-folderclient-2-folder等。 然后当有人以client-1身份登录时,他们只能看到client-1-folder,甚至看不到client-2文件夹的存在(所以他们不知道我正在使用客户端 2(。

这可以通过 IAM 权限实现吗?

我当前的 IAM 策略:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "id1",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Sid": "id2",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::client-bucket",
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"client-1-folder/"
],
"s3:delimiter": [
"/"
]
}
}
}
]
}

策略的这一部分:

"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"client-1-folder/"
],
"s3:delimiter": [
"/"
]
}
}

说:"仅当前缀为空或client-1-folder时。

因此,它允许人们列出存储桶的root。如果您删除"",则只允许他们列出自己的目录。

此外,您不必为每个人编写单独的策略,而是可以利用如下策略变量

{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}

这允许将相同的策略应用于所有用户,而无需指定其用户名。但是,它希望文件夹的名称与其用户名相同。

请参阅: IAM 策略元素:变量和标签 - AWS 身份和访问管理

为什么不为不同的客户端创建不同的 s3 存储桶?为每个客户端创建一个专用存储桶。然后,您为每个客户端创建的用户创建策略,该策略允许客户端仅查看他/她的 s3 存储桶。

相关内容

  • 没有找到相关文章

最新更新