【问题标题】:Amazon AWS S3 IAM Policy based on namespace or tag基于命名空间或标签的 Amazon AWS S3 IAM 策略
【发布时间】:2015-01-24 19:32:39
【问题描述】:

我有许多以与 assets-<something> 相同的命名空间开头的存储桶,所以我想知道在最少需要维护的情况下授予 IAM 组权限的最佳选择是什么。

是否可以在 ARN 中使用任何类型的正则表达式?或者也许我可以使用标签? EC2 有 ResourceTag 的条件,但似乎 S3 不存在。

或者我应该为每个存储桶添加新的 ARN 到策略中吗?

我再次在寻找最小的解决方案,因此将新策略附加到每个存储桶本身似乎有点多。

【问题讨论】:

    标签: regex amazon-web-services amazon-s3 amazon policy


    【解决方案1】:

    IAM 策略可以根据通配符授予对 Amazon S3 存储桶的访问权限。

    例如,此策略授予列出存储桶内容和从存储桶检索对象的权限,但前提是存储桶以 assets- 开头:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "SomeSID",
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::assets-*",
            "arn:aws:s3:::assets-*/*"
          ]
        }
      ]
    }
    

    请注意,Resource 部分指的是存储桶(用于ListBucket)和存储桶的内容(用于GetObject)。

    通配符也可以在存储桶名称的其他地方使用,例如:arn:aws:s3:::*-record

    无法根据标签授予对 Amazon S3 存储桶的访问权限。

    ARN 格式

    顺便说一句,如果您想知道为什么 Amazon S3 存储桶的 ARN(Amazon 资源名称)中有这么多冒号,这是因为 ARN 的正常格式是:

    arn:aws:<service name>:<region>:<account>:<resource>
    

    对于 Amazon S3 存储桶,区域和账户可以从存储桶名称(全球唯一)中辨别出来,因此这些参数留空。

    【讨论】:

    • ListBucket 需要访问&lt;bucket&gt;GetObject 需要&lt;bucket&gt;/*。不应该有2条具有分离访问权限的规则吗?或者这不是一个好的做法?
    • 上面的例子结合了它们,但它们可以作为单独的规则列出(一个用于存储桶,一个用于存储桶内容)。
    【解决方案2】:

    是的,看来我可以将 IAM 策略与 ARN arn:aws:s3:::assets-*arn:aws:s3:::assets-*/* 一起使用

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
    • @thomasfedb,这似乎是一个自我回答。
    • 好点,错过了。无论如何,更详细的自我回答会很好。
    • 我同意,因此我不接受我自己的答案。这是我发现有效的基本结果,我现在最终使用。我没有关于在 ARN 中使用标签或更复杂的正则表达式的信息。
    猜你喜欢
    • 2019-07-07
    • 2013-04-05
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多