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.

Resolução

Para restringir o acesso para que os usuários iniciem instâncias do EC2 somente a partir de AMIs marcadas, execute uma das seguintes ações:

  • Crie uma AMI a partir de uma instância existente.
  • Use uma AMI existente e adicione uma tag à AMI.

Em seguida, crie uma política personalizada do AWS Identity and Access Management (IAM). A política do IAM usa uma condição de tag que restringe as permissões do usuário para iniciar somente instâncias que usam a AMI marcada.

No exemplo de política do IAM a seguir, esses valores de Sid (ID da declaração) são usados:

  • O ReadOnlyAccess permite que os usuários visualizem os recursos do EC2 em sua conta com Describe*, que inclui todas as ações do EC2 que começam com Describe. O ReadOnlyAccess também permite que os usuários obtenham a saída do console e as capturas de tela do console de uma instância. As permissões do Amazon CloudWatch para DescribeAlarms e GetMetricStatistics permitem que informações básicas de integridade sobre instâncias 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. A lista de perfis do IAM aparece na página Configure os detalhes da instância quando você inicia uma instância. No entanto, a API ListInstanceProfiles não permite que os usuários anexem um perfil do IAM a uma instância.
  • ActionsRequiredtoRunInstancesInVPC concede aos usuários permissão para executar a API RunInstances. Você pode usar qualquer instância, par de chaves, grupo de segurança, volume, interface de rede ou sub-rede na região us-east-1 da AWS. As permissões em nível de recurso especificam o ARN para cada recurso.
  • LaunchingEC2withAMIsAndTags permite que os usuários usem uma AMI para iniciar instâncias. A AMI deve ter uma tag Environment com o valor definido como Prod 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. A condição corresponde ao valor da chave de 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 compatíveis para os recursos necessários para a ação da API RunInstances.

Observação:

  • essa política permite que os usuários listem funções ao iniciar uma instância. No entanto, os usuários podem iniciar uma instância com uma função anexada somente quando tiverem a permissão iam:PassRole.
  • Essa política não permite que os usuários criem novos grupos de segurança. A menos que os usuários tenham a permissão CreateSecurityGroup do EC2, eles devem selecionar um grupo de segurança existente para iniciar uma instância do EC2. A ação da API EC2:CreateSecurityGroup concede acesso para criar somente um grupo de segurança. A ação não adiciona nem modifica nenhuma regra. Para adicionar regras de entrada, os usuários devem ter permissões para a ação de entrada da API AuthorizeSecurityGroupIngress do EC2 e para a ação de saída da API AuthorizeSecurityGroupEgress do EC2.
  • Essa política não permite que os usuários anexem o nome da instância ou modifiquem e anexem tags ao recurso da instância do EC2. A menos que os usuários tenham a permissão CreateTags ao criar a instância, eles devem deixar as tags e o nome em branco.
{  "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"
        }
      }
    }
  ]
}