Como faço para restringir o acesso para iniciar instâncias do Amazon EC2 somente a partir de AMIs marcadas?

4 minuto de leitura
0

Quero restringir o acesso dos usuários para que eles possam iniciar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) somente a partir de Amazon Machine Images (AMIs) marcadas. Como faço para restringir o acesso para iniciar instâncias do EC2 usando tags de AMI?

Resolução

Para restringir o acesso dos usuários para iniciar instâncias do EC2 usando AMIs marcadas, crie uma AMI a partir de uma instância existente — ou use uma AMI existente — e depois adicione uma tag à AMI. Em seguida, crie uma política personalizada do AWS Identity and Access Management (IAM) com uma condição de tag que restringe as permissões dos usuários de iniciar somente instâncias que usam a AMI marcada.

Neste exemplo de política do IAM, há três IDs de declaração (Sids):

  • Sid ReadOnlyAccess permite que os usuários visualizem todos os recursos do EC2 em sua conta usando Describe*, que inclui todas as ações do EC2 que começam com Describe. Sid ReadOnlyAccess também permite que os usuários obtenham resultados de console e capturas de tela de uma instância do EC2. Para obter mais informações, consulte GetConsoleOutput e GetConsoleScreenshot. As permissões do Amazon CloudWatch para DescribeAlarms e GetMetricStatistics permitem que informações básicas de integridade sobre instâncias do EC2 apareçam no console do Amazon EC2. A permissão do IAM para ListInstanceProfiles permite que os perfis de instância existentes sejam exibidos na lista de perfis do IAM na página Configurar detalhes da instância ao iniciar uma instância do EC2. No entanto, a API ListInstanceProfiles não permite que os usuários anexem um perfil do IAM a uma instância do EC2.
  • Sid ActionsRequiredtoRunInstancesInVPC concede aos usuários permissão para executar a API RunInstances usando qualquer instância, par de chaves, grupo de segurança, volume, interface de rede ou sub-rede na região us-east-1 usando permissões em nível de recurso, especificando o ARN para cada recurso.
  • Sid LaunchingEC2withAMIsAndTags permite que os usuários iniciem instâncias do EC2 usando uma AMI se a AMI tiver uma tag Environment com valor definido como Prod e se a AMI estiver na região us-east-1. A permissão em nível de recurso é definida como um ARN para qualquer AMI que esteja na região us-east-1 e a condição corresponde ao valor da chave da tag EC2:ResourceTag/Environment e do valor da chave Prod.

A política do IAM a seguir usa permissões em nível de recurso para os recursos necessários para a ação da API RunInstances. Para obter mais informações sobre os recursos necessários para RunInstances, consulte Permissões de nível de recurso suportadas.

Observação:

  • essa política permite que os usuários listem funções ao iniciar uma instância do EC2, mas os usuários não podem iniciar uma instância com uma função anexada, a menos que tenham a permissão iam:PassRole.
  • Essa política não permite que os usuários criem novos grupos de segurança. Os usuários devem selecionar um grupo de segurança existente para iniciar uma instância do EC2, a menos que tenham a permissão CreateSecurityGroup do EC2. A ação da API EC2:CreateSecurityGroup concede acesso para criar somente um grupo de segurança. Essa ação não adiciona nem modifica qualquer regra. Para adicionar regras de entrada, os usuários devem ter permissões para a ação da API AuthorizeSecurityGroupIngress do EC2 de entrada e para a ação da API AuthorizeSecurityGroupEgress do EC2 de saída.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      }
    }
  ]
}