

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.

# Richten Sie die end-to-end Verschlüsselung für Anwendungen auf Amazon EKS mithilfe von cert-manager und Let's Encrypt ein
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa und Vasanth Jeyaraj, Amazon Web Services*

## Zusammenfassung
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

Die Implementierung von end-to-end Verschlüsselung kann komplex sein, und Sie müssen Zertifikate für jedes Asset in Ihrer Microservices-Architektur verwalten. Obwohl Sie die Transport Layer Security (TLS) -Verbindung am Rand des Amazon Web Services (AWS) -Netzwerks mit einem Network Load Balancer oder Amazon API Gateway beenden können, benötigen einige Organisationen end-to-end Verschlüsselung.

Dieses Muster verwendet den NGINX Ingress Controller für den Ingress. Das liegt daran, dass beim Erstellen eines Kubernetes-Ingress die Ingress-Ressource einen Network Load Balancer verwendet. Der Network Load Balancer erlaubt keine Uploads von Client-Zertifikaten. Daher können Sie mit Kubernetes-Ingress kein gegenseitiges TLS erreichen.

Dieses Muster ist für Organisationen gedacht, die eine gegenseitige Authentifizierung zwischen allen Microservices in ihren Anwendungen benötigen. Mutual TLS reduziert den Aufwand für die Verwaltung von Benutzernamen oder Passwörtern und kann auch das schlüsselfertige Sicherheitsframework verwenden. Der Ansatz dieses Musters ist kompatibel, wenn Ihr Unternehmen über eine große Anzahl verbundener Geräte verfügt oder strenge Sicherheitsrichtlinien einhalten muss.

Dieses Muster trägt dazu bei, die Sicherheitslage Ihres Unternehmens zu verbessern, indem es end-to-end Verschlüsselung für Anwendungen implementiert, die auf Amazon Elastic Kubernetes Service (Amazon EKS) ausgeführt werden. Dieses Muster enthält eine Beispielanwendung und einen Code im GitHub [End-to-end Encryption on Amazon EKS-Repository](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), um zu zeigen, wie ein Microservice mit end-to-end Verschlüsselung auf Amazon EKS ausgeführt wird. Der Ansatz des Musters verwendet [cert-manager](https://cert-manager.io/docs/), ein Add-on für Kubernetes, mit [Let's Encrypt](https://letsencrypt.org/) als Zertifizierungsstelle (CA). Let's Encrypt ist eine kostengünstige Lösung zur Verwaltung von Zertifikaten und bietet kostenlose Zertifikate, die 90 Tage gültig sind. CERT-Manager automatisiert die On-Demand-Bereitstellung und Rotation von Zertifikaten, wenn ein neuer Microservice auf Amazon EKS bereitgestellt wird. 

**Beabsichtigte Zielgruppe**

Dieses Muster wird Benutzern empfohlen, die Erfahrung mit Kubernetes, TLS, Amazon Route 53 und Domain Name System (DNS) haben.

## Voraussetzungen und Einschränkungen
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ Ein vorhandener Amazon-EKS-Cluster.
+ AWS-Befehlszeilenschnittstelle (AWS CLI) Version 1.7 oder höher, installiert und konfiguriert auf macOS, Linux oder Windows.
+ Das `kubectl` Befehlszeilenprogramm, das für den Zugriff auf den Amazon EKS-Cluster installiert und konfiguriert wurde. Weitere Informationen dazu finden Sie unter [Installation von kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation.
+ Ein vorhandener DNS-Name zum Testen der Anwendung. Weitere Informationen dazu finden Sie unter [Registrierung von Domainnamen mit Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) in der Amazon Route 53 53-Dokumentation. 
+ Die neueste [Helm-Version](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), die auf Ihrem lokalen Computer installiert ist. Weitere Informationen dazu finden Sie unter [Using Helm with Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) in der Amazon EKS-Dokumentation und im GitHub [Helm-Repository](https://github.com/helm/helm). 
+ Die GitHub [End-to-end Verschlüsselung im Amazon EKS-Repository](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), auf Ihren lokalen Computer geklont. 
+ Ersetzen Sie die folgenden Werte in den `trustpolicy.json` Dateien `policy.json` und aus der geklonten GitHub [End-to-end Verschlüsselung im Amazon EKS-Repository](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<account number>`— Ersetzen Sie durch die AWS-Konto-ID für das Konto, in dem Sie die Lösung bereitstellen möchten. 
  + `<zone id>`— Ersetzen Sie durch die Route 53 53-Zonen-ID des Domainnamens. 
  + `<node_group_role>`— Durch den Namen der AWS Identity and Access Management (IAM) -Rolle ersetzen, die den Amazon EKS-Knoten zugeordnet ist.
  + `<namespace>`— Ersetzen Sie durch den Kubernetes-Namespace, in dem Sie den NGINX Ingress Controller und die Beispielanwendung bereitstellen.
  + `<application-domain-name>`— Durch den DNS-Domainnamen von Route 53 ersetzen.

**Einschränkungen**
+ Dieses Muster beschreibt nicht, wie Zertifikate rotiert werden, sondern zeigt nur, wie Zertifikate mit Microservices auf Amazon EKS verwendet werden. 

## Architektur
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

Das folgende Diagramm zeigt den Workflow und die Architekturkomponenten für dieses Muster.

![Workflow zum Einrichten der Verschlüsselung für Anwendungen auf Amazon EKS mithilfe von cert-manager und Let's Encrypt.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Das Diagramm zeigt den folgenden Workflow:

1. Ein Client sendet eine Anfrage für den Zugriff auf die Anwendung an den DNS-Namen.

1. Der Route 53 53-Datensatz ist ein CNAME für den Network Load Balancer.

1. Der Network Load Balancer leitet die Anfrage an den NGINX Ingress Controller weiter, der mit einem TLS-Listener konfiguriert ist. Die Kommunikation zwischen dem NGINX Ingress Controller und dem Network Load Balancer folgt dem HTTPS-Protokoll.

1. Der NGINX Ingress Controller führt auf der Grundlage der Anfrage des Clients an den Anwendungsdienst ein pfadbasiertes Routing durch.

1. Der Anwendungsdienst leitet die Anfrage an den Anwendungs-Pod weiter. Die Anwendung ist so konzipiert, dass sie dasselbe Zertifikat verwendet, indem sie Secrets aufruft.

1. Pods führen die Beispielanwendung mithilfe der Cert-Manager-Zertifikate aus. Die Kommunikation zwischen dem NGINX Ingress Controller und den Pods verwendet HTTPS.


| 
| 
| Hinweis: CERT-Manager läuft in einem eigenen Namespace. Es verwendet eine Kubernetes-Clusterrolle, um Zertifikate als Geheimnisse in bestimmten Namespaces bereitzustellen. Sie können diese Namespaces an Anwendungs-Pods und den NGINX Ingress Controller anhängen.  | 
| --- |

## Tools
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**AWS-Services**
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) ist ein verwalteter Service, mit dem Sie Kubernetes auf AWS ausführen können, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren, betreiben und warten zu müssen.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt Ihren eingehenden Traffic automatisch auf mehrere Ziele, Container und IP-Adressen.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) ist ein hochverfügbarer und skalierbarer DNS-Web-Service.

**Andere Tools**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) ist ein Add-on für Kubernetes, das Zertifikate anfordert, sie an Kubernetes-Container verteilt und die Zertifikatserneuerung automatisiert.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) ist eine Lösung für das Verkehrsmanagement für Cloud-native Apps in Kubernetes und containerisierten Umgebungen.

## Epen
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Erstellen und konfigurieren Sie eine öffentlich gehostete Zone mit Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine öffentlich gehostete Zone in Route 53 | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon Route 53 53-Konsole, wählen Sie **Hosted Zones** und dann **Create Hosted Zone** aus. Erstellen Sie eine öffentlich gehostete Zone und notieren Sie sich die Zonen-ID. Weitere Informationen dazu finden Sie unter [Creating a public hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) in der Amazon Route 53 53-Dokumentation.ACME DNS01 verwendet den DNS-Anbieter, um eine Aufforderung an den Cert-Manager zur Ausstellung des Zertifikats zu senden. Bei dieser Aufforderung müssen Sie nachweisen, dass Sie den DNS für Ihren Domainnamen kontrollieren, indem Sie einen bestimmten Wert in einen TXT-Eintrag unter diesem Domainnamen eingeben. Nachdem Let's Encrypt Ihrem ACME-Client ein Token gegeben hat, erstellt Ihr Kunde einen TXT-Eintrag, der von diesem Token und Ihrem Kontoschlüssel abgeleitet ist, und platziert diesen Datensatz unter. `_acme-challenge.<YOURDOMAIN>` Dann fragt Let's Encrypt den DNS nach diesem Datensatz ab. Wenn eine Übereinstimmung gefunden wird, können Sie mit der Ausstellung eines Zertifikats fortfahren. | AWS DevOps | 

### Konfigurieren Sie eine IAM-Rolle, damit der Cert-Manager auf die öffentlich gehostete Zone zugreifen kann
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die IAM-Richtlinie für Cert-Manager.  | Eine IAM-Richtlinie ist erforderlich, um dem Cert-Manager die Erlaubnis zu erteilen, zu überprüfen, ob Sie Eigentümer der Route 53 53-Domäne sind. Die `policy.json` Beispiel-IAM-Richtlinie befindet sich im `1-IAMRole` Verzeichnis im Repository für geklonte GitHub [End-to-end Verschlüsselung im Amazon EKS-Repository](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).<br />Geben Sie den folgenden Befehl in der AWS-CLI ein, um die IAM-Richtlinie zu erstellen.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Erstellen Sie die IAM-Rolle für cert-manager. | Nachdem Sie die IAM-Richtlinie erstellt haben, müssen Sie eine IAM-Rolle erstellen. Die `trustpolicy.json` IAM-Beispielrolle wird im Verzeichnis bereitgestellt. `1-IAMRole`<br />Geben Sie den folgenden Befehl in der AWS-CLI ein, um die IAM-Rolle zu erstellen.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Fügen Sie der Rolle die -Richtlinie an. | Geben Sie den folgenden Befehl in der AWS-CLI ein, um die IAM-Richtlinie an die IAM-Rolle anzuhängen. `AWS_ACCOUNT_ID`Ersetzen Sie es durch die ID Ihres AWS-Kontos. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Den NGINX Ingress Controller in Amazon EKS einrichten
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den NGINX Ingress Controller bereit. | Installieren Sie die neueste Version von `nginx-ingress` Using Helm. Sie können die `nginx-ingress` Konfiguration vor der Bereitstellung an Ihre Anforderungen anpassen. Dieses Muster verwendet einen mit Anmerkungen versehenen, nach innen gerichteten Network Load Balancer, der im Verzeichnis verfügbar ist. `5-Nginx-Ingress-Controller` <br />Installieren Sie den NGINX Ingress Controller, indem Sie den folgenden Helm-Befehl aus dem Verzeichnis ausführen. `5-Nginx-Ingress-Controller`<br />`helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Stellen Sie sicher, dass der NGINX Ingress Controller installiert ist. | Geben Sie den `helm list`-Befehl ein. Die Ausgabe sollte zeigen, dass der NGINX Ingress Controller installiert ist. | AWS DevOps | 
| Erstellen Sie einen Route 53 A-Datensatz. | Der A-Datensatz verweist auf den Network Load Balancer, der vom NGINX Ingress Controller erstellt wurde.[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### NGINX VirtualServer auf Amazon EKS einrichten
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie NGINX VirtualServer bereit. | Die VirtualServer NGINX-Ressource ist eine Lastausgleichskonfiguration, die eine Alternative zur Eingangsressource darstellt. Die Konfiguration zum Erstellen der VirtualServer NGINX-Ressource ist in der Datei im `nginx_virtualserver.yaml` Verzeichnis verfügbar. `6-Nginx-Virtual-Server` Geben Sie den folgenden Befehl ein, `kubectl` um die VirtualServer NGINX-Ressource zu erstellen.<br />`kubectl apply -f  nginx_virtualserver.yaml`Stellen Sie sicher, dass Sie den Anwendungsdomänennamen, den geheimen Zertifikatsschlüssel und den Namen des Anwendungsdienstes in der `nginx_virtualserver.yaml` Datei aktualisieren. | AWS DevOps | 
| Stellen Sie sicher, dass NGINX erstellt wurde VirtualServer . | Geben Sie den folgenden Befehl ein`kubectl`, um zu überprüfen, ob die VirtualServer NGINX-Ressource erfolgreich erstellt wurde.<br />`kubectl get virtualserver`Stellen Sie sicher, dass die `Host` Spalte mit dem Domainnamen Ihrer Anwendung übereinstimmt. | AWS DevOps | 
| Stellen Sie den NGINX-Webserver mit aktiviertem TLS bereit. | Dieses Muster verwendet einen NGINX-Webserver mit aktiviertem TLS als Anwendung zum Testen der Verschlüsselung. end-to-end Die für die Bereitstellung der Testanwendung erforderlichen Konfigurationsdateien sind im `demo-webserver` Verzeichnis verfügbar. <br />Geben Sie den folgenden Befehl ein`kubectl`, um die Testanwendung bereitzustellen.<br />`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Stellen Sie sicher, dass die Ressourcen für die Testanwendung erstellt wurden. | Geben Sie die folgenden Befehle ein, `kubectl` um zu überprüfen, ob die erforderlichen Ressourcen für die Testanwendung erstellt wurden:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validieren Sie die Anwendung. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Zugehörige Ressourcen
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**AWS-Ressourcen**
+ [Erstellen von Datensätzen mithilfe der Amazon Route 53 53-Konsole](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (Amazon Route 53 53-Dokumentation)
+ [Verwenden eines Network Load Balancer mit dem NGINX-Ingress-Controller auf Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (AWS-Blogbeitrag)

**Sonstige Ressourcen**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (Cert-Manager-Dokumentation)
+ [Konfiguration des DNS01 Challenge Providers](https://cert-manager.io/docs/configuration/acme/dns01/) (Cert-Manager-Dokumentation)
+ [Lassen Sie uns die DNS-Herausforderung verschlüsseln (Let's Encrypt-Dokumentation](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge))