Política do IAM para impor que a marcação não funcione

1

0 baixo voto favorito Eu criei uma política do IAM para negar a criação de volumes do EBS se ele não estiver marcado com as chaves "empname" e "team". A política é anexada a um usuário de teste.

Quando tento criar um volume sem tags definidas, ele gera um erro, o que é bom. Mas agora, quando tento criar um volume com qualquer outra tag (qualquer coisa com valor dinâmico), ele cria o volume, o que é inesperado.

Esta é a política do IAM criada para o mesmo:

{
 "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"
            ]
        }
    }
  }
]
}

Existe alguma maneira de restringir a criação de volume se e somente se ambas as tags forem usadas. Será ótimo se pudermos especificar valores de tags para usar também.

    
por serverstackqns 02.02.2018 / 11:36

1 resposta

0

Há um exemplo específico disso na documentação da AWS:

link

{
  "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"]
          }
       }
  }
}

Ele é baseado em uma correspondência Permitir, em vez de Negar, e usa correspondência de cadeia de caracteres positiva em vez de correspondência de cadeia de caracteres negativa. Existe alguma razão para você querer usar um Deny?

Usando um Deny, você está dizendo:

Se o usuário tentar criar um volume, negue a ação se (1) as tags "empname" e "team" não forem incluídas E (2) se alguma tag especificada for "empname" ou "team". / p>

Quando você especifica tags aleatórias, a primeira condição é satisfeita, , mas a segunda não é , portanto, a negação não ocorrerá.

Acho que seria muito mais lógico e menos confuso se você seguisse o exemplo da AWS e usasse a opção Permitir e corresponder de cadeia de caracteres positiva.

Caso contrário, tente alterar a segunda condição para:

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

mas não tenho certeza se isso funcionaria.

    
por 10.02.2018 / 23:24