Monitore o uso de uma Amazon Machine Image compartilhada 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 Amazon Machine Image compartilhada em várias Contas da AWS

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

Resumo

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

Quando uma AMI compartilhada é preterida, cancelada ou não compartilhada, as que Serviços da AWS se referem à AMI nas contas de consumidores 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 os eventos de compartilhamento e uso da AMI ocorrem em vários 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 sem servidor Serviços da AWS, como Amazon EventBridge, Amazon AWS Lambda DynamoDB 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 Contas da AWS: uma conta de criador e uma ou mais contas de consumidor

  • Um ou mais AMIs que são compartilhados da conta do criador para uma conta de consumidor

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

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

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

  • Git, instalado

Limitações

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

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

  • Esse padrão não monitora nenhum AMIs que tenha sido compartilhado antes da implantação dessa solução. Se você quiser monitorar o compartilhamento anterior AMIs, você pode cancelar o compartilhamento da AMI e depois compartilhá-la novamente com as contas do consumidor.

Versões do produto

  • Terraform versão 1.2.0 ou superior

  • Terraform AWS Provider versão 4.20 ou posterior

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

  • AWS Identity and Access Management Função (IAM)

  • AWS Lambda funções

  • 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 do criador é compartilhada com uma conta de consumidor na mesma Região da AWS.

  2. Quando a AMI é compartilhada, uma EventBridge regra 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 uma AWS service (Serviço da AWS) conta do consumidor usa a AMI compartilhada para iniciar uma EC2 instância da Amazon 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 Lambda assume uma função do IAM na conta do criador e atualiza a tabela Lambda na conta do 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 instância IDs ou modelo de execução IDs associado à AMI na Mapping tabela, o processo estará concluído.

  9. Se alguma instância IDs ou modelo de execução IDs estiver associado à AMI na Mapping tabela, a função Lambda usa 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, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS

  • 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 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) 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 AWS CLI nomeados.

Para a conta do criador e a conta de cada consumidor, crie um perfil chamado AWS Command Line Interface (AWS CLI). Para obter instruções, consulte Configurar o AWS CLI no Centro de recursos de AWS introdução.

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 Terraform AWS Provider para a conta do criador e a conta do consumidor da seguinte forma:

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

    • Pararegion, insira o destino Região da AWS em que você deseja implantar essa solução.

    • Paraprofile, insira o perfil AWS CLI nomeado 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 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 o alvo Região da AWS. 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.

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

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

  6. Abra o console do 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.

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

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

  12. Abra o console de EventBridge .

  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.

  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 o alvo Região da AWS. 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.

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

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

  6. Abra o console do 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 console de EventBridge .

  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 instruções, consulte Criar uma AMI a partir de uma EC2 instância da Amazon.

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

DevOps engenheiro

Use a AMI na conta de consumidor.

Na conta do consumidor, use a AMI compartilhada para criar uma EC2 instância da Amazon ou um modelo de execução. Para obter instruções, consulte Como faço para iniciar uma EC2 instância da Amazon a partir de uma AMI personalizada (AWS re:POST Knowledge Center) ou Criar um modelo de lançamento para um grupo do Auto Scaling (documentação do Amazon Auto EC2 Scaling).

DevOps engenheiro

Valide o monitoramento e os alertas.

  1. Faça login na conta do criador.

  2. Abra o EC2 console da Amazon.

  3. No painel de navegação, escolha 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

Excluir os recursos.

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

    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 Epics, use o épico Validar a implantação de recursos para confirmar se a infraestrutura foi provisionada adequadamente em todos eles. 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

AWS documentação

Documentação do Terraform