用于为用户列出 S3 存储桶内的特定文件夹的 IAM 策略

Posted

技术标签:

【中文标题】用于为用户列出 S3 存储桶内的特定文件夹的 IAM 策略【英文标题】:IAM Policy to list specific folders inside a S3 bucket for an user 【发布时间】:2013-11-18 05:51:24 【问题描述】:

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

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

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

    仅授予他们对 demo.for.customers 存储桶的访问权限。 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/*"]
    
]

问题:

    Customer1 能够看到我的所有存储桶,尽管他无法访问其中任何一个。我不想要这个。他应该只能看到 demo.for.customers Customer1 也可以看到demo.for.customers/customer2,尽管他无法访问它。这是非常不可接受的,因为我什至不希望他看到我在此存储桶下还有哪些其他客户文件夹。

问题:

    经过大量谷歌搜索后,我知道无法列出特定的存储桶。这是真的吗? 但是,我必须找到一种方法来仅列出给定用户的存储桶内的特定文件夹。该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

关于你的问题:

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

关于您的问题:

    是的,没有办法列出某些桶。 list buckets API 是一个全有或全无的操作。 这是通过前缀完成的。您使用什么语言?我们有一个 AWS 移动开发工具包示例,它使用令牌自动售货机交付 per user access to an S3 bucket。

【讨论】:

为您的时间+1。我正在使用aws s3 ls s3://demo.for.customersaws s3api list-objects --bucket demo.for.customers 命令进行测试。此外,我也在通过控制台检查并运行一个使用 AWS ruby​​ SDK 的简单 ruby​​ 脚本。我希望我的客户能够访问控制台,因此我非常关心存储桶内的文件夹的列表。我不想要任何客户,所以即使查看存储桶中还有哪些其他文件夹。 您的用户需要控制台访问权限是否有特殊原因?这确实使事情复杂了一点。 是的。我的客户将在 S3 中上传辅助数据。他们不是精通技术的人。因此,我不希望他们陷入使用 S3 API 来做同样事情的麻烦。事实上,他们只是想通过最简单的方式将数据提供给我。 很遗憾,控制台不支持这种级别的细粒度访问控制。您绝对可以阻止他们查看或上传到存储桶或前缀/文件夹,但不能完全看到它们。如果您需要此功能,则需要实现自己的系统以通过 Web 应用程序上传到 S3,以隐藏其他客户文件夹或存储桶。 @auhuman 据我所知,没有任何改变,这些限制仍然适用。

以上是关于用于为用户列出 S3 存储桶内的特定文件夹的 IAM 策略的主要内容,如果未能解决你的问题,请参考以下文章

列出具有特定存储类的S3存储桶对象

从 Azure 数据块读取 Amazon S3 特定文件夹,无需公开访问存储桶

允许用户放置、获取、删除和修改权限的 S3 策略

使用 boto3 列出存储桶的内容

是否可以将 Firebase 函数的范围限定为存储桶内的文件夹?

列出 AWS S3 存储桶的特定“文件夹”中的文件