

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
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform"></a>

*Mike Saintcross und Andrew Ranes, Amazon Web Services*

## Zusammenfassung
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-summary"></a>

Dieses Muster erstellt eine [EC2 Image Builder Builder-Pipeline](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html), die ein gehärtetes [Amazon Linux 2-Basis-Container-Image](https://aws.amazon.com/amazon-linux-2/) erzeugt. Terraform wird als IaC-Tool (Infrastructure as Code) zur Konfiguration und Bereitstellung der Infrastruktur verwendet, die zur Erstellung gehärteter Container-Images verwendet wird. Das Rezept hilft Ihnen bei der Bereitstellung eines Docker-basierten Amazon Linux 2-Container-Images, das gemäß Red Hat Enterprise Linux (RHEL) 7 STIG Version 3 Release 7 ‒ Medium gehärtet wurde. (Siehe [STIG-Build-Linux-Medium Version 2022.2.1](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-stig.html#linux-os-stig) im Abschnitt *Linux STIG-Komponenten* der EC2 Image Builder Builder-Dokumentation.) Dies wird als *goldenes* Container-Image bezeichnet.

Der Build beinhaltet zwei [ EventBridge Amazon-Regeln](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html). Eine Regel startet die Container-Image-Pipeline, wenn das [Ergebnis von Amazon Inspector „](https://docs.aws.amazon.com/inspector/latest/user/findings-managing.html)**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](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-enhanced.html) von Amazon Elastic Container Registry (Amazon ECR) aktiviert sein. Die andere Regel sendet nach einem erfolgreichen Image-Push an das Amazon ECR-Repository Benachrichtigungen an eine Amazon Simple [Queue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-types.html) Service (Amazon SQS) -Warteschlange, um Ihnen bei der Verwendung der neuesten Container-Images zu helfen.

**Anmerkung**  
Amazon Linux 2 nähert sich dem Ende des Supports. Weitere Informationen finden Sie unter [Amazon Linux FAQs 2.](https://aws.amazon.com/amazon-linux-2/faqs/)

## Voraussetzungen und Einschränkungen
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-prereqs"></a>

**Voraussetzungen**
+ Ein [AWS-Konto](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/), in dem Sie die Infrastruktur bereitstellen können.
+ Die [AWS-Befehlszeilenschnittstelle (AWS CLI) wurde installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), um Ihre AWS-Anmeldeinformationen für die lokale Bereitstellung festzulegen.
+ Terraform [wurde heruntergeladen](https://developer.hashicorp.com/terraform/downloads) und eingerichtet, indem Sie den [Anweisungen](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) in der Terraform-Dokumentation folgen.
+ [Git](https://git-scm.com/) (wenn Sie von einem lokalen Computer aus bereitstellen).
+ Eine [Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) innerhalb des AWS-Kontos, mit der Sie AWS-Ressourcen erstellen können.
+ Alle in der Datei [.tfvars](https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables) 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 (Amazon VPC) -Infrastruktur, die ein [NAT-Gateway und ein Internet-Gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) [für Internetkonnektivität](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) aus ihrem privaten Subnetz umfasst. Sie können keine [VPC-Endpunkte](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) verwenden, da der [Bootstrap-Prozess von AWS Task Orchestrator and Executor (AWSTOE](https://aws.amazon.com/premiumsupport/knowledge-center/image-builder-pipeline-execution-error/)) AWS CLI Version 2 aus dem Internet installiert.

**Produktversionen**
+ Amazon Linux 2
+ AWS CLI Version 1.1 oder höher

## Architektur
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-architecture"></a>

**Zieltechnologie-Stack**

Dieses Muster erzeugt 43 Ressourcen, darunter:
+ Zwei Amazon Simple Storage Service (Amazon S3) [-Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html): einer für die Pipeline-Komponentendateien und einer für Serverzugriff und Amazon VPC-Flow-Logs
+ Ein [Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ 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 (AWS KMS) [-Schlüssel](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 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](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) Pipeline.

```
├── 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 in verwendeten Komponenten definieren. `components.tf`
+ `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`und `dist-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 minimale VPC-Infrastruktur, in der das Container-Image bereitgestellt werden soll.
+ `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 Definitionen der AWS Identity and Access Management (IAM) -Richtlinien für das Amazon Elastic Compute Cloud (Amazon EC2) -Instanzprofil 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](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)


Das Diagramm veranschaulicht den folgenden Arbeitsablauf:

1. EC2 Image Builder erstellt mithilfe des definierten Rezepts ein Container-Image, das Betriebssystemupdates installiert und RHEL Medium STIG auf das Amazon Linux 2-Basis-Image anwendet.

1. Das gehärtete Image wird in einer privaten Amazon ECR-Registry veröffentlicht, und eine EventBridge Regel sendet eine Nachricht an eine SQS-Warteschlange, wenn das Image erfolgreich veröffentlicht wurde.

1. Wenn Amazon Inspector für erweitertes Scannen konfiguriert ist, scannt er die Amazon ECR-Registrierung.

1. 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 [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) mit [Account Factory for](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) Terraform-Umgebung. In diesem Fall sollten Sie einen [S3-Bucket mit Backend-Status](https://developer.hashicorp.com/terraform/language/settings/backends/s3) verwenden, um Terraform-Statusdateien zu verwalten, anstatt den Konfigurationsstatus lokal zu verwalten.
+ Für eine skalierte Nutzung stellen Sie die Lösung auf einem zentralen Konto bereit, z. B. einem Shared Services- oder Common Services-Konto, von einem Control Tower- oder Landingzone-Kontomodell aus und gewähren Sie Benutzerkonten die Erlaubnis, auf das Amazon ECR-Repository und den AWS KMS 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 Amazon ECR-Image-Repository zu pushen oder abzurufen](https://repost.aws/knowledge-center/secondary-account-access-ecr)? Fügen Sie beispielsweise in einem [Kontoautomaten oder Account](https://www.hashicorp.com/resources/terraform-landing-zones-for-self-service-multi-aws-at-eventbrite) Factory für Terraform Berechtigungen zu jeder Konto-Baseline oder Kontoanpassungs-Baseline hinzu, um Zugriff auf das Amazon ECR-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](https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-components.html) ä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 Images 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 Amazon ECR-Repository verweist. Dadurch wird eine weitere Pipeline erstellt, die einen anderen übergeordneten Image-Typ für Ihr vorhandenes Amazon ECR-Repository bereitstellt.

## Tools
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-tools"></a>

**Tools**
+ Terraform (IaC-Bereitstellung)
+ Git (bei lokaler Bereitstellung)
+ AWS-CLI Version 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](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) Pipeline. Folgen Sie den Anweisungen im nächsten Abschnitt, um den Beispielcode zu verwenden.

## Epen
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-epics"></a>

### Stellen Sie die Infrastruktur bereit
<a name="provision-the-infrastructure"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie lokale Anmeldeinformationen ein. | Richten Sie Ihre temporären AWS-Anmeldeinformationen ein.[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Klonen Sie das Repository | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Variablen aktualisieren. | Aktualisieren Sie die Variablen in der `hardening-pipeline.tfvars` Datei so, dass sie Ihrer Umgebung und Ihrer gewünschten Konfiguration entsprechen. Sie müssen Ihre eigenen angeben`account_id`. Sie sollten jedoch auch die restlichen Variablen so ändern, dass sie zu Ihrer gewünschten Bereitstellung passen. Alle Variablen sind erforderlich.<pre>account_id     = "<DEPLOYMENT-ACCOUNT-ID>"<br />aws_region     = "us-east-1"<br />vpc_name       = "example-hardening-pipeline-vpc"<br />kms_key_alias = "image-builder-container-key"<br />ec2_iam_role_name = "example-hardening-instance-role"<br />hardening_pipeline_role_name = "example-hardening-pipeline-role"<br />aws_s3_ami_resources_bucket = "example-hardening-ami-resources-bucket-0123"<br />image_name = "example-hardening-al2-container-image"<br />ecr_name = "example-hardening-container-repo"<br />recipe_version = "1.0.0" <br />ebs_root_vol_size = 10</pre><br />Hier ist eine Beschreibung der einzelnen Variablen:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | 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 AWS-Anbieter heruntergeladen und installiert, der in der Konfiguration definiert ist.<pre>terraform init</pre><br />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: `.tfvars`<pre>terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve</pre> | 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.<br />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](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-container-recipes.html) in der EC2 Image Builder Builder-Dokumentation. | AWS-Administrator | 

### Ressourcen validieren
<a name="validate-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Validieren Sie die Bereitstellung der AWS-Infrastruktur. | Wenn Sie Ihren ersten `apply` Terraform-Befehl erfolgreich ausgeführt haben und lokal bereitstellen, sollten Sie diesen Ausschnitt im Terminal Ihres lokalen Computers sehen:<pre>Apply complete! Resources: 43 added, 0 changed, 0 destroyed.</pre> | AWS DevOps | 
| Validieren Sie einzelne AWS-Infrastrukturressourcen. | Um die einzelnen Ressourcen zu validieren, die bereitgestellt wurden, können Sie bei einer lokalen Bereitstellung den folgenden Befehl ausführen:<pre>terraform state list</pre><br />Dieser Befehl gibt eine Liste von 43 Ressourcen zurück. | AWS DevOps | 

### Ressourcen entfernen
<a name="remove-resources"></a>


| Aufgabe | Description | 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:<pre>terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 

## Fehlerbehebung
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Fehler bei der Überprüfung der Anbieteranmeldeinformationen | Wenn Sie den Terraform `apply` - oder `destroy` Befehl von Ihrem lokalen Computer aus ausführen, tritt möglicherweise ein Fehler ähnlich dem folgenden auf:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre><br />Dieser Fehler wird durch den Ablauf des Sicherheitstokens für die in der Konfiguration Ihres lokalen Computers verwendeten Anmeldeinformationen verursacht.<br />Informationen zur Behebung des Fehlers finden Sie unter [Konfigurationseinstellungen einrichten und anzeigen](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) in der AWS-CLI-Dokumentation. | 

## Zugehörige Ressourcen
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-resources"></a>
+ [Terraform EC2 Image Builder Container-Hardening-Pipeline](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) (GitHub Repositorium)
+ [EC2 Image Builder Builder-Dokumentation](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)
+ [AWS Control Tower Account Factory für Terraform](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) (AWS-Blogbeitrag)
+ [S3-Bucket mit Backend-Status (Terraform-Dokumentation](https://developer.hashicorp.com/terraform/language/settings/backends/s3))
+ [Installation oder Aktualisierung der neuesten Version der AWS-CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS-CLI-Dokumentation)
+ [Laden Sie Terraform herunter](https://developer.hashicorp.com/terraform/downloads)