为Amazon S3创建IAM策略

时间:2012-05-10 05:48:22

标签: amazon-s3

我正在尝试实施IAM策略,其中用户也只能访问他有权访问的文件夹。我从亚马逊文档中获取了此代码

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

此示例以前一个为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#中运行我的代码时,我得到所有文件夹而不仅仅是“Test”下的文件夹... 真的很感激一些帮助!

2 个答案:

答案 0 :(得分: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设置 对于我的水桶: 所有者:完全控制 经过身份验证的用户:Readonly

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

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

答案 1 :(得分:2)

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

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