AWS S3策略限制用户仅列出存储桶中的某些文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS S3策略限制用户仅列出存储桶中的某些文件夹相关的知识,希望对你有一定的参考价值。

我很难创建一个AWS S3策略,以允许客户仅列出和访问特定文件夹和子文件夹中具有扩展名的某些对象,而无法列出或访问其他文件夹,子文件夹或对象。

假设我们具有这种结构:

S3
.
├── BucketManagement
|   └── Accounting
|
├── BucketHR
|   ├── Insurance
|   └── Resume
|
└── BucketCustomers
    ├── custAcmeAnvils
    ├── custBoboBakery
    |   ├── projCakewalk
    |   |   ├── batter.txt
    |   |   ├── cupcake.txt
    |   |   ├── PROFIT.XLS
    |   |   └── cooktime.txt
    |   ├── projPieFace
    |   └── projFlourPower
    |       ├── dough.txt
    |       └── LAWSUITS.DOC
    └── custCocoCabana

我已经为我的客户“ Bobo's Bakery”创建了一个IAM用户。我想让我的客户Bobo先生只能查看和访问某些文件夹,子文件夹和对象(文件)。我不希望Bobo先生看到或访问任何其他存储桶,文件夹,子文件夹或对象。

在此示例中,我只希望Bobo先生能够在某些子文件夹中列出和下载扩展名为“ .txt”的对象,而不查看,列出或访问任何其他文件夹,子文件夹或具有其他扩展名的对象。

理想情况下,Bobo先生登录到S3控制台时,他仅看到此存储桶(我知道这不可能,因为所有存储桶都必须可见):

BucketCustomers

然后,Bobo先生单击该存储桶时,他仅看到此文件夹“ custBoboBakery”:

BucketCustomers
└── custBoboBakery

然后,Bobo先生单击该文件夹时,他只看到这两个子文件夹“ projCakeWalk”和“ projFlourPower”:

custoBoboBakery
├── projCakeWalk
└── projFlourPower

注意:我不希望Bobo先生看到子文件夹projPieFace。然后,当Bobo先生单击子文件夹projCakewalk或projFlourPower时,他只会看到扩展名为“ .txt”的对象。

projCakewalk
├── batter.txt
├── cupcake.txt
└── cooktime.txt

projFlourPower
└── dough.txt

先生Bobo应该无法看到带有“ .XLS”或“ .DOC”扩展名的对象。然后,他可以下载这些.txt文件。 Bobo先生不应该具有删除或上传权限。

您能建议如何编写此政策吗?

答案

S3是平面文件系统对象存储。这意味着您访问的所有文件和文件夹最终都是平面名称。

例如,您的文件夹路径projCakewalk->batter.txt具有文件的名称projCakewalk/batter.txt。这意味着,如果要访问此特定文件,则需要使用完整的名称(路径)。

为了限制对特定文件夹和路径的访问,S3提供了创建存储桶策略和IAM策略的功能-在结构上它们都是相似的。为了达到您的目的,您可以参考此link

页面上的示例策略放在下面

{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowUserToSeeBucketListInTheConsole",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowRootAndHomeListingOfCompanyBucket",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::my-company"],
     "Condition":{"StringEquals":{"s3:prefix":["","home/", "home/David"],"s3:delimiter":["/"]}}
    },
   {
     "Sid": "AllowListingOfUserFolder",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::my-company"],
     "Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
   },
   {
     "Sid": "AllowAllS3ActionsInUserFolder",
     "Effect": "Allow",
     "Action": ["s3:*"],
     "Resource": ["arn:aws:s3:::my-company/home/David/*"]
   }
 ]
}

在上述政策中,在第一部分中,您可以访问列出所有存储桶(您不需要这样做)在第二部分中,它允许访问列出我的公司存储桶的特定子文件夹在第三部分中,它仅允许访问特定的文件名模式(您可以使用类似的条件来限制对特定文件的访问-只需删除星号即可)

以上是关于AWS S3策略限制用户仅列出存储桶中的某些文件夹的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM 策略:按用户/角色限制存储桶/文件夹访问?

如何使用 Java 列出存储桶中的所有 AWS S3 对象

[AWS][安全] S3存储桶策略-Bucket Policy

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

列出具有公共读取权限的 S3 对象(在私有存储桶中)

AWS 存储桶策略错误:策略具有无效操作