2

我在存储桶demo.for.customers下有以下键

demo.for.customers/customer1/
demo.for.customers/customer2/

现在我有 2 个客户,即customer1customer2。这就是我要的:

  1. 仅授予他们对demo.for.customers存储桶的访问权限。
  2. customer1 应该只能访问demo.for.customers/customer1/,而 customer2 应该只能访问demo.for.customers/customer2/

而且我可以通过以下策略来实现这一点(我正在为每个客户创建策略。因此我只为下面的 customer1 粘贴一个。)我在 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. Customer1 能够看到我的所有存储桶,尽管他无法访问其中任何一个。我不想要这个。他应该只能看到demo.for.customers
  2. Customer1 也可以看到demo.for.customers/customer2,尽管他无法访问它。这是非常不可接受的,因为我什至不希望他看到我在此存储桶下还有哪些其他客户文件夹。

问题:

  1. 在做了很多谷歌搜索之后,我才知道没有办法列出特定的存储桶。这是真的吗?
  2. 但是,我必须找到一种方法来仅列出给定用户的存储桶中的特定文件夹。怎么做?

谢谢。

4

1 回答 1

1

关于你的问题:

  1. 不幸的是,没有办法只列出某些桶。如果意图只是允许访问一个已知的存储桶,我将完全删除第一个语句,因为它不会添加任何值(存储桶是已知的,不需要列出)。
  2. 你能显示你用来列出存储桶内容的代码吗?根据您在此处显示的内容,我希望 customer1 只能在其前缀的根目录中列出存储桶内容,而不能在其他任何地方列出。

关于你的问题:

  1. 是的,没有办法列出某些桶。list buckets API 是一个全有或全无的操作。
  2. 这是通过前缀完成的。您使用什么语言?我们有一个 AWS 移动开发工具包示例,它使用令牌自动售货机为每个用户提供对 S3 存储桶的访问权限
于 2013-11-19T18:12:19.363 回答