4

我正在尝试实施一项 IAM 策略,其中用户也只能访问他有权访问的文件夹。我从 Amazon docs 获得了这段代码

允许用户仅列出公司存储桶中其主目录中的对象

此示例建立在上一个示例的基础上,该示例为 Bob 提供了一个主目录。为了让 Bob 能够列出他的主目录中的对象,他需要访问 ListBucket。但是,我们希望结果仅包含他的主目录中的对象,而不是存储桶中的所有内容。为了以这种方式限制他的访问,我们使用名为 s3:prefix 的策略条件键,其值设置为 home/bob/ 。这意味着只有带有前缀 home/bob/ 的对象才会在 ListBucket 响应中返回。

{
  "Statement":[{
    "Effect":"Allow",
    "Action":"s3:ListBucket",
    "Resource":"arn:aws:s3:::my_corporate_bucket",
    "Condition":{
      "StringLike":{
      "s3:prefix":"home/bob/*"
    }
  }]
}

这对我不起作用。当我运行我的代码时,我能够看到所有文件夹和子文件夹。我修改后的代码如下所示:

{
  "Statement":[{
    "Effect":"Allow",
    "Action":"s3:ListBucket",
    "Resource":"arn:aws:s3:::Test-test",
    "Condition":{
      "StringLike":{
      "s3:prefix":"Test/*"
    }
  }]
}

当我使用附加到上述策略的用户凭据在 c# 中运行我的代码时,我得到了所有文件夹,而不仅仅是“测试”下的文件夹......非常感谢一些帮助!

4

2 回答 2

7

我终于让它工作了。尽管我认为 AWS 管理控制台中存在一个错误,或者至少看起来是一个错误。问题是我的策略一直都是正确的,但是当我通过 AWS 管理控制台访问它时,它的行为与 CloudBERry 之类的软件不同。我必须修改的一件事是对象和存储桶的 ACL 设置。如果 AWS 控制台正常工作,这也将在早些时候完成。无论如何,这是我的政策:

{
  "Statement": [

    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "arn:aws:s3:::*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": "arn:aws:s3:::pa-test",
      "Condition": {
        "StringLike": {
          "s3:prefix": "test/*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::pa-test/test/*",
      "Condition": {}
    }
  ]
}

1) 问题是,当我通过 AWS 控制台访问此 IAM 用户的管理控制台时,当我单击我的存储桶时,我被拒绝访问,尽管当我通过 Cloudberry 登录时,我可以看到我的文件夹。2)我必须修改我的存储桶的 ACL 设置和我的存储桶的对象(文件夹): Owner : Full Control Authenticated Users : Readonly

对于我的文件夹:所有者:完全控制

现在的问题是您无法在 AWS 控制台中为文件夹(对象)设置 ACl 设置。您可以为文件(对象)设置它们。例如,如果您右键单击存储桶内的文件夹(对象),然后单击属性,则不会显示权限选项卡。但是,如果您右键单击存储桶或文件(例如 test.html)并单击属性,它将显示一个权限选项卡。我不确定其他人是否注意到了这个问题。无论如何,这是我的脚本,它现在正在工作。

于 2012-05-17T04:33:57.543 回答
2

您期望从 listBucket 获得的结果不会像那样发生。因为该策略只允许您根据存储桶策略对对象进行允许和拒绝访问。ListBucket 将列出所有对象,但您只能访问前缀文件夹及其内容。

如果您只想列出文件夹,那么您必须像阅读 IAM 策略那样编写代码,然后获取前缀字符串,然后使用该前缀列出,那么您将只获得所需的文件夹。因为到目前为止,亚马逊 s3 还没有提供这样的选项。

于 2012-05-11T05:54:52.390 回答