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](images/pattern-img/2d709249-0c68-47d7-be5d-46e8a73071ed/images/8c48c4dd-d681-4c32-9ba8-8f5ad2d66f64.png)
O diagrama mostra o seguinte fluxo de trabalho:
Uma AMI na conta de criador é compartilhada com uma conta de consumidor na mesma região da AWS.
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.A função do Lambda armazena dados relacionados à AMI em uma tabela do DynamoDB na conta de criador.
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.
A EventBridge regra inicia uma função Lambda na conta do consumidor. A função do Lambda faz o seguinte:
A função do Lambda atualiza os dados relacionados à AMI em uma tabela do DynamoDB na conta de consumidor.
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.
A AMI gerenciada centralmente na conta de criador foi descontinuada, teve seu registro cancelado ou não é compartilhada.
A EventBridge regra na conta do criador captura o
DeregisterImage
eventoModifyImageAttribute
or com aremove
ação e inicia a função Lambda.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.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
Siga as Práticas recomendadas para trabalhar com funções do AWS Lambda.
Siga as Melhores práticas para criar AMIs.
Ao criar o perfil do IAM, siga o princípio do privilégio mínimo e conceda as permissões mínimas necessárias para executar uma tarefa. Para obter mais informações, consulte Concessão de privilégio mínimo e nas melhores práticas de segurança na documentação do IAM.
Configure o monitoramento e os alertas para as funções do AWS Lambda. Para obter mais informações, consulte Monitorar e solucionar problemas de funções do Lambda.
Épicos
Tarefa | Descrição | Habilidades 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 | 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
| DevOps engenheiro |
Atualize o arquivo provider.tf. |
Para obter mais informações sobre como configurar os provedores, consulte Configurações de vários provedores | DevOps engenheiro |
Atualize 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.
| DevOps engenheiro |
Tarefa | Descrição | Habilidades 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:
| 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 |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Valide a implantação na conta de criador. |
| DevOps engenheiro |
Valide a implantação na conta de consumidor. |
| DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma AMI na conta de criador. |
| 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 | DevOps engenheiro |
Valide o monitoramento e os alertas. |
| DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Exclua os recursos. |
| DevOps engenheiro |
Solução de problemas
Problema | Soluçã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:
|
Recursos relacionados
Documentação da AWS
Criar funções do Lambda com Python (documentação do Lambda)
Criar uma AMI (documentação do Amazon EC2)
Compartilhar uma AMI com contas específicas da AWS (documentação do Amazon EC2)
Cancelar o registro da sua AMI (documentação do Amazon EC2)
Documentação do Terraform