Monitore o uso de uma imagem de máquina compartilhada da Amazon em várias contas da AWS - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Monitore o uso de uma imagem de máquina compartilhada da Amazon em várias contas da AWS

Criado por Naveen Suthar (AWS) e Sandeep Gawande (AWS)

Repositório de código: cross-account-ami-auditing -terraform-samples

Ambiente: PoC ou piloto

Tecnologias: gerenciamento e governança DevOps; sem servidor; operações

Serviços da AWS: Amazon DynamoDB; AWS Lambda; Amazon EventBridge

Resumo

Imagens de máquina da Amazon (AMIs) são usadas para criar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) no seu ambiente da Amazon Web Services (AWS). Você pode criar AMIs em uma conta separada e centralizada da AWS, chamada conta de criador nesse padrão. Em seguida, você pode compartilhar a AMI em várias contas da AWS que estão na mesma região da AWS, chamadas contas de consumidor nesse padrão. O gerenciamento de AMIs a partir de uma única conta fornece escalabilidade e simplifica a governança. Nas contas de consumidor, você pode fazer referência à AMI compartilhada nos modelos de execução do Amazon EC2 Auto Scaling e nos grupos de nós do Amazon Elastic Kubernetes Service (Amazon EKS).

Quando uma AMI compartilhada é descontinuada, tem seu registro cancelado ou deixa de ser compartilhada, os serviços da AWS que fazem referência à AMI nas contas de consumidor não podem usar essa AMI para iniciar novas instâncias. Qualquer evento de ajuste de escala automático ou re-execução da mesma instância falha. Isso pode acarretar problemas no ambiente de produção, como tempo de inatividade do aplicativo ou comprometimento do desempenho. Quando eventos de compartilhamento e uso da AMI ocorrem em várias contas da AWS, pode ser difícil monitorar essa atividade.

Esse padrão ajuda você a monitorar o uso e o status compartilhados da AMI em contas na mesma região. Ele usa serviços da AWS sem servidor, como Amazon, Amazon DynamoDB EventBridge, AWS Lambda e Amazon Simple Email Service (Amazon SES). Você provisiona a infraestrutura como código (IaC) usando o HashiCorp Terraform. Essa solução fornece alertas quando um serviço em uma conta de consumidor faz referência a uma AMI com registro cancelado ou não compartilhada.

Pré-requisitos e limitações

Pré-requisitos

  • Duas ou mais contas ativas da AWS: uma conta de criador e uma ou mais contas de consumidor

  • Uma ou mais AMIs que são compartilhadas a partir da conta de criador para uma conta de consumidor

  • CLI do Terraform, instalada (documentação do Terraform)

  • AWS Provider do Terraform, configurado (documentação do Terraform)

  • (Opcional, mas recomendado) Backend do Terraform, configurado (documentação do Terraform)

  • Git, instalado

Limitações

  • Esse padrão monitora as AMIs que foram compartilhadas com contas específicas usando o ID da conta. Esse padrão não monitora as AMIs que foram compartilhadas com uma organização usando o ID da organização.

  • As AMIs só podem ser compartilhadas com contas dentro da mesma região da AWS. Esse padrão monitora as AMIs em uma única região de destino. Para monitorar o uso de AMIs em várias regiões, você implanta essa solução em cada região.

  • Esse padrão não monitora nenhuma AMIs que tenha sido compartilhada antes da implantação dessa solução. Se você quiser monitorar AMIs compartilhadas anteriormente, pode cancelar o compartilhamento das AMIs e, em seguida, compartilhá-las novamente com as contas de consumidor.

Versões do produto

  • Terraform versão 1.2.0 ou superior

  • AWS Provider do Terraform, versão 4.20 ou superior

Arquitetura

Pilha de tecnologias de destino

Os seguintes recursos são provisionados como IaC por meio do Terraform:

  • Tabelas do Amazon DynamoDB

  • EventBridge Regras da Amazon

  • Perfil do AWS Identity and Access Management (IAM)

  • Funções do AWS Lambda

  • Amazon SES

Arquitetura de destino

Arquitetura para monitorar o uso de AMIs compartilhadas e alertar os usuários se a AMI não for compartilhada ou se seu registro tiver sido cancelado

O diagrama mostra o seguinte fluxo de trabalho:

  1. Uma AMI na conta de criador é compartilhada com uma conta de consumidor na mesma região da AWS.

  2. Quando a AMI é compartilhada, uma EventBridge regra da Amazon na conta do criador captura o ModifyImageAttribute evento e inicia uma função Lambda na conta do criador.

  3. A função do Lambda armazena dados relacionados à AMI em uma tabela do DynamoDB na conta de criador.

  4. Quando um serviço da AWS na conta do consumidor usa a AMI compartilhada para iniciar uma instância do Amazon EC2 ou quando a AMI compartilhada é associada a um modelo de execução, uma EventBridge regra na conta do consumidor captura o uso da AMI compartilhada.

  5. A EventBridge regra inicia uma função Lambda na conta do consumidor. A função do Lambda faz o seguinte:

    1. A função do Lambda atualiza os dados relacionados à AMI em uma tabela do DynamoDB na conta de consumidor.

    2. A função do Lambda assume um perfil do IAM na conta de criador e atualiza a tabela do DynamoDB na conta de criador. Na tabela Mapping, ela cria um item que mapeia o ID da instância ou o ID do modelo de execução para o ID de sua respectiva AMI.

  6. A AMI gerenciada centralmente na conta de criador foi descontinuada, teve seu registro cancelado ou não é compartilhada.

  7. A EventBridge regra na conta do criador captura o DeregisterImage evento ModifyImageAttribute or com a remove ação e inicia a função Lambda.

  8. A função do Lambda verifica a tabela do DynamoDB para determinar se a AMI é usada em alguma das contas de consumidor. Se não houver IDs de instância ou IDs de modelo de execução associados à AMI na tabela Mapping, o processo estará concluído.

  9. Se quaisquer IDs de instância ou IDs de modelo de execução estiverem associados à AMI na tabela Mapping, então a função do Lambda usará o Amazon SES para enviar uma notificação por e-mail aos assinantes configurados.

Ferramentas

Serviços da AWS

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

  • EventBridgeA Amazon é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, funções do Lambda, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outras contas da AWS.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • Amazon Simple Email Service (Amazon SES): ajuda você a enviar e receber e-mails usando seus próprios endereços de e-mail e domínios.

Outras ferramentas

  • HashiCorp O Terraform é uma ferramenta de infraestrutura como código (IaC) de código aberto que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código desse padrão está disponível no repositório GitHub cross-account-ami-monitoring-terraform-samples.

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Crie os perfis chamados AWS CLI.

Para a conta de criador e cada conta de consumidor, crie um perfil chamado AWS Command Line Interface (AWS CLI). Para obter instruções, consulte Configurar a AWS CLI  no AWS Getting Started Resources Center.

DevOps engenheiro

Clonar o repositório.

Insira o comando da a seguir. Isso clona o repositório cross-account-ami-monitoring-terraform-samples usando SSH. GitHub

git clone git@github.com:aws-samples/cross-account-ami-monitoring-terraform-samples.git
DevOps engenheiro

Atualize o arquivo provider.tf.

  1. Insira comando a seguir para navegar para a pasta terraform no repositório clonado.

    cd cross-account-ami-monitoring/terraform
  2. Abra o arquivo provider.tf.

  3. Atualize as configurações do AWS Provider do Terraform para a conta de criador e a conta de consumidor da seguinte forma:

    • Em alias, insira um nome para a configuração de provedor.

    • Em region, informe a região da AWS de destino na qual você deseja implantar essa solução.

    • Em profile, insira o perfil chamado AWS CLI para acessar a conta.

  4. Se você estiver configurando mais de uma conta de consumidor, crie um perfil para cada conta adicional de consumidor.

  5. Salve e feche o arquivo provider.tf.

Para obter mais informações sobre como configurar os provedores, consulte Configurações de vários provedores na documentação do Terraform.

DevOps engenheiro

Atualize o arquivo terraform.tfvars.

  1. Abra o arquivo terraform.tfvars.

  2. No parâmetro account_email_mapping, configure alertas para a conta de criador e a conta de consumidor da seguinte forma:

    • Em account, insira o ID da conta.

    • Em email, informe o endereço de e-mail para o qual você deseja enviar alertas. Você pode inserir somente um endereço de e-mail para cada conta.

  3. Se você estiver configurando mais de uma conta de consumidor, insira uma conta e um endereço de e-mail para cada conta de consumidor adicional.

  4. Salve e feche o arquivo terraform.tfvars.

DevOps engenheiro

Atualize o arquivo main.tf.

Conclua essas etapas somente se você estiver implantando essa solução em mais de uma conta de consumidor. Se você estiver implantando essa solução em apenas uma conta de consumidor, nenhuma modificação desse arquivo será necessária.

  1. Abra o arquivo main.tf.

  2. Para cada conta de consumidor adicional, crie um novo módulo baseado no módulo consumer_account_A do modelo. Para cada conta de consumidor, para provider, o valor deve corresponder ao alias que você inseriu no arquivo provider.tf.

  3. Salve e feche o arquivo main.tf.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Implante a solução.

Na CLI do Terraform, insira os seguintes comandos para implantar os recursos da AWS nas contas de criador e consumidor:

  1. Insira o seguinte comando para inicializar o Terraform.

    terraform init
  2. Insira o seguinte comando para validar as configurações do Terraform.

    terraform validate
  3. Insira o seguinte comando para criar um plano de execução do Terraform.

    terraform plan
  4. Revise as alterações de configuração no plano do Terraform e confirme que você deseja implementar essas alterações.

  5. Execute o seguinte comando para implementar os recursos.

    terraform apply
DevOps engenheiro

Verifique a identidade do endereço de e-mail.

Quando você implantou o plano Terraform, o Terraform criou uma identidade de endereço de e-mail para cada conta de consumidor no Amazon SES. Antes de enviar notificações para esse endereço de e-mail, você deve verificá-lo. Para obter instruções, consulte Verificação da identidade de um endereço de e-mail na documentação do Amazon SES.

AWS geral
TarefaDescriçãoHabilidades necessárias

Valide a implantação na conta de criador.

  1. Faça login na conta do criador.

  2. Na barra de navegação, confirme se você está visualizando a região de destino. Se você estiver em outra região, escolha o nome da região exibida atualmente e escolha a região de destino.

  3. Abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/.

  4. No painel de navegação, selecione Tables (Tabelas).

  5. Na lista de tabelas, valide se a tabela AmiShare está presente.

  6. Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda.

  7. Selecione Funções no painel de navegação.

  8. Na lista de funções, valide se a função ami-share está presente.

  9. Abra o console do IAM em https://console.aws.amazon.com/iamv2/.

  10. No painel de navegação, escolha Perfis.

  11. Na lista de funções, valide se a função external-ddb-role está presente.

  12. Abra o EventBridge console em https://console.aws.amazon.com/events/.

  13. No painel de navegação, escolha Regras.

  14. Na lista de regras, valide se a regra modify_image_attribute_event está presente.

  15. Abra o console do Amazon SES em https://console.aws.amazon.com/ses/.

  16. No painel de navegação, escolha Identidades verificadas.

  17. Na lista de identidades, valide se uma identidade de endereço de e-mail foi registrada e verificada para cada conta de consumidor.

DevOps engenheiro

Valide a implantação na conta de consumidor.

  1. Faça login na conta de consumidor.

  2. Na barra de navegação, confirme se você está visualizando a região de destino. Se você estiver em outra região, escolha o nome da região exibida atualmente e escolha a região de destino.

  3. Abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/.

  4. No painel de navegação, selecione Tables (Tabelas).

  5. Na lista de tabelas, valide se a tabela Mapping está presente.

  6. Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda.

  7. Selecione Funções no painel de navegação.

  8. Na lista de funções, valide se as funções ami-usage-function e ami-deregister-function estão presentes.

  9. Abra o EventBridge console em https://console.aws.amazon.com/events/.

  10. No painel de navegação, escolha Regras.

  11. Na lista de regras, valide se as regras ami_usage_events e ami_deregister_events estão presentes.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Crie uma AMI na conta de criador.

  1. Na conta de criador, crie uma AMI privada. Para obter mais informações, consulte Criar uma AMI a partir de uma instância do Amazon EC2.

  2. Compartilhe a nova AMI com uma das contas de consumidor. Para obter instruções, consulte Compartilhar uma AMI com contas específicas da AWS.

DevOps engenheiro

Use a AMI na conta de consumidor.

Na conta de consumidor, use a AMI compartilhada para criar uma instância do EC2 ou um modelo de execução. Para obter instruções, consulte Como faço para executar uma instância do EC2 a partir de uma AMI personalizada (Centro de Conhecimentos ref:Post da AWS) ou Como criar um modelo de execução (documentação do Amazon EC2 Auto Scaling).

DevOps engenheiro

Valide o monitoramento e os alertas.

  1. Faça login na conta do criador.

  2. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  3. No painel de navegação, selecione AMIs.

  4. Selecione sua AMI na lista e, em seguida, escolha Ações, Editar permissões de AMI.

  5. Na seção Contas compartilhadas, selecione a conta de consumidor e escolha Remover selecionada.

  6. Escolha Salvar alterações.

  7. Valide se o endereço de e-mail de destino que você definiu para a conta de consumidor recebe uma notificação de que o compartilhamento foi cancelado para a AMI.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Exclua os recursos.

  1. Digite o comando a seguir para remover os recursos implantados por esse padrão e interrompa o monitoramento AMIs compartilhadas.

    terraform destroy
  2. Confirme o comando destroy inserindo yes.

DevOps engenheiro

Solução de problemas

ProblemaSolução

Não recebi um alerta por e-mail.

Pode haver vários motivos pelos quais o e-mail do Amazon SES não foi enviado. Verifique o seguinte:

  1. Na seção Tópicos, use o tópico Validar a implantação de recursos para confirmar se a infraestrutura foi provisionada adequadamente em todas as contas da AWS.

  2. Valide os eventos da função Lambda no Amazon CloudWatch Logs. Para obter instruções, consulte Como usar o CloudWatch console na documentação do Lambda. Confirme se não há problemas de permissões, como uma negação explícita em qualquer política baseada em identidade ou em recursos. Para obter mais informações, consulte Lógica de avaliação de políticas na documentação do IAM.

  3. No Amazon SES, valide se o status da identidade do endereço de e-mail é Verificado. Para obter mais informações, consulte Verificar identidades de um endereço de e-mail.

Recursos relacionados

Documentação da AWS

Documentação do Terraform