【问题标题】:creating IAM policy for Amazon S3为 Amazon S3 创建 IAM 策略
【发布时间】:2012-05-18 16:23:22
【问题描述】:

我正在尝试实施一项 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# 中运行我的代码时,我会得到所有文件夹,而不仅仅是“测试”下的文件夹... 非常感谢您的帮助!

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

    我终于让它工作了。尽管我认为 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 设置 对于我的桶: 所有者:完全控制 认证用户:只读

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

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

    【讨论】:

    • 如果无法通过 AWS 控制台设置 ACL,您是如何设置的?
    【解决方案2】:

    您对 listBucket 的期望结果并非如此。 因为该策略只允许您根据存储桶策略对对象进行允许和拒绝访问。 ListBucket 将列出所有对象,但您只能访问前缀文件夹及其内容。

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

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 2023-03-29
      • 2023-04-07
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2020-10-22
      相关资源
      最近更新 更多