Aktivieren Sie mTLS in AWS App Mesh mithilfe von AWS Private CA auf Amazon EKS - 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.

Aktivieren Sie mTLS in AWS App Mesh mithilfe von AWS Private CA auf Amazon EKS

Erstellt von Omar Kahil (AWS), Emmanuel Saliu (AWS), Muhammad Shahzad (AWS) und Andy Wong (AWS)

Umgebung: PoC oder Pilotprojekt

Technologien: Container und Mikroservices

AWS-Services: AWS App Mesh; Amazon EKS; AWS Certificate Manager (ACM)

Übersicht

Dieses Muster zeigt, wie Mutual Transport Layer Security (mTLS) auf Amazon Web Services (AWS) mithilfe von Zertifikaten von AWS Private Certificate Authority (AWS Private CA) in AWS App Mesh implementiert wird. Es verwendet die Envoy Secret Discovery Service (SDS) -API über das Secure Production Identity Framework for Everyone (SPIFFE). SPIFFE ist ein Open-Source-Projekt der Cloud Native Computing Foundation (CNCF) mit breiter Unterstützung durch die Community, das ein detailliertes und dynamisches Workload-Identitätsmanagement bietet. Verwenden Sie zur Implementierung der SPIFFE-Standards die SPIFFE-Laufzeitumgebung von SPIRE.

Die Verwendung von mTLS in App Mesh bietet eine bidirektionale Peer-Authentifizierung, da sie eine Sicherheitsebene gegenüber TLS bietet und es den Diensten im Mesh ermöglicht, den Client zu verifizieren, der die Verbindung herstellt. Der Client in der Client-Server-Beziehung stellt während des Sitzungsverhandlungsprozesses auch ein X.509-Zertifikat bereit. Der Server verwendet dieses Zertifikat, um den Client zu identifizieren und zu authentifizieren. Auf diese Weise kann überprüft werden, ob das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (CA) ausgestellt wurde und ob das Zertifikat gültig ist.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster mit selbstverwalteten oder verwalteten Knotengruppen

  • Auf dem Cluster bereitgestellter App Mesh Mesh-Controller mit aktiviertem SDS

  • Ein privates Zertifikat von AWS Certificate Manager (ACM), das von AWS Private CA ausgestellt wurde

Einschränkungen

  • SPIRE kann nicht auf AWS Fargate installiert werden, da der SPIRE-Agent als DaemonSet Kubernetes ausgeführt werden muss.

Produktversionen

  • AWS App Mesh Controller-Diagramm 1.3.0 oder höher

Architektur

Das folgende Diagramm zeigt den EKS-Cluster mit App Mesh in der VPC. Der SPIRE-Server in einem Worker-Knoten kommuniziert mit den SPIRE-Agenten in anderen Worker-Knoten und mit AWS Private CA. Envoy wird für die mTLS-Kommunikation zwischen den SPIRE Agent-Worker-Knoten verwendet.

EKS-Cluster-Worker-Knoten mit SPIRE Agents and Server, App Mesh und Envoys for mTLS.

Die Abbildung zeigt die folgenden Schritte:

  1. Das Zertifikat wurde ausgestellt.

  2. Zertifikatssignierung und Zertifikat anfordern.

Tools

AWS-Services

  • AWS Private CA — AWS Private Certificate Authority (AWS Private CA) ermöglicht die Erstellung von Hierarchien von privaten Zertifizierungsstellen (CA), einschließlich Stamm- und untergeordneter Zertifizierungsstellen, ohne die Investitions- und Wartungskosten für den Betrieb einer lokalen CA.

  • AWS App Mesh — AWS App Mesh ist ein Service Mesh, das die Überwachung und Steuerung von Services erleichtert. App Mesh standardisiert die Art und Weise, wie Ihre Dienste kommunizieren, und bietet Ihnen so konsistente Transparenz und Netzwerkverkehrskontrollen für jeden Service in einer Anwendung.

  • Amazon EKS — Amazon Elastic Kubernetes Service (Amazon EKS) 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.

Andere Tools

  • Helm — Helm ist ein Paketmanager für Kubernetes, der Sie bei der Installation und Verwaltung von Anwendungen auf Ihrem Kubernetes-Cluster unterstützt. Dieses Muster verwendet Helm, um den AWS App Mesh Controller bereitzustellen.

  • AWS App Mesh Controller-Diagramm — Das AWS App Mesh Controller-Diagramm wird von diesem Muster verwendet, um AWS App Mesh auf Amazon EKS zu aktivieren.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie App Mesh mit Amazon EKS ein.

Folgen Sie den grundlegenden Bereitstellungsschritten, die im Repository bereitgestellt werden.

DevOps Ingenieur

Installieren Sie SPIRE.

Installieren Sie SPIRE mithilfe von spire_setup.yaml auf dem EKS-Cluster.

DevOps Ingenieur

Installieren Sie das AWS Private CA-Zertifikat.

Erstellen und installieren Sie ein Zertifikat für Ihre private Root-CA, indem Sie den Anweisungen in der AWS-Dokumentation folgen.

DevOps Ingenieur

Erteilen Sie der Instanzrolle des Clusterknotens Berechtigungen.

Verwenden Sie den Code im Abschnitt Zusätzliche Informationen, um der Clusterknoten-Instanzrolle Richtlinien zuzuweisen.

DevOps Ingenieur

Fügen Sie das SPIRE-Plugin für AWS Private CA hinzu.

Verwenden Sie den Code im Abschnitt Zusätzliche Informationen, um das Plugin zur SPIRE-Serverkonfiguration hinzuzufügen. Ersetzen Sie den certificate_authority_arn Amazon Resource Name (ARN) durch Ihren privaten CA-ARN. Der verwendete Signaturalgorithmus muss mit dem Signaturalgorithmus auf der privaten CA identisch sein. Ersetzen Sie your_region durch Ihre AWS-Region.

Weitere Informationen zum Plugin finden Sie unter Server-Plugin: UpstreamAuthority „aws_pca“.

DevOps Ingenieur

Bundle.cert aktualisieren.

Nachdem Sie den SPIRE-Server erstellt haben, wird eine spire-bundle.yaml Datei erstellt. Ändern Sie den bundle.crt Wert in der spire-bundle.yaml Datei von der privaten Zertifizierungsstelle in das öffentliche Zertifikat.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Registrieren Sie Knoten- und Workload-Einträge bei SPIRE.

Verwenden Sie den Code im Repository, um Knoten und Workload (Dienste) beim SPIRE-Server zu registrieren.

DevOps Ingenieur

Erstellen Sie ein Mesh in App Mesh mit aktiviertem mTLS.

Erstellen Sie in App Mesh ein neues Mesh mit allen Komponenten für Ihre Microservices-Anwendung (z. B. virtueller Dienst, virtueller Router und virtuelle Knoten).

DevOps Ingenieur

Überprüfen Sie die registrierten Einträge.

Sie können die registrierten Einträge für Ihre Knoten und Workloads überprüfen, indem Sie den folgenden Befehl ausführen.

kubectl exec -n spire spire-server-0 -- /opt/spire/bin/spire-server entry show

Dadurch werden die Einträge für die SPIRE-Agenten angezeigt.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Überprüfen Sie den mTLS-Verkehr.

  1. Senden Sie vom Frontend-Dienst aus einen HTTP-Header an den Back-End-Dienst und überprüfen Sie die erfolgreiche Antwort mit den Diensten, die in SPIRE registriert sind.

  2. Für die gegenseitige TLS-Authentifizierung können Sie die ssl.handshake Statistik überprüfen, indem Sie den folgenden Befehl ausführen.

    kubectl exec -it $POD -n $NAMESPACE -c envoy -- curl http://localhost:9901/stats | grep ssl.handshake

    Nachdem Sie den vorherigen Befehl ausgeführt haben, sollten Sie die ssl.handshake Anzahl der Listener sehen, die dem folgenden Beispiel ähnelt:

    listener.0.0.0.0_15000.ssl.handshake: 2
DevOps Ingenieur

Stellen Sie sicher, dass Zertifikate von AWS Private CA ausgestellt wurden.

Sie können anhand der Protokolle auf Ihrem SPIRE-Server überprüfen, ob die Plugins korrekt konfiguriert wurden und ob Zertifikate von Ihrer vorgelagerten privaten Zertifizierungsstelle ausgestellt wurden. Führen Sie den folgenden Befehl aus.

kubectl logs spire-server-0 -n spire

Sehen Sie sich dann die erstellten Protokolle an. Dieser Code geht davon aus, dass Ihr Server benannt ist spire-server-0 und in Ihrem Spire-Namespace gehostet wird. Sie sollten sehen, dass die Plugins erfolgreich geladen wurden und eine Verbindung zu Ihrer privaten Upstream-CA hergestellt wurde.

DevOps Ingenieur

Zugehörige Ressourcen

Zusätzliche Informationen

Weisen Sie der Cluster-Knoten-Instanzrolle Berechtigungen zu

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ACMPCASigning", "Effect": "Allow", "Action": [ "acm-pca:DescribeCertificateAuthority", "acm-pca:IssueCertificate", "acm-pca:GetCertificate", "acm:ExportCertificate" ], "Resource": "*" } ] } AWS Managed Policy: "AWSAppMeshEnvoyAccess"

Fügen Sie das SPIRE-Plugin für ACM hinzu

Add the SPIRE plugin for ACM Change certificate_authority_arn to your PCA ARN. The signing algorithm used must be the same as the signing algorithm on the PCA. Change your_region to the appropriate AWS Region. UpstreamAuthority "aws_pca" { plugin_data { region = "your_region" certificate_authority_arn = "arn:aws:acm-pca:...." signing_algorithm = "your_signing_algorithm" } }