Como a lógica de avaliação do IAM funciona usando uma política de negação explícita com várias chaves de condição?

4 minuto de leitura
0

Quero criar uma política de negação explícita do AWS Identity and Access Management (IAM) que restrinja a criação de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e volumes do Amazon Elastic Block Store (Amazon EBS). Como eu faço isso?

Breve descrição

Você pode usar tags de política do IAM para restringir a execução de instâncias do EC2 e volumes do EBS usando os operadores condicionais Allow com StringLike ou Deny com StringNotLike. Para obter instruções sobre como usar os operadores condicionais Allow com StringLike, consulte Como posso usar as tags de política do IAM para restringir a forma como uma instância do EC2 ou um volume do EBS podem ser criados?

Resolução

Use o exemplo de política do IAM a seguir que usa Deny com StringNotLike para restringir a criação de instâncias do EC2 e volumes do EBS.

**Observação:**É uma prática recomendada usar Deny com StringNotLike para evitar um acesso privilegiado acidental.

Se sua política tiver vários operadores de condição ou várias chaves anexadas a um único operador de condição, as condições serão avaliadas usando a lógica AND. Com múltiplos valores de tag Deny, cada chave RequestTag deve ser usada em instruções separadas para obter a mesma lógica AND.

Observação: Definir todos os valores da chave RequestTag em uma condição com uma política Deny pode não funcionar conforme o esperado. Isso ocorre porque a ação é permitida até que todas as condições sejam atendidas. Quando todas as condições são atendidas, a ação é negada.

Observe as seguintes tags obrigatórias:

  • A tag cost_center deve ter um valor não nulo.
  • A instância do EC2 tem uma chave de tag chamada Production.
  • A tag identifier deve ser uma combinação de cinco caracteres.
  • O valor da tag env deve ser sandbox, dev ou prod.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowToDescribeAll",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowRunInstances",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:key-pair/*"
            ]
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

Observe os seguintes valores de aplicação:

  • O valor aws:TagKeys impõe verificações na diferenciação entre maiúsculas e minúsculas de Production.
  • O valor ????? impõe que a combinação de quaisquer cinco caracteres possa ser usada (os espaços à esquerda ou à direita são ignorados).
  • O valor ?* exige que pelo menos um caractere esteja presente no campo de valor para que as instâncias do EC2 não possam ser iniciadas com valores de tag vazios.

Informações relacionadas

Como crio uma política do IAM para controlar o acesso aos recursos do Amazon EC2 usando tags?

Marcar seus recursos do Amazon EC2

Controle do acesso aos recursos da AWS usando tags de recursos

Lógica de avaliação para condições com várias chaves ou valores

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos