AWS IAM策略中的可变资源名称

时间:2015-06-01 15:26:23

标签: amazon-web-services amazon-s3 amazon-iam

我正在使用“standard-prefix-{variable}”在程序中创建S3存储桶。在尝试创建IAM策略时,用户可以更新,创建,删除帐户中的存储桶,但前提是存储桶名称包含“标准前缀”。 IE,我不想允许修改帐户中的其他存储桶。在给定特定的存储桶名称的情况下,我找到了许多方法来限制对存储桶内资源的访问,但是当存储桶名称发生变化时,无法限制访问。

类似的东西(似乎不起作用):

"Resource": "arn:aws:s3:::standard-prefix-*"

来自AWS Docs的示例:

基于用户名的动态名称是我找到的最接近的名称。但是我需要一个通配符来表示存储桶名称的可变部分:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "sqs:*",
    "Resource": "arn:aws:sqs:us-west-2:*:${aws:username}-queue"
  }]
}  

指定存储桶名称中的项目:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}

1 个答案:

答案 0 :(得分:1)

这是最终起作用的政策。创建存储桶时,它们会得到standard_prefix-20150101standard_prefix-20150515等名称。具有此IAM策略的用户可以在这些存储桶上执行任何操作,但不能修改帐户中的其他存储桶。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "One",
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "arn:aws:s3:::standard_prefix-*"
            ]
        },
                {
            "Sid": "Two",
            "Effect": "Allow",
            "Action": [
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}