基于名称空间或标签的Amazon AWS S3 IAM策略

Jac*_*Leo 5 regex policy amazon amazon-s3 amazon-web-services

我有许多存储区,它们以和中相同的名称空间开头assets-<something>,因此我想知道什么是最好的选择,以最少的维护量来授予IAM组权限。

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

还是应该在每个存储桶中向策略添加新的ARN?

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

Joh*_*ein 7

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-*/*"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,该Resource部分同时引用了存储桶(for ListBucket)和存储桶的内容(for GetObject)。

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

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

ARN格式

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

arn:aws:<service name>:<region>:<account>:<resource>
Run Code Online (Sandbox Code Playgroud)

对于Amazon S3存储桶,可以从存储桶名称(全局唯一)中区分区域和帐户,因此这些参数保留为空白。