Monitora l'uso di un'Amazon Machine Image condivisa su più account AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Monitora l'uso di un'Amazon Machine Image condivisa su più account AWS

Creato da Naveen Suthar (AWS) e Sandeep Gawande (AWS)

Archivio di cross-account-ami-auditing codice: -terraform-samples

Ambiente: PoC o pilota

Tecnologie: gestione e governance; Senza server DevOps; Operazioni

Servizi AWS: Amazon DynamoDB; AWS Lambda; Amazon EventBridge

Riepilogo

Amazon Machine Images (AMI) vengono utilizzate per creare istanze Amazon Elastic Compute Cloud (Amazon EC2) nel tuo ambiente Amazon Web Services (AWS). Puoi creare AMI in un account AWS separato e centralizzato, chiamato account creator in questo modello. Puoi quindi condividere l'AMI tra più account AWS che si trovano nella stessa regione AWS, che in questo modello vengono chiamati account consumer. La gestione delle AMI da un singolo account offre scalabilità e semplifica la governance. Negli account consumer, puoi fare riferimento all'AMI condivisa nei modelli di avvio di Amazon EC2 Auto Scaling e nei gruppi di nodi Amazon Elastic Kubernetes Service (Amazon EKS).

Quando un'AMI condivisa è obsoleta, cancellatao non condivisa, i servizi AWS che fanno riferimento all'AMI negli account consumer non possono utilizzare questa AMI per lanciare nuove istanze. Qualsiasi evento di ridimensionamento automatico o riavvio della stessa istanza ha esito negativo. Ciò può causare problemi nell'ambiente di produzione, come tempi di inattività delle applicazioni o peggioramento delle prestazioni. Quando si verificano eventi di condivisione e utilizzo dell'AMI in più account AWS, può essere difficile monitorare questa attività.

Questo modello consente di monitorare l'utilizzo e lo stato delle AMI condivise tra gli account nella stessa regione. Utilizza servizi AWS serverless, come Amazon, Amazon DynamoDB EventBridge, AWS Lambda e Amazon Simple Email Service (Amazon SES). Effettua il provisioning dell'infrastruttura come codice (IaC) utilizzando Terraform. HashiCorp Questa soluzione fornisce avvisi quando un servizio in un account consumatore fa riferimento a un'AMI non registrata o non condivisa.

Prerequisiti e limitazioni

Prerequisiti

  • Due o più account AWS attivi: un account Creator e uno o più account consumer

  • Una o più AMI condivise dall'account del creatore a un account consumer

  • Terraform CLI, installata (documentazione Terraform)

  • Terraform AWS Provider, configurato (documentazione Terraform)

  • (Facoltativo, ma consigliato) Backend Terraform, configurato (documentazione Terraform)

  • Git, installato

Limitazioni

  • Questo modello monitora le AMI che sono state condivise con account specifici utilizzando l'ID dell'account. Questo modello non monitora le AMI che sono state condivise con un'organizzazione utilizzando l'ID dell'organizzazione.

  • Le AMI possono essere condivise solo con account che si trovano all'interno della stessa regione AWS. Questo modello monitora le AMI all'interno di un'unica regione di destinazione. Per monitorare l'uso delle AMI in più regioni, è necessario implementare questa soluzione in ciascuna regione.

  • Questo modello non monitora le AMI condivise prima dell'implementazione di questa soluzione. Se desideri monitorare le AMI condivise in precedenza, puoi annullare la condivisione dell'AMI e ricondividerla con gli account utente.

Versioni del prodotto

  • Terraform versione 1.2.0 o successiva

  • Terraform AWS Provider versione 4.20 o successiva

Architettura

Stack tecnologico Target

Le seguenti risorse vengono fornite come IaC tramite Terraform:

  • Tabelle Amazon DynamoDB

  • EventBridge Regole di Amazon

  • Ruolo di AWS Identity and Access Management (IAM)

  • Funzioni AWS Lambda

  • Amazon SES

Architettura Target

Architettura per monitorare l'uso condiviso dell'AMI e avvisare gli utenti se l'AMI non è condivisa o non è registrata

Il diagramma mostra il flusso di lavoro seguente:

  1. Un'AMI nell'account Creator è condivisa con un account consumer nella stessa regione AWS.

  2. Quando l'AMI è condivisa, una EventBridge regola Amazon nell'account creatore acquisisce l'ModifyImageAttributeevento e avvia una funzione Lambda nell'account creatore.

  3. La funzione Lambda archivia i dati relativi all'AMI in una tabella DynamoDB nell'account creatore.

  4. Quando un servizio AWS nell'account consumer utilizza l'AMI condivisa per avviare un'istanza Amazon EC2 o quando l'AMI condivisa è associata a un modello di lancio, una EventBridge regola nell'account consumer rileva l'uso dell'AMI condivisa.

  5. La EventBridge regola avvia una funzione Lambda nell'account consumer. La funzione Lambda; svolge le operazioni seguenti:

    1. La funzione Lambda aggiorna i dati relativi all'AMI in una tabella DynamoDB nell'account consumer.

    2. La funzione Lambda assume un ruolo IAM nell'account creatore e aggiorna la tabella DynamoDB nell'account creatore. Nella Mapping tabella, crea un elemento che associa l'ID dell'istanza o l'ID del modello di avvio al rispettivo ID AMI.

  6. L'AMI gestita centralmente nell'account del creatore è obsoleta, cancellata o non è condivisa.

  7. La EventBridge regola nell'account creatore acquisisce l'DeregisterImageevento ModifyImageAttribute or con l'removeazione e avvia la funzione Lambda.

  8. La funzione Lambda controlla la tabella DynamoDB per determinare se l'AMI viene utilizzata in uno qualsiasi degli account consumer. Se nella Mapping tabella non sono presenti ID di istanza o ID modello di avvio associati all'AMI, il processo è completo.

  9. Se nella Mapping tabella sono associati ID di istanza o ID modello di avvio all'AMI, la funzione Lambda utilizza Amazon SES per inviare una notifica e-mail agli abbonati configurati.

Strumenti

Servizi AWS

  • Amazon DynamoDB è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.

  • Amazon EventBridge è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni AWS Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri account AWS.

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • Amazon Simple Email Service (Amazon SES) Simple Email Service (Amazon SES) ti aiuta a inviare e ricevere e-mail utilizzando i tuoi indirizzi e-mail e domini.

Altri strumenti

  • HashiCorp Terraform è uno strumento open source di infrastruttura come codice (IaC) che ti aiuta a utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

  • Python è un linguaggio di programmazione per computer generico.

Deposito di codice

Il codice per questo pattern è disponibile nel repository GitHub cross-account-ami-monitoring-terraform-samples.

Best practice

Epiche

AttivitàDescrizioneCompetenze richieste

Crea i profili denominati della CLI AWS.

Per l'account creatore e ogni account consumer, crea un profilo denominato AWS Command Line Interface (AWS CLI). Per istruzioni, consulta Configurare l'AWS CLI nell'AWS Getting Started Resources Center.

DevOps ingegnere

Clonare il repository.

Inserire il seguente comando. Questo clona il repository cross-account-ami-monitoring-terraform-samples utilizzando SSH. GitHub

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

Aggiorna il file provider.tf.

  1. Immettete il seguente comando per navigare nella terraform cartella del repository clonato.

    cd cross-account-ami-monitoring/terraform
  2. Apri il file provider.tf.

  3. Aggiorna le configurazioni Terraform AWS Provider per l'account creatore e l'account consumer come segue:

    • Peralias, inserisci un nome per la configurazione del provider.

    • Perregion, inserisci la regione AWS di destinazione in cui desideri implementare questa soluzione.

    • Perprofile, inserisci il profilo denominato AWS CLI per accedere all'account.

  4. Se stai configurando più di un account consumer, crea un profilo per ogni account consumer aggiuntivo.

  5. Salvare e chiudere il file provider.tf.

Per ulteriori informazioni sulla configurazione dei provider, consulta Configurazioni di più provider nella documentazione di Terraform.

DevOps ingegnere

Aggiorna il file terraform.tfvars.

  1. Apri il file terraform.tfvars.

  2. Nel account_email_mapping parametro, configura gli avvisi per l'account creatore e l'account consumatore come segue:

    • Peraccount, inserisci l'ID dell'account.

    • Peremail, inserisci l'indirizzo email a cui desideri inviare gli avvisi. Puoi inserire un solo indirizzo email per ogni account.

  3. Se stai configurando più di un account consumatore, inserisci un account e un indirizzo e-mail per ogni account consumatore aggiuntivo.

  4. Salvare e chiudere il file terraform.tfvars.

DevOps ingegnere

Aggiorna il file.tf principale.

Completa questi passaggi solo se stai distribuendo questa soluzione su più di un account consumatore. Se si implementa questa soluzione su un solo account consumer, non è necessaria alcuna modifica di questo file.

  1. Apri il file main.tf.

  2. Per ogni account consumatore aggiuntivo, crea un nuovo modulo basato sul consumer_account_A modulo del modello. Per ogni account consumatore, forprovider, il valore deve corrispondere all'alias inserito nel provider.tf file.

  3. Salvare e chiudere il file main.tf.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Distribuire la soluzione.

Nella CLI Terraform, inserisci i seguenti comandi per distribuire le risorse AWS negli account creator e consumer:

  1. Inserisci il seguente comando per inizializzare Terraform.

    terraform init
  2. Immettere il seguente comando per convalidare le configurazioni Terraform.

    terraform validate
  3. Immettere il seguente comando per creare un piano di esecuzione Terraform.

    terraform plan
  4. Rivedi le modifiche alla configurazione nel piano Terraform e conferma che desideri implementare queste modifiche.

  5. Immettere il seguente comando per distribuire le risorse.

    terraform apply
DevOps ingegnere

Verifica l'identità dell'indirizzo e-mail.

Quando hai implementato il piano Terraform, Terraform ha creato un indirizzo e-mail per ogni account consumer in Amazon SES. Prima di poter inviare notifiche a quell'indirizzo e-mail, devi verificare l'indirizzo e-mail. Per istruzioni, consulta Verifica dell'identità di un indirizzo e-mail nella documentazione di Amazon SES.

Informazioni generali su AWS
AttivitàDescrizioneCompetenze richieste

Convalida la distribuzione nell'account creatore.

  1. Accedi all'account creatore.

  2. Nella barra di navigazione, conferma che stai visualizzando la regione di destinazione. Se ti trovi in una regione diversa, scegli il nome della regione attualmente visualizzata, quindi scegli la regione di destinazione.

  3. Apri la console DynamoDB all'indirizzo https://console.aws.amazon.com/dynamodb/.

  4. Nel pannello di navigazione, seleziona Tabelle.

  5. Nell'elenco delle tabelle, verifica che la AmiShare tabella sia presente.

  6. Apri la console Lambda all'indirizzo https://console.aws.amazon.com/lambda.

  7. Nel riquadro di navigazione, seleziona Funzioni.

  8. Nell'elenco delle funzioni, verifica che la ami-share funzione sia presente.

  9. Apri la console IAM all'indirizzo https://console.aws.amazon.com/iamv2/.

  10. Nel riquadro di navigazione, seleziona Ruoli.

  11. Nell'elenco dei ruoli, verifica che il external-ddb-role ruolo sia presente.

  12. Apri la EventBridge console all'indirizzo https://console.aws.amazon.com/events/.

  13. Nel pannello di navigazione, scegli Regole.

  14. Nell'elenco delle regole, verifica che la modify_image_attribute_event regola sia presente.

  15. Apri la console Amazon SES all'indirizzo https:/console.aws.amazon.com/ses/.

  16. Nel riquadro di navigazione, scegli Identità verificate.

  17. Nell'elenco delle identità, verifica che l'identità di un indirizzo e-mail sia stata registrata e verificata per ogni account consumatore.

DevOps ingegnere

Convalida l'implementazione nell'account consumer.

  1. Accedi all'account consumer.

  2. Nella barra di navigazione, conferma che stai visualizzando la regione di destinazione. Se ti trovi in una regione diversa, scegli il nome della regione attualmente visualizzata, quindi scegli la regione di destinazione.

  3. Apri la console DynamoDB all'indirizzo https://console.aws.amazon.com/dynamodb/.

  4. Nel pannello di navigazione, seleziona Tabelle.

  5. Nell'elenco delle tabelle, verifica che la Mapping tabella sia presente.

  6. Apri la console Lambda all'indirizzo https://console.aws.amazon.com/lambda.

  7. Nel riquadro di navigazione, seleziona Funzioni.

  8. Nell'elenco delle funzioni, verifica che le ami-deregister-function funzioni ami-usage-function and siano presenti.

  9. Apri la EventBridge console all'indirizzo https://console.aws.amazon.com/events/.

  10. Nel pannello di navigazione, scegli Regole.

  11. Nell'elenco delle regole, verifica che siano presenti ami_deregister_events le regole ami_usage_events and.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Crea un'AMI nell'account del creatore.

  1. Nell'account del creatore, crea un'AMI privata. Per istruzioni, consulta Creare un'AMI da un'istanza Amazon EC2.

  2. Condividi la nuova AMI con uno degli account consumer. Per istruzioni, consulta Condividere un'AMI con account AWS specifici.

DevOps ingegnere

Usa l'AMI nell'account del consumatore.

Nell'account consumer, utilizza l'AMI condivisa per creare un'istanza EC2 o un modello di avvio. Per istruzioni, consulta Come avviare un'istanza EC2 da un'AMI personalizzata (AWS re:Post Knowledge Center) o Come creare un modello di avvio (documentazione di Amazon EC2 Auto Scaling).

DevOps ingegnere

Convalida il monitoraggio e gli avvisi.

  1. Accedi all'account del creatore.

  2. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  3. Nel riquadro di navigazione scegliere AMIs (AMI).

  4. Seleziona l'AMI nell'elenco, quindi scegli Azioni, Modifica autorizzazioni AMI.

  5. Nella sezione Account condivisi, seleziona l'account consumatore, quindi scegli Rimuovi selezionato.

  6. Seleziona Salvataggio delle modifiche.

  7. Verifica che l'indirizzo e-mail di destinazione che hai definito per l'account consumer riceva una notifica che la condivisione è stata annullata per l'AMI.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Eliminare le risorse.

  1. Immetti il seguente comando per rimuovere le risorse distribuite secondo questo schema e interrompere il monitoraggio delle AMI condivise.

    terraform destroy
  2. Conferma il destroy comando inserendo. yes

DevOps ingegnere

Risoluzione dei problemi

ProblemaSoluzione

Non ho ricevuto un avviso via e-mail.

Potrebbero esserci diversi motivi per cui l'e-mail di Amazon SES non è stata inviata. Verifica quanto segue:

  1. Nella sezione Epics, usa l'epic Validate resource deployment per confermare che l'infrastruttura è stata fornita correttamente in tutti gli account AWS.

  2. Convalida gli eventi della funzione Lambda in Amazon CloudWatch Logs. Per istruzioni, consulta Uso della CloudWatch console nella documentazione di Lambda. Verifica che non vi siano problemi di autorizzazione, ad esempio una negazione esplicita in qualsiasi politica basata sull'identità o basata sulle risorse. Per ulteriori informazioni, consulta Logica di valutazione delle politiche nella documentazione IAM.

  3. In Amazon SES, verifica che lo stato dell'identità dell'indirizzo e-mail sia Verificato. Per ulteriori informazioni, consulta Verifica dell'identità di un indirizzo e-mail.

Risorse correlate

Documentazione AWS

Documentazione Terraform