Политика IAM для принудительного применения тегов не работает

0 голос против любимый Я создал политику IAM, запрещающую создание томов EBS, если они не помечены как ключами «empname» и «team». Политика закреплена за тестовым пользователем.

Когда я пытаюсь создать том без определенных тегов, возникает ошибка, и это нормально. Но теперь, когда я пытаюсь создать том с любым другим тегом (что-либо с динамическим значением), он создает том, что является неожиданным.

Это созданная политика IAM для того же:

{
 "Version": "2012-10-17",
  "Statement": [
{
    "Sid": "AllowCreateTaggedVolumes",
    "Effect": "Deny",
    "Action": "ec2:CreateVolume",
    "Resource": "arn:aws:ec2:us-east-1:axxxxxxxxxxx:volume/*",
    "Condition": {
        "ForAllValues:StringNotLike": {
            "aws:RequestTag/empname": "*",
            "aws:RequestTag/team": "*"
        },
        "ForAllValues:StringEquals": {
            "aws:TagKeys": [
                "empname",
                "team"
            ]
        }
    }
  }
]
}

Есть ли способ ограничить для создания объема тогда и только тогда, когда используются оба этих тега. Было бы здорово, если бы мы также могли указать значения тегов для использования.

1
задан 2 February 2018 в 12:36
1 ответ

В документации AWS есть конкретный пример:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example -manage-volume-tags

{
  "Version": "2012-10-17",
  "Statement": [
  {
      "Sid": "AllowCreateTaggedVolumes",
      "Effect": "Allow",
      "Action": "ec2:CreateVolume",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*",
      "Condition": {
          "StringEquals": {
              "aws:RequestTag/costcenter": "115",
              "aws:RequestTag/stack": "prod"
          },
          "ForAllValues:StringEquals": {
              "aws:TagKeys": ["costcenter","stack"]
          }
       }
  }
}

Он основан на разрешении, а не на запрете, и использует положительное сопоставление строк, а не отрицательное сопоставление строк. Есть ли причина, по которой вы хотите использовать Deny?

Используя Deny, вы говорите:

Если пользователь пытается создать том, запретите действие, если (1) теги empname и team не включаются И (2), если какие-либо указанные теги являются либо "empname", либо "team".

Когда вы указываете случайные теги, первое условие удовлетворяется, , но второе - нет , поэтому отказ не произойдет.

Я думаю, что было бы намного логичнее и менее запутанно, если бы вы следовали примеру AWS и использовали Allow и положительное сопоставление строк.

В противном случае попробуйте изменить второе условие на:

    "ForAllValues:StringNotEquals": {
        "aws:TagKeys": [
            "empname",
            "team"
        ]
    }

, но Я не совсем уверен, сработает ли это.

0
ответ дан 4 December 2019 в 04:14

Теги

Похожие вопросы