我在存储桶演示下有以下键。
demo.for.customers/customer1/
demo.for.customers/customer2/
现在我有 2 个客户,即客户 1 和客户 2。这就是我想要的:
- 仅授予他们访问 demo.for.customers 存储桶的权限。
- 客户 1 应该只能访问
demo.for.customers/customer1/
客户 2 应该只能访问demo.for.customers/customer2/
。
能够通过以下策略(我正在为每个客户创建策略。因此,我只为客户1粘贴下面的那个。我在 IAM 中定义了此策略,而不是在 S3 中。
{
"Version":"2012-10-17",
"Statement": [
{
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::demo.for.customers"],
"Condition":{"StringEquals":{"s3:prefix":["","customer1/"],"s3:delimiter":["/"]}}
},
{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::demo.for.customers/customer1/*"]
}
]
}
问题:
- 客户 1 能够看到我的所有存储桶,尽管他无法访问其中任何一个。我不要这个。他应该只能看到demo.for.customers。
- 客户 1 也能够看到
demo.for.customers/customer2
,尽管他无法访问它。这是非常不可接受的,因为我甚至不想让他看到我在这个存储桶下还有哪些其他客户文件夹。
问题:
- 在谷歌上搜索了很多之后,我开始知道没有办法列出特定的存储桶。这是真的吗?
- 但是,我必须找到一种方法来仅为给定用户列出存储桶中的特定文件夹。怎么做?
谢谢。
关于您的问题:
- 不幸的是,无法仅列出某些存储桶。如果目的只是允许访问一个已知的存储桶,我将完全删除第一个语句,因为它不会添加任何值(存储桶是已知的,不需要列出)。
- 您能否显示用于列出存储桶内容的代码?根据您在此处显示的内容,我希望 customer1 只能在其前缀的根目录中列出存储桶内容,而不能在其他任何地方列出。
关于您的问题:
- 是的,无法列出某些存储桶。列表存储桶 API 是全有或全无操作。
- 这是通过前缀完成的。您使用什么语言?我们有一个 AWS 移动软件开发工具包示例,该示例使用令牌自动售货机按用户提供对 S3 存储桶的访问权限。