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?

5 minuto de leitura
0

Quero permitir que usuários ou grupos do AWS Identity and Access Management (IAM) tenham acesso para lançar novas instâncias do Amazon Elastic Compute Cloud (Amazon EC2). Também quero permitir que usuários do IAM tenham acesso para criar novos volumes do Amazon Elastic Block Store (Amazon EBS), mas somente quando aplicarem tags específicas.

Breve descrição

Especifique tags para instâncias do EC2 e volumes do EBS como parte da chamada de API que cria os recursos. Usando esse princípio, você pode exigir que os usuários do IAM marquem recursos específicos aplicando condições à política do IAM. Os exemplos de políticas a seguir não permitem que os usuários criem grupos de segurança ou pares de chaves, portanto, os usuários devem selecionar grupos de segurança e pares de chaves preexistentes.

O exemplo de políticas do IAM a seguir permite que os usuários:

  • Iniciar instâncias do EC2 que tenham chaves e valores de tag correspondentes
  • Iniciar instâncias do EC2 que tenham pelo menos uma tag e um valor correspondentes
  • Iniciar instâncias do EC2 que tenham pelo menos uma chave de tag correspondente
  • Executar instâncias do EC2 que tenham somente a lista especificada de tags

Resolução

Iniciar instâncias do EC2 que tenham chaves e valores de tag correspondentes

O exemplo de política a seguir permite que um usuário inicie uma instância do EC2 e crie um volume do EBS somente se o usuário aplicar todas as tags definidas na política usando o qualificador ForAllValues. Se o usuário aplicar uma tag que não esteja incluída na política, a ação será negada. Para reforçar a diferenciação entre maiúsculas e minúsculas, use a condição aws:TagKeys.

Observação: modifique a key1 e o value1 nas políticas de exemplo para incluir as tags e os valores que se aplicam aos seus recursos:

{
  "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": "AllowRunInstancesWithRestrictions",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVolume",
        "ec2:RunInstances"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/key1": "value1",
          "aws:RequestTag/key2": "value2"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "key1",
            "key2"
          ]
        }
      }
    },
    {
      "Sid": "AllowCreateTagsOnlyLaunching",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateVolume"
          ]
        }
      }
    }
  ]
}

Importante: Para iniciar instâncias do EC2 com êxito, essa política deve incluir chaves e valores de tag correspondentes. Se os pares de chave e valor não corresponderem, você receberá o erro “Falha na inicialização” ou um tipo similar de mensagem de falha de API.

Exemplos de resultados

Chave/valorResultado
key1/value1 e key2/value2allow
key1/value1deny
key1/value2deny
no keys and valuesdeny

Iniciar instâncias do EC2 que tenham pelo menos uma tag e um valor correspondentes

No exemplo a seguir, substitua o bloco de condições AllowRunInstancesWithRestrictions para permitir que um usuário inicie uma instância do EC2 e crie volumes do EBS quando pelo menos uma chave de tag for chamada key1 e seu valor for value1. Qualquer número de tags adicionais pode ser adicionado na solicitação RunInstances:

"Condition": {
  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Exemplos de resultados

Chave/valorResultado
key1/value1 e key2/value2allow
key1/value1allow
key1/value2deny
no keys and valuesdeny

Iniciar instâncias do EC2 que tenham pelo menos uma chave de tag correspondente

No exemplo de política a seguir, substitua o bloco de condições AllowRunInstancesWithRestrictions para permitir que um usuário inicie uma instância do EC2 e crie volumes do EBS quando pelo menos uma chave de tag for denominada key1. Nenhum valor específico é necessário para a tag key1 e qualquer número de tags adicionais pode ser adicionado na solicitação RunInstances.

"Condition": {
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Exemplos de resultados

Chave/valorResultado
key1/value1 e key2/value2allow
key1/value1allow
key1/value2allow
no keys and valuesdeny

Executar instâncias do EC2 que tenham somente a lista especificada de tags

No exemplo de política a seguir, substitua o bloco de condições AllowRunInstancesWithRestrictions para permitir que um usuário inicie uma instância do EC2 e crie volumes do EBS somente quando as chaves de tag key1 e key2 forem fornecidas na solicitação. Nenhum valor específico é necessário para nenhuma das chaves de tag e nenhuma tag adicional pode ser adicionada na solicitação RunInstances:

"Condition": {
  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

Observação: A condição StringLike é necessária para garantir que todas as tags estejam presentes.

Exemplos de resultados

Chave/valorResultado
key1/AnyValue e key2/AnyValueAllow
key1/AnyValueDeny
key2/AnyValueDeny
No keys or valuesDeny
key1/AnyValue, key2/AnyValue, key3/AnyValueDeny

Informações relacionadas

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

Criação de uma condição com várias chaves ou valores

Exemplo de políticas baseadas em identidade do IAM

Marcar seus recursos do Amazon EC2

Ações, recursos e chaves de condição para o Amazon EC2

AWS OFICIAL
AWS OFICIALAtualizada há um ano