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.
Erstellen Sie mit EC2 Image Builder und Terraform eine Pipeline für gehärtete Container-Images
Erstellt von Mike Saintcross (AWS) und Andrew Ranes () AWS
Quellcode-Repository: Terraform EC2 Image Builder Container | Umgebung: Produktion | Quelle: Packer, Chef oder Pure Ansible |
Ziel: EC2 Image Builder | R-Typ: Re-Architect | Arbeitsaufwand: Open Source |
Technologien: Sicherheit, Identität, Einhaltung von Vorschriften; DevOps | AWSDienste: Amazon EC2 Container Registry; EC2 Image Builder |
Übersicht
Dieses Muster erstellt eine EC2Image Builder Builder-Pipeline, die ein gehärtetes Amazon Linux 2-Basis-Container-Image
Der Build beinhaltet zwei EventBridge Amazon-Regeln. Eine Regel startet die Container-Image-Pipeline, wenn das Ergebnis von Amazon Inspector „Hoch“ oder „Kritisch“ lautet, sodass unsichere Images ersetzt werden. Für diese Regel müssen sowohl das erweiterte Scannen von Amazon Inspector als auch das erweiterte Scannen von Amazon Elastic Container Registry (AmazonECR) aktiviert sein. Die andere Regel sendet nach einem erfolgreichen Image-Push an das ECR Amazon-Repository Benachrichtigungen an eine Amazon Simple Queue Service (AmazonSQS) -Warteschlange, um Ihnen bei der Verwendung der neuesten Container-Images zu helfen.
Hinweis: Amazon Linux 2 nähert sich dem Ende des Supports. Weitere Informationen finden Sie unter Amazon Linux FAQs 2.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein AWSKonto
, in dem Sie die Infrastruktur bereitstellen können. AWSDie Befehlszeilenschnittstelle (AWSCLI) ist installiert, um Ihre AWS Anmeldeinformationen für die lokale Bereitstellung festzulegen.
Terraform wurde heruntergeladen
und eingerichtet, indem Sie den Anweisungen in der Terraform-Dokumentation folgen. Git
(wenn Sie von einem lokalen Computer aus bereitstellen). Eine Rolle innerhalb des AWS Kontos, mit der Sie AWS Ressourcen erstellen können.
Alle in der Datei .tfvars
definierten Variablen. Oder Sie können alle Variablen definieren, wenn Sie die Terraform-Konfiguration anwenden.
Einschränkungen
Diese Lösung erstellt eine Amazon Virtual Private Cloud (AmazonVPC) -Infrastruktur, die ein NATGateway und ein Internet-Gateway für Internetkonnektivität aus ihrem privaten Subnetz umfasst. Sie können keine VPCEndpunkte verwenden, da der Bootstrap-Prozess von AWS Task Orchestrator und Executor (AWSTOE
) Version 2 aus dem Internet installiert AWSCLI.
Produktversionen
Amazon Linux 2
AWSCLIVersion 1.1 oder höher
Architektur
Zieltechnologie-Stack
Dieses Muster erzeugt 43 Ressourcen, darunter:
Zwei Amazon Simple Storage Service (Amazon S3) -Buckets: einer für die Pipeline-Komponentendateien und einer für Serverzugriff und Amazon VPC Flow-Logs
Eine virtuelle private Cloud (VPC), die ein öffentliches Subnetz, ein privates Subnetz, Routing-Tabellen, ein NAT Gateway und ein Internet-Gateway enthält
Eine EC2 Image Builder Builder-Pipeline, ein Rezept und Komponenten
Ein Container-Image
Ein AWS Key Management Service (AWSKMS) -Schlüssel für die Bildverschlüsselung
Eine SQS-Warteschlange
Drei Rollen: eine für die Ausführung der EC2 Image Builder-Pipeline, ein Instanzprofil für EC2 Image Builder und eine für EventBridge Regeln
Zwei EventBridge Regeln
Struktur des Terraform-Moduls
Den Quellcode finden Sie im GitHub Repository Terraform EC2 Image Builder Container Hardening
├── components.tf ├── config.tf ├── dist-config.tf ├── files │ └──assumption-policy.json ├── hardening-pipeline.tfvars ├── image.tf ├── infr-config.tf ├── infra-network-config.tf ├── kms-key.tf ├── main.tf ├── outputs.tf ├── pipeline.tf ├── recipes.tf ├── roles.tf ├── sec-groups.tf ├── trigger-build.tf └── variables.tf
Einzelheiten zum Modul
components.tf
enthält eine Amazon S3 S3-Upload-Ressource, um den Inhalt des/files
Verzeichnisses hochzuladen. Sie können hier auch modular benutzerdefinierte YAML Komponentendateien hinzufügen./files
enthält die.yml
Dateien, die die incomponents.tf
verwendeten Komponenten definieren.image.tf
enthält die Definitionen für das Basis-Image-Betriebssystem. Hier können Sie die Definitionen für eine andere Basis-Image-Pipeline ändern.infr-config.tf
unddist-config.tf
enthalten die Ressourcen für die AWS Mindestinfrastruktur, die für die Einrichtung und Verteilung des Images erforderlich ist.infra-network-config.tf
enthält die VPC Mindestinfrastruktur für die Bereitstellung des Container-Images.hardening-pipeline.tfvars
enthält die Terraform-Variablen, die zum Zeitpunkt der Anwendung verwendet werden sollen.pipeline.tf
erstellt und verwaltet eine EC2 Image Builder Builder-Pipeline in Terraform.recipes.tf
Hier können Sie verschiedene Mischungen von Komponenten angeben, um Container-Rezepte zu erstellen.roles.tf
enthält die AWS Identity and Access Management (IAM) -Richtliniendefinitionen für das Amazon Elastic Compute Cloud (AmazonEC2) -Instance-Profil und die Pipeline-Bereitstellungsrolle.trigger-build.tf
enthält die EventBridge Regeln und SQS Warteschlangenressourcen.
Zielarchitektur
![Architektur und Arbeitsablauf für den Aufbau einer Pipeline für gehärtete Container-Images](images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)
Das Diagramm veranschaulicht den folgenden Arbeitsablauf:
EC2Image Builder erstellt mithilfe des definierten Rezepts ein Container-Image, das Betriebssystemupdates installiert und das RHEL Medium STIG auf das Amazon Linux 2-Basis-Image anwendet.
Das gehärtete Image wird in einer privaten ECR Amazon-Registry veröffentlicht, und eine EventBridge Regel sendet eine Nachricht an eine SQS Warteschlange, wenn das Image erfolgreich veröffentlicht wurde.
Wenn Amazon Inspector für erweitertes Scannen konfiguriert ist, scannt er die ECR Amazon-Registrierung.
Wenn Amazon Inspector den Schweregrad Kritisch oder Hoch für das Image generiert, veranlasst eine EventBridge Regel, dass die EC2 Image Builder Builder-Pipeline erneut ausgeführt und ein neu gehärtetes Image veröffentlicht wird.
Automatisierung und Skalierung
Dieses Muster beschreibt, wie Sie die Infrastruktur bereitstellen und die Pipeline auf Ihrem Computer aufbauen. Es ist jedoch für den Einsatz in großem Umfang vorgesehen. Anstatt die Terraform-Module lokal bereitzustellen, können Sie sie in einer Umgebung mit mehreren Konten verwenden, z. B. in einer AWSControl Tower mit Account Factory für
Terraform-Umgebung. In diesem Fall sollten Sie einen S3-Bucket mit Backend-Status verwenden, um Terraform-Statusdateien zu verwalten, anstatt den Konfigurationsstatus lokal zu verwalten. Für eine skalierte Nutzung stellen Sie die Lösung von einem Control Tower- oder Landingzone-Kontomodell aus auf einem zentralen Konto bereit, z. B. einem Shared Services- oder Common Services-Konto, und gewähren Sie Benutzerkonten die Erlaubnis, auf das ECR Amazon-Repository und den AWS KMS Schlüssel zuzugreifen. Weitere Informationen zur Einrichtung finden Sie im re:POST-Artikel Wie kann ich einem sekundären Konto erlauben, Bilder in meinem ECR Amazon-Bild-Repository zu pushen oder abzurufen
? Fügen Sie beispielsweise in einem Kontoautomaten oder Account Factory für Terraform Berechtigungen zu jeder Konto-Baseline oder Kontoanpassungs-Baseline hinzu, um Zugriff auf das ECR Amazon-Repository und den Verschlüsselungsschlüssel zu gewähren. Nachdem die Container-Image-Pipeline bereitgestellt wurde, können Sie sie mithilfe von EC2 Image Builder Builder-Funktionen wie Komponenten ändern, die Ihnen helfen, mehr Komponenten in den Docker-Build zu packen.
Der AWS KMS Schlüssel, der zum Verschlüsseln des Container-Images verwendet wird, sollte von allen Konten gemeinsam genutzt werden, in denen das Image verwendet werden soll.
Sie können Unterstützung für andere Bilder hinzufügen, indem Sie das gesamte Terraform-Modul duplizieren und die folgenden Attribute ändern:
recipes.tf
Ändern Sie
parent_image = "amazonlinux:latest"
zu einem anderen Bildtyp.Ändern Sie
repository_name
es so, dass es auf ein vorhandenes ECR Amazon-Repository verweist. Dadurch wird eine weitere Pipeline erstellt, die einen anderen übergeordneten Image-Typ für Ihr bestehendes ECR Amazon-Repository bereitstellt.
Tools
Tools
Terraform (IaC-Bereitstellung)
Git (bei lokaler Bereitstellung)
AWSCLIVersion 1 oder Version 2 (bei lokaler Bereitstellung)
Kode
Der Code für dieses Muster befindet sich im GitHub Repository Terraform EC2 Image Builder Container Hardening
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Richten Sie lokale Anmeldeinformationen ein. | Richten Sie Ihre AWS temporären Anmeldeinformationen ein.
| AWS DevOps |
Klonen Sie das Repository |
| AWS DevOps |
Variablen aktualisieren. | Aktualisieren Sie die Variablen in der
Hier ist eine Beschreibung der einzelnen Variablen:
| AWS DevOps |
Initialisieren Sie Terraform. | Nachdem Sie Ihre Variablenwerte aktualisiert haben, können Sie das Terraform-Konfigurationsverzeichnis initialisieren. Durch die Initialisierung eines Konfigurationsverzeichnisses wird der in der Konfiguration definierte AWS Anbieter heruntergeladen und installiert.
Sie sollten eine Meldung sehen, die besagt, dass Terraform erfolgreich initialisiert wurde und die Version des Anbieters identifiziert wird, die installiert wurde. | AWS DevOps |
Stellen Sie die Infrastruktur bereit und erstellen Sie ein Container-Image. | Verwenden Sie den folgenden Befehl, um die Terraform-Module mithilfe der in Ihrer Datei definierten Variablen zu initialisieren, zu validieren und auf die Umgebung anzuwenden:
| AWS DevOps |
Passen Sie den Container an. | Sie können eine neue Version eines Container-Rezepts erstellen, nachdem EC2 Image Builder die Pipeline und das erste Rezept bereitgestellt hat. Sie können jede der mehr als 31 in EC2 Image Builder verfügbaren Komponenten hinzufügen, um den Container-Build anzupassen. Weitere Informationen finden Sie im Abschnitt Komponenten unter Erstellen einer neuen Version eines Container-Rezepts in der EC2 Image Builder Builder-Dokumentation. | AWSAdministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Überprüfen Sie AWS die Bereitstellung der Infrastruktur. | Wenn Sie Ihren ersten
| AWS DevOps |
Validieren Sie einzelne Infrastrukturressourcen. AWS | Um die einzelnen Ressourcen zu überprüfen, die bereitgestellt wurden, können Sie bei einer lokalen Bereitstellung den folgenden Befehl ausführen:
Dieser Befehl gibt eine Liste mit 43 Ressourcen zurück. | AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Entfernen Sie die Infrastruktur und das Container-Image. | Wenn Sie mit Ihrer Terraform-Konfiguration fertig sind, können Sie den folgenden Befehl ausführen, um Ressourcen zu entfernen:
| AWS DevOps |
Fehlerbehebung
Problem | Lösung |
---|---|
Fehler bei der Überprüfung der Anmeldeinformationen des Anbieters | Wenn Sie den Terraform
Dieser Fehler wird durch den Ablauf des Sicherheitstokens für die in der Konfiguration Ihres lokalen Computers verwendeten Anmeldeinformationen verursacht. Informationen zur Behebung des Fehlers finden Sie in der AWS CLI Dokumentation unter Konfigurationseinstellungen einrichten und anzeigen. |
Zugehörige Ressourcen
Terraform EC2 Image Builder Container-Hardening-Pipeline
(GitHub Repositorium) AWSControl Tower Account Factory für Terraform
(AWSBlogbeitrag) Installation oder Aktualisierung der neuesten Version von (Dokumentation) AWS CLI AWS CLI