Überwachen Sie die Nutzung eines gemeinsam genutzten Amazon Machine Image über mehrere AWS-Konten - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überwachen Sie die Nutzung eines gemeinsam genutzten Amazon Machine Image über mehrere AWS-Konten

Erstellt von Naveen Suthar (AWS) und Sandeep Gawande (AWS)

cross-account-ami-auditingQuellcode-Repository: -terraform-samples

Umgebung: PoC oder Pilot

Technologien: Verwaltung und Verwaltung; Serverlos DevOps; Betrieb

AWS-Dienste: Amazon DynamoDB; AWS Lambda; Amazon EventBridge

Übersicht

Amazon Machine Images (AMIs) werden verwendet, um Amazon Elastic Compute Cloud (Amazon EC2) -Instances in Ihrer Amazon Web Services (AWS) -Umgebung zu erstellen. Sie können AMIs in einem separaten, zentralisierten AWS-Konto erstellen, das in diesem Muster als Creator-Konto bezeichnet wird. Sie können das AMI dann für mehrere AWS-Konten in derselben AWS-Region gemeinsam nutzen, die in diesem Muster als Verbraucherkonten bezeichnet werden. Die Verwaltung von AMIs von einem einzigen Konto aus bietet Skalierbarkeit und vereinfacht die Verwaltung. In den Verbraucherkonten können Sie auf das gemeinsam genutzte AMI in Amazon EC2 Auto Scaling Scaling-Startvorlagen und Amazon Elastic Kubernetes Service (Amazon EKS) -Knotengruppen verweisen.

Wenn ein gemeinsam genutztes AMI veraltet, deregistriert oder nicht gemeinsam genutzt wird, können AWS-Services, die in den Verbraucherkonten auf das AMI verweisen, dieses AMI nicht verwenden, um neue Instances zu starten. Jedes Auto Scaling-Ereignis oder jeder Relaunch derselben Instance schlägt fehl. Dies kann zu Problemen in der Produktionsumgebung führen, z. B. zu Anwendungsausfällen oder Leistungseinbußen. Wenn AMI-Sharing- und Nutzungsereignisse in mehreren AWS-Konten auftreten, kann es schwierig sein, diese Aktivität zu überwachen.

Dieses Muster hilft Ihnen dabei, die gemeinsame AMI-Nutzung und den Status von Konten in derselben Region zu überwachen. Es verwendet serverlose AWS-Services wie Amazon EventBridge, Amazon DynamoDB, AWS Lambda und Amazon Simple Email Service (Amazon SES). Sie stellen die Infrastruktur als Code (IaC) mithilfe von Terraform bereit. HashiCorp Diese Lösung gibt Warnmeldungen aus, wenn ein Dienst in einem Verbraucherkonto auf ein abgemeldetes oder nicht gemeinsam genutztes AMI verweist.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Dieses Muster überwacht AMIs, die für bestimmte Konten gemeinsam genutzt wurden, anhand der Konto-ID. Dieses Muster überwacht keine AMIs, die mithilfe der Organisations-ID für eine Organisation gemeinsam genutzt wurden.

  • AMIs können nur mit Konten geteilt werden, die sich in derselben AWS-Region befinden. Dieses Muster überwacht AMIs innerhalb einer einzelnen Zielregion. Um die Verwendung von AMIs in mehreren Regionen zu überwachen, setzen Sie diese Lösung in jeder Region ein.

  • Dieses Muster überwacht keine AMIs, die vor der Bereitstellung dieser Lösung gemeinsam genutzt wurden. Wenn Sie zuvor gemeinsam genutzte AMIs überwachen möchten, können Sie die gemeinsame Nutzung des AMI aufheben und es dann erneut mit den Benutzerkonten teilen.

Produktversionen

  • Terraform Version 1.2.0 oder höher

  • Terraform AWS Provider Version 4.20 oder höher

Architektur

Zieltechnologie-Stack

Die folgenden Ressourcen werden als IaC über Terraform bereitgestellt:

  • Amazon-DynamoDB-Tabellen

  • EventBridge Amazon-Regeln

  • Rolle „AWS Identity and Access Management“ (IAM)

  • Funktionen von AWS Lambda

  • Amazon SES

Zielarchitektur

Architektur zur Überwachung der gemeinsamen AMI-Nutzung und zur Benachrichtigung von Benutzern, wenn das AMI nicht gemeinsam genutzt oder deregistriert ist

Das Diagramm zeigt den folgenden Workflow:

  1. Ein AMI im Erstellerkonto wird mit einem Verbraucherkonto in derselben AWS-Region geteilt.

  2. Wenn das AMI geteilt wird, erfasst eine EventBridge Amazon-Regel im Erstellerkonto das ModifyImageAttribute Ereignis und initiiert eine Lambda-Funktion im Erstellerkonto.

  3. Die Lambda-Funktion speichert Daten, die sich auf das AMI beziehen, in einer DynamoDB-Tabelle im Creator-Konto.

  4. Wenn ein AWS-Service im Verbraucherkonto das gemeinsam genutzte AMI verwendet, um eine Amazon EC2 EC2-Instance zu starten, oder wenn das gemeinsam genutzte AMI mit einer Startvorlage verknüpft ist, erfasst eine EventBridge Regel im Verbraucherkonto die Verwendung des gemeinsam genutzten AMI.

  5. Die EventBridge Regel initiiert eine Lambda-Funktion im Verbraucherkonto. Die Lambda-Funktion bewirkt Folgendes:

    1. Die Lambda-Funktion aktualisiert die AMI-bezogenen Daten in einer DynamoDB-Tabelle im Verbraucherkonto.

    2. Die Lambda-Funktion nimmt eine IAM-Rolle im Creator-Konto an und aktualisiert die DynamoDB-Tabelle im Creator-Konto. In der Mapping Tabelle wird ein Element erstellt, das die Instance-ID oder die Startvorlagen-ID der jeweiligen AMI-ID zuordnet.

  6. Das AMI, das zentral im Creator-Konto verwaltet wird, ist veraltet, deregistriert oder nicht gemeinsam genutzt.

  7. Die EventBridge Regel im Creator-Konto erfasst das ModifyImageAttribute DeregisterImage OR-Ereignis mit der remove Aktion und initiiert die Lambda-Funktion.

  8. Die Lambda-Funktion überprüft die DynamoDB-Tabelle, um festzustellen, ob das AMI in einem der Verbraucherkonten verwendet wird. Wenn dem AMI in der Mapping Tabelle keine Instance-IDs oder Startvorlagen-IDs zugeordnet sind, ist der Vorgang abgeschlossen.

  9. Wenn dem AMI in der Mapping Tabelle Instance-IDs oder Startvorlagen-IDs zugeordnet sind, verwendet die Lambda-Funktion Amazon SES, um eine E-Mail-Benachrichtigung an die konfigurierten Abonnenten zu senden.

Tools

AWS-Services

  • Amazon DynamoDB ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.

  • Amazon EventBridge ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel AWS-Lambda-Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen AWS-Konten.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • Amazon Simple Email Service (Amazon SES) unterstützt Sie beim Senden und Empfangen von E-Mails mithilfe Ihrer eigenen E-Mail-Adressen und Domains.

Andere Tools

  • HashiCorp Terraform ist ein Open-Source-Tool für Infrastruktur als Code (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

  • Python ist eine Allzweck-Computerprogrammiersprache.

Code-Repository

Der Code für dieses Muster ist im Repository GitHub cross-account-ami-monitoring-terraform-samples verfügbar.

Bewährte Methoden

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die AWS-CLI mit dem Namen Profile.

Erstellen Sie für das Erstellerkonto und jedes Verbraucherkonto ein AWS-Befehlszeileninterface (AWS CLI) mit dem Namen Profile. Anweisungen finden Sie unter Einrichten der AWS-CLI im AWS Getting Started Resources Center.

DevOps Ingenieur

Klonen Sie das Repository

Geben Sie den folgenden Befehl ein. Dadurch wird das Repository cross-account-ami-monitoring-terraform-samples mithilfe von SSH geklont. GitHub

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

Aktualisieren Sie die Datei provider.tf.

  1. Geben Sie den folgenden Befehl ein, um zu dem terraform Ordner im geklonten Repository zu navigieren.

    cd cross-account-ami-monitoring/terraform
  2. Öffnen Sie die provider.tf Datei.

  3. Aktualisieren Sie die Terraform AWS Provider-Konfigurationen für das Erstellerkonto und das Verbraucherkonto wie folgt:

    • Geben Sie für alias einen Namen für die Anbieterkonfiguration ein.

    • Geben Sie für region die AWS-Zielregion ein, in der Sie diese Lösung bereitstellen möchten.

    • Geben Sie für profile das AWS-CLI-Profil mit dem Namen profile für den Zugriff auf das Konto ein.

  4. Wenn Sie mehr als ein Verbraucherkonto konfigurieren, erstellen Sie ein Profil für jedes weitere Verbraucherkonto.

  5. Speichern und schließen Sie die Datei provider.tf.

Weitere Informationen zur Konfiguration der Anbieter finden Sie unter Konfigurationen mehrerer Anbieter in der Terraform-Dokumentation.

DevOps Ingenieur

Aktualisieren Sie die Datei terraform.tfvars.

  1. Öffnen Sie die terraform.tfvars Datei.

  2. Konfigurieren Sie im account_email_mapping Parameter die Benachrichtigungen für das Erstellerkonto und das Verbraucherkonto wie folgt:

    • Geben Sie für account die Konto-ID ein.

    • Geben Sie für email die E-Mail-Adresse ein, an die Sie Benachrichtigungen senden möchten. Sie können für jedes Konto nur eine E-Mail-Adresse eingeben.

  3. Wenn Sie mehr als ein Verbraucherkonto konfigurieren, geben Sie für jedes weitere Verbraucherkonto ein Konto und eine E-Mail-Adresse ein.

  4. Speichern und schließen Sie die Datei terraform.tfvars.

DevOps Ingenieur

Aktualisieren Sie die Datei main.tf.

Führen Sie diese Schritte nur aus, wenn Sie diese Lösung für mehr als ein Kundenkonto bereitstellen. Wenn Sie diese Lösung nur für ein Verbraucherkonto bereitstellen, ist keine Änderung dieser Datei erforderlich.

  1. Öffnen Sie die main.tf Datei.

  2. Erstellen Sie für jedes weitere Verbraucherkonto ein neues Modul, das auf dem consumer_account_A Modul in der Vorlage basiert. Für jedes Verbraucherkonto sollte der Wert für dem Alias entsprechenprovider, den Sie in der provider.tf Datei eingegeben haben.

  3. Speichern und schließen Sie die Datei main.tf.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Stellen Sie die Lösung bereit.

Geben Sie in der Terraform-CLI die folgenden Befehle ein, um die AWS-Ressourcen in den Creator- und Consumer-Konten bereitzustellen:

  1. Geben Sie den folgenden Befehl ein, um Terraform zu initialisieren.

    terraform init
  2. Geben Sie den folgenden Befehl ein, um die Terraform-Konfigurationen zu validieren.

    terraform validate
  3. Geben Sie den folgenden Befehl ein, um einen Terraform-Ausführungsplan zu erstellen.

    terraform plan
  4. Überprüfen Sie die Konfigurationsänderungen im Terraform-Plan und bestätigen Sie, dass Sie diese Änderungen implementieren möchten.

  5. Geben Sie den folgenden Befehl ein, um die Ressourcen bereitzustellen.

    terraform apply
DevOps Ingenieur

Überprüfen Sie die Identität der E-Mail-Adresse.

Bei der Bereitstellung des Terraform-Plans hat Terraform für jedes Verbraucherkonto in Amazon SES eine E-Mail-Adressidentität erstellt. Bevor Benachrichtigungen an diese E-Mail-Adresse gesendet werden können, müssen Sie die E-Mail-Adresse überprüfen. Anweisungen finden Sie in der Amazon SES SES-Dokumentation unter Verifizieren der Identität einer E-Mail-Adresse.

Allgemeines AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Bestätigen Sie die Bereitstellung im Creator-Konto.

  1. Loggen Sie sich in das Creator-Konto ein.

  2. Bestätigen Sie in der Navigationsleiste, dass Sie die Zielregion sehen. Wenn Sie sich in einer anderen Region befinden, wählen Sie den Namen der aktuell angezeigten Region und dann die Zielregion aus.

  3. Öffnen Sie die DynamoDB-Konsole unter https://console.aws.amazon.com/dynamodb/.

  4. Wählen Sie im Navigationsbereich Tables (Tabellen) aus.

  5. Überprüfen Sie in der Tabellenliste, ob die AmiShare Tabelle vorhanden ist.

  6. Öffnen Sie die Lambda-Konsole unter https://console.aws.amazon.com/lambda.

  7. Wählen Sie im Navigationsbereich Funktionen aus.

  8. Überprüfen Sie in der Liste der Funktionen, ob die ami-share Funktion vorhanden ist.

  9. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iamv2/.

  10. Wählen Sie im Navigationsbereich Rollen aus.

  11. Überprüfen Sie in der Rollenliste, ob die external-ddb-role Rolle vorhanden ist.

  12. Öffnen Sie die EventBridge Konsole unter https://console.aws.amazon.com/events/.

  13. Wählen Sie im Navigationsbereich Regeln aus.

  14. Überprüfen Sie in der Liste der Regeln, ob die modify_image_attribute_event Regel vorhanden ist.

  15. Öffnen Sie die Amazon SES SES-Konsole unter https:/console.aws.amazon.com/ses/.

  16. Wählen Sie im Navigationsbereich Verifizierte Identitäten aus.

  17. Vergewissern Sie sich in der Identitätsliste, dass für jedes Kundenkonto eine E-Mail-Adressidentität registriert und verifiziert wurde.

DevOps Ingenieur

Überprüfen Sie die Bereitstellung im Kundenkonto.

  1. Melden Sie sich beim Verbraucherkonto an.

  2. Vergewissern Sie sich in der Navigationsleiste, dass Sie die Zielregion sehen. Wenn Sie sich in einer anderen Region befinden, wählen Sie den Namen der aktuell angezeigten Region und dann die Zielregion aus.

  3. Öffnen Sie die DynamoDB-Konsole unter https://console.aws.amazon.com/dynamodb/.

  4. Wählen Sie im Navigationsbereich Tables (Tabellen) aus.

  5. Überprüfen Sie in der Tabellenliste, ob die Mapping Tabelle vorhanden ist.

  6. Öffnen Sie die Lambda-Konsole unter https://console.aws.amazon.com/lambda.

  7. Wählen Sie im Navigationsbereich Funktionen aus.

  8. Überprüfen Sie in der Liste der Funktionen, ob die ami-deregister-function Funktionen ami-usage-function und vorhanden sind.

  9. Öffnen Sie die EventBridge Konsole unter https://console.aws.amazon.com/events/.

  10. Wählen Sie im Navigationsbereich Regeln aus.

  11. Vergewissern Sie sich, dass die ami_deregister_events Regeln ami_usage_events und in der Regelliste vorhanden sind.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein AMI im Creator-Konto.

  1. Erstellen Sie im Creator-Konto ein privates AMI. Anweisungen finden Sie unter Erstellen eines AMI aus einer Amazon EC2 EC2-Instance.

  2. Teilen Sie das neue AMI mit einem der Verbraucherkonten. Anweisungen finden Sie unter Ein AMI mit bestimmten AWS-Konten teilen.

DevOps Ingenieur

Verwenden Sie das AMI im Verbraucherkonto.

Verwenden Sie im Verbraucherkonto das gemeinsam genutzte AMI, um eine EC2-Instance oder eine Startvorlage zu erstellen. Anweisungen finden Sie unter Wie starte ich eine EC2-Instance von einem benutzerdefinierten AMI aus (AWS re:POST Knowledge Center) oder Wie erstelle ich eine Startvorlage (Amazon EC2 Auto Scaling Scaling-Dokumentation).

DevOps Ingenieur

Überprüfen Sie die Überwachung und Alarmierung.

  1. Loggen Sie sich in das Creator-Konto ein.

  2. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  3. Wählen Sie im Navigationsbereich die Option AMIs.

  4. Wählen Sie das AMI in der Liste aus und klicken Sie dann auf Aktionen, AMI-Berechtigungen bearbeiten.

  5. Wählen Sie im Abschnitt Gemeinsam genutzte Konten das Verbraucherkonto aus und klicken Sie dann auf Ausgewählte entfernen.

  6. Wählen Sie Änderungen speichern aus.

  7. Stellen Sie sicher, dass die Ziel-E-Mail-Adresse, die Sie für das Verbraucherkonto definiert haben, eine Benachrichtigung erhält, dass die gemeinsame Nutzung für das AMI storniert wurde.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Löschen Sie die Ressourcen.

  1. Geben Sie den folgenden Befehl ein, um die nach diesem Muster bereitgestellten Ressourcen zu entfernen und die Überwachung gemeinsam genutzter AMIs zu beenden.

    terraform destroy
  2. Bestätigen Sie den destroy Befehl durch Eingabeyes.

DevOps Ingenieur

Fehlerbehebung

ProblemLösung

Ich habe keine E-Mail-Benachrichtigung erhalten.

Es kann mehrere Gründe geben, warum die Amazon SES SES-E-Mail nicht gesendet wurde. Überprüfen Sie, ob Folgendes der Fall ist:

  1. Verwenden Sie im Abschnitt Epics das Epic Validate Resource Deployment, um zu überprüfen, ob die Infrastruktur in allen AWS-Konten ordnungsgemäß bereitgestellt wurde.

  2. Überprüfen Sie die Lambda-Funktionsereignisse in Amazon CloudWatch Logs. Anweisungen finden Sie in der Lambda-Dokumentation unter Verwenden der CloudWatch Konsole. Vergewissern Sie sich, dass in identitäts- oder ressourcenbasierten Richtlinien keine Probleme mit Berechtigungen vorliegen, wie z. B. eine ausdrückliche Ablehnung. Weitere Informationen finden Sie in der IAM-Dokumentation unter Bewertungslogik für Richtlinien.

  3. Vergewissern Sie sich in Amazon SES, dass der Status der E-Mail-Adressidentität Verifiziert lautet. Weitere Informationen finden Sie unter Überprüfen der Identität einer E-Mail-Adresse.

Zugehörige Ressourcen

AWS-Dokumentation

Terraform-Dokumentation