Sicherheit auf Transportschicht (TLS) - AWS App Mesh

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.

Sicherheit auf Transportschicht (TLS)

In App Mesh verschlüsselt Transport Layer Security (TLS) die Kommunikation zwischen den Envoy-Proxys, die auf Rechenressourcen bereitgestellt werden, die in App Mesh durch Mesh-Endpunkte wie und repräsentiert werden. Virtuelle Knoten Virtuelle Gateways Der Proxy verhandelt und beendet den Vorgang. TLS Wenn der Proxy zusammen mit einer Anwendung bereitgestellt wird, ist Ihr Anwendungscode nicht für die Aushandlung einer TLS Sitzung verantwortlich. Der Proxy verhandelt TLS im Namen Ihrer Anwendung.

Mit App Mesh können Sie das TLS Zertifikat auf folgende Weise für den Proxy bereitstellen:

  • Ein privates Zertifikat von AWS Certificate Manager (ACM), das von einem AWS Private Certificate Authority (AWS Private CA) ausgestellt wird.

  • Ein Zertifikat, das im lokalen Dateisystem eines virtuellen Knotens gespeichert ist und von Ihrer eigenen Zertifizierungsstelle (CA) ausgestellt wurde

  • Ein Zertifikat, das von einem Secrets Discovery Service (SDS) -Endpunkt über einen lokalen Unix-Domain-Socket bereitgestellt wird.

En) Proxy-Autorisierungmuss für den bereitgestellten Envoy-Proxy aktiviert sein, der durch einen Mesh-Endpunkt repräsentiert wird. Wir empfehlen, bei der Aktivierung der Proxy-Autorisierung den Zugriff nur auf den Mesh-Endpunkt zu beschränken, für den Sie die Verschlüsselung aktivieren.

Zertifikatanforderungen

Einer der alternativen Subject Names (SANs) auf dem Zertifikat muss bestimmten Kriterien entsprechen, je nachdem, wie der tatsächliche Service, der durch einen Mesh-Endpunkt repräsentiert wird, erkannt wird.

  • DNS— Eines der Zertifikate SANs muss dem in den DNS Service Discovery-Einstellungen angegebenen Wert entsprechen. Für eine Anwendung mit dem Service Discovery-Namen können Sie ein Zertifikat erstellenmesh-endpoint.apps.local, das diesem Namen entspricht, oder ein Zertifikat mit dem Platzhalter*.apps.local.

  • AWS Cloud Map— Eines der Zertifikate SANs muss mit dem Wert übereinstimmen, der in den AWS Cloud Map Service Discovery-Einstellungen unter Verwendung des Formats angegeben wurdeservice-name.namespace-name. Für eine Anwendung mit den AWS Cloud Map Service Discovery-Einstellungen von serviceName mesh-endpoint und können Sie ein Zertifikat erstellen namespaceName apps.local, das dem Namen entsprichtmesh-endpoint.apps.local, oder ein Zertifikat mit dem Platzhalter *.apps.local.

Für beide Erkennungsmechanismen gilt: Wenn keines der Zertifikate den DNS Service Discovery-Einstellungen SANs entspricht, schlägt die Verbindung zwischen Envoys fehl und es wird die folgende Fehlermeldung angezeigt, die vom Client Envoy angezeigt wird.

TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

TLSAuthentifizierungszertifikate

App Mesh unterstützt mehrere Quellen für Zertifikate, wenn die TLS Authentifizierung verwendet wird.

AWS Private CA

Das Zertifikat muss ACM in derselben Region und demselben AWS Konto wie der Mesh-Endpunkt gespeichert werden, der das Zertifikat verwenden wird. Das Zertifikat der Zertifizierungsstelle muss sich nicht im selben AWS Konto befinden, aber es muss sich dennoch in derselben Region wie der Mesh-Endpunkt befinden. Wenn Sie noch kein Zertifikat haben AWS Private CA, müssen Sie eines erstellen, bevor Sie ein Zertifikat von diesem anfordern können. Weitere Informationen zum Anfordern eines Zertifikats von einem bestehenden AWS Private CA Benutzer ACM finden Sie unter Privates Zertifikat anfordern. Das Zertifikat kann kein öffentliches Zertifikat sein.

Das private ObjektCAs, das Sie für TLS Client-Richtlinien verwenden, muss ein Root-Benutzer seinCAs.

Um einen virtuellen Knoten mit Zertifikaten und CAs von zu konfigurieren AWS Private CA, muss der Principal (z. B. ein Benutzer oder eine Rolle), den Sie zum Aufrufen von App Mesh verwenden, über die folgenden IAM Berechtigungen verfügen:

  • Für alle Zertifikate, die Sie der TLS Konfiguration eines Listeners hinzufügen, muss der Principal über die acm:DescribeCertificate entsprechende Berechtigung verfügen.

  • Für alle, die auf einer TLS Client-Richtlinie CAs konfiguriert sind, muss der Prinzipal über die acm-pca:DescribeCertificateAuthority entsprechende Berechtigung verfügen.

Wichtig

Die gemeinsame Nutzung CAs mit anderen Konten kann dazu führen, dass diese Konten der CA unbeabsichtigte Rechte einräumen. Wir empfehlen, ressourcenbasierte Richtlinien zu verwenden, um den Zugriff nur acm-pca:DescribeCertificateAuthority auf Konten zu beschränken, acm-pca:GetCertificateAuthorityCertificate für die keine Zertifikate von der Zertifizierungsstelle ausgestellt werden müssen.

Sie können diese Berechtigungen zu einer vorhandenen IAM Richtlinie hinzufügen, die einem Prinzipal zugeordnet ist, oder einen neuen Prinzipal und eine neue Richtlinie erstellen und die Richtlinie dem Prinzipal zuordnen. Weitere Informationen finden Sie unter IAMRichtlinien bearbeiten, IAMRichtlinien erstellen und IAMIdentitätsberechtigungen hinzufügen.

Anmerkung

Sie zahlen eine monatliche Gebühr für den Betrieb der einzelnen Dateien, AWS Private CA bis Sie sie löschen. Sie zahlen auch für die privaten Zertifikate, die Sie jeden Monat ausstellen, und für private Zertifikate, die Sie exportieren. Weitere Informationen finden Sie unter AWS Certificate Manager -Preisgestaltung.

Wenn Sie die Proxyautorisierung für den Envoy-Proxy aktivieren, den ein Mesh-Endpunkt darstellt, müssen der IAM Rolle, die Sie verwenden, die folgenden IAM Berechtigungen zugewiesen werden:

  • Für alle Zertifikate, die auf dem Listener eines virtuellen Knotens konfiguriert sind, muss die Rolle über die acm:ExportCertificate entsprechende Berechtigung verfügen.

  • Für alle, die für eine TLS Client-Richtlinie CAs konfiguriert sind, muss die Rolle über die acm-pca:GetCertificateAuthorityCertificate entsprechende Berechtigung verfügen.

Dateisystem

Sie können Zertifikate mithilfe des Dateisystems an Envoy verteilen. Sie können dies tun, indem Sie die Zertifikatskette und den entsprechenden privaten Schlüssel im Dateipfad verfügbar machen. Auf diese Weise sind diese Ressourcen vom Envoy-Sidecar-Proxy aus erreichbar.

Geheimer Entdeckungsdienst des Gesandten () SDS

Envoy ruft Geheimnisse wie TLS Zertifikate von einem bestimmten Endpunkt über das Secrets Discovery-Protokoll ab. Weitere Informationen zu diesem Protokoll finden Sie in der Dokumentation von Envoy. SDS

App Mesh konfiguriert den Envoy-Proxy so, dass er einen lokalen Unix-Domain-Socket verwendet, der als Secret Discovery Service (SDS) -Endpunkt SDS dient, wenn er als Quelle für Ihre Zertifikate und Zertifikatsketten dient. Sie können den Pfad zu diesem Endpunkt mithilfe der APPMESH_SDS_SOCKET_PATH Umgebungsvariablen konfigurieren.

Wichtig

Local Secrets Discovery Service, der Unix Domain Socket verwendet, wird auf App Mesh Envoy Proxy Version 1.15.1.0 und höher unterstützt.

App Mesh unterstützt SDS das V2-Protokoll mit RPC g.

Integration mit SPIFFE Runtime Environment (SPIRE)

Sie können jede beliebige Sidecar-Implementierung von verwenden SDSAPI, einschließlich vorhandener Toolchains wie SPIFFERuntime Environment (). SPIRE SPIREwurde entwickelt, um die Implementierung der gegenseitigen TLS Authentifizierung zwischen mehreren Workloads in verteilten Systemen zu ermöglichen. Es bestätigt die Identität von Workloads zur Laufzeit. SPIREstellt außerdem für Workloads spezifische, kurzlebige und automatisch rotierende Schlüssel und Zertifikate direkt für Workloads bereit.

Sie sollten den SPIRE Agenten als Anbieter für Envoy konfigurieren. SDS Erlauben Sie ihm, Envoy direkt mit dem Schlüsselmaterial zu versorgen, das er für die gegenseitige TLS Authentifizierung benötigt. Führen Sie SPIRE Agenten in Beiwagen neben Envoy-Proxys aus. Der Agent kümmert sich bei Bedarf um die Neugenerierung der kurzlebigen Schlüssel und Zertifikate. Der Agent bestätigt Envoy und bestimmt, welche Dienstidentitäten und CA-Zertifikate er Envoy zur Verfügung stellen soll, wenn Envoy eine Verbindung zu dem vom Agenten offengelegten Server herstellt. SDS SPIRE

Während dieses Vorgangs werden Dienstidentitäten und CA-Zertifikate rotiert, und Updates werden zurück an Envoy gestreamt. Envoy wendet sie sofort auf neue Verbindungen an, ohne dass es zu Unterbrechungen oder Ausfallzeiten kommt und ohne dass die privaten Schlüssel jemals das Dateisystem berühren.

So konfiguriert App Mesh Envoys für Verhandlungen TLS

App Mesh verwendet die Mesh-Endpunktkonfiguration des Clients und des Servers, um zu bestimmen, wie die Kommunikation zwischen Envoys in einem Mesh konfiguriert werden soll.

Mit Client-Richtlinien

Wenn eine Client-Richtlinie die Verwendung von TLS erzwingt und einer der Ports in der Client-Richtlinie mit dem Port der Serverrichtlinie übereinstimmt, wird die Client-Richtlinie verwendet, um den TLS Validierungskontext des Clients zu konfigurieren. Wenn beispielsweise die Client-Richtlinie eines virtuellen Gateways mit der Serverrichtlinie eines virtuellen Knotens übereinstimmt, wird versucht, mithilfe der in der Client-Richtlinie des virtuellen Gateways definierten Einstellungen eine TLS Verhandlung zwischen den Proxys durchzuführen. Wenn die Client-Richtlinie nicht mit dem Port der Serverrichtlinie übereinstimmt, kann je nach den Einstellungen der Serverrichtlinie TLS zwischen den Proxys ausgehandelt werden oder auch nicht. TLS

Ohne Client-Richtlinien

Wenn der Client keine Client-Richtlinie konfiguriert hat oder die Client-Richtlinie nicht mit dem Port des Servers übereinstimmt, bestimmt App Mesh anhand des Servers, ob und wie vom Client TLS aus verhandelt werden soll oder nicht. Wenn beispielsweise ein virtuelles Gateway keine Client-Richtlinie angegeben hat und ein virtueller Knoten keine TLS Terminierung konfiguriert hat, TLS wird zwischen den Proxys nicht ausgehandelt. Wenn ein Client keine passende Client-Richtlinie angegeben hat und ein Server mit TLS Modi STRICT oder konfiguriert wurde, werden die Proxys so konfiguriertPERMISSIVE, dass sie aushandeln. TLS Je nachdem, wie die Zertifikate für die TLS Kündigung bereitgestellt wurden, gilt das folgende zusätzliche Verhalten.

  • ACM-verwaltete TLS Zertifikate — Wenn ein Server die TLS Kündigung mithilfe eines ACM -verwalteten Zertifikats konfiguriert hat, konfiguriert App Mesh die Clients automatisch so, dass sie das Zertifikat mit der Root-Benutzer-CA aushandeln TLS und validieren, mit der das Zertifikat verknüpft ist.

  • Dateibasierte TLS Zertifikate — Wenn ein Server die TLS Kündigung mithilfe eines Zertifikats aus dem lokalen Dateisystem des Proxys konfiguriert hat, konfiguriert App Mesh automatisch einen Client für die VerhandlungTLS, aber das Zertifikat des Servers wird nicht validiert.

Alternative Namen für den Betreff

Sie können optional eine Liste mit alternativen Betreffnamen (SANs) angeben, denen Sie vertrauen möchten. SANsmuss im URI Format FQDN oder sein. Falls SANs angegeben, überprüft Envoy, ob der alternative Betreffname des vorgelegten Zertifikats mit einem der Namen auf dieser Liste übereinstimmt.

Wenn Sie SANs auf dem Mesh-Endpunkt nichts angeben, überprüft der Envoy-Proxy für diesen Knoten das Zertifikat SAN auf einem Peer-Client nicht. Wenn Sie auf dem ursprünglichen Mesh-Endpunkt nichts angeben, muss das SANs SAN auf dem Zertifikat, das vom terminierenden Endpunkt bereitgestellt wird, mit der Mesh-Endpunkt-Serviceerkennungskonfiguration übereinstimmen.

Weitere Informationen finden Sie unter App Mesh TLS: Zertifikatsanforderungen.

Wichtig

Sie können Platzhalter nur verwenden, SANs wenn die Client-Richtlinie für auf not enforced eingestellt TLS ist. Wenn die Client-Richtlinie für den virtuellen Clientknoten oder das virtuelle Gateway so konfiguriert ist, dass sie durchgesetzt wirdTLS, kann sie keinen Platzhalter SAN akzeptieren.

Überprüfen Sie die Verschlüsselung

Nach der Aktivierung können Sie den Envoy-Proxy abfragenTLS, um zu bestätigen, dass die Kommunikation verschlüsselt ist. Der Envoy-Proxy gibt Statistiken über Ressourcen aus, anhand derer Sie nachvollziehen können, ob Ihre TLS Kommunikation ordnungsgemäß funktioniert. Beispielsweise zeichnet der Envoy-Proxy Statistiken über die Anzahl der erfolgreichen TLS Handshakes auf, die er für einen bestimmten Mesh-Endpunkt ausgehandelt hat. Ermitteln Sie, wie viele erfolgreiche TLS Handshakes es für einen Mesh-Endpunkt gab, der mit dem folgenden Befehl benannt wurdemy-mesh-endpoint.

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep ssl.handshake

In der folgenden Beispielausgabe wurden drei Handshakes für den Mesh-Endpunkt zurückgegeben, sodass die Kommunikation verschlüsselt ist.

listener.0.0.0.0_15000.ssl.handshake: 3

Der Envoy-Proxy gibt auch Statistiken aus, wenn TLS die Verhandlung fehlschlägt. Stellen Sie fest, ob beim TLS Mesh-Endpunkt Fehler aufgetreten sind.

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep -e "ssl.*\(fail\|error\)"

In der zurückgegebenen Beispielausgabe gab es für mehrere Statistiken keine Fehler, sodass die TLS Verhandlung erfolgreich war.

listener.0.0.0.0_15000.ssl.connection_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_cert_hash: 0 listener.0.0.0.0_15000.ssl.fail_verify_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_no_cert: 0 listener.0.0.0.0_15000.ssl.ssl.fail_verify_san: 0

Weitere Informationen zu TLS Envoy-Statistiken finden Sie unter Envoy Listener Statistics.

Zertifikatserneuerung

AWS Private CA

Wenn Sie ein Zertifikat mit erneuernACM, wird das erneuerte Zertifikat innerhalb von 35 Minuten nach Abschluss der Verlängerung automatisch an Ihre verbundenen Proxys verteilt. Wir empfehlen, die verwaltete Verlängerung zu verwenden, um Zertifikate, die sich dem Ende ihrer Gültigkeitsdauer nähern, automatisch zu verlängern. Weitere Informationen finden Sie unter ACMvon Amazon ausgestellte Zertifikate von Managed Renewal for im AWS Certificate Manager Benutzerhandbuch.

Ihr eigenes Zertifikat

Wenn Sie ein Zertifikat aus dem lokalen Dateisystem verwenden, lädt Envoy das Zertifikat nicht automatisch neu, wenn es sich ändert. Sie können den Envoy-Prozess entweder neu starten oder erneut bereitstellen, um ein neues Zertifikat zu laden. Sie können ein neueres Zertifikat auch in einem anderen Dateipfad platzieren und die Konfiguration des virtuellen Knotens oder des Gateways mit diesem Dateipfad aktualisieren.

Konfigurieren Sie ECS Amazon-Workloads für die Verwendung der TLS Authentifizierung mit AWS App Mesh

Sie können Ihr Mesh für die Verwendung der TLS Authentifizierung konfigurieren. Stellen Sie sicher, dass die Zertifikate für Envoy-Proxy-Sidecars verfügbar sind, die Sie zu Ihren Workloads hinzufügen. Sie können ein EBS OR-Band EFS an Ihren Envoy-Sidecar anhängen oder Zertifikate von AWS Secrets Manager speichern und abrufen.

  • Wenn Sie die dateibasierte Zertifikatsverteilung verwenden, hängen Sie ein EFS Oder-Volume an Ihre EBS Envoy-Sidecar an. Stellen Sie sicher, dass der Pfad zum Zertifikat und zum privaten Schlüssel mit dem Pfad übereinstimmt, der in konfiguriert ist. AWS App Mesh

  • Wenn Sie eine SDS basierte Distribution verwenden, fügen Sie einen Sidecar hinzu, der Envoys SDS API mit Zugriff auf das Zertifikat implementiert.

Anmerkung

SPIREwird bei Amazon nicht unterstütztECS.

Konfigurieren Sie Kubernetes-Workloads für die Verwendung der Authentifizierung mit TLS AWS App Mesh

Sie können den AWS App Mesh Controller für Kubernetes so konfigurieren, dass die TLS Authentifizierung für Backends und Listener von virtuellen Knoten- und virtuellen Gateway-Services aktiviert wird. Stellen Sie sicher, dass die Zertifikate für die Envoy-Proxy-Sidecars verfügbar sind, die Sie zu Ihren Workloads hinzufügen. Ein Beispiel für jeden Verteilungstyp finden Sie in der exemplarischen Vorgehensweise von Mutual Authentication. TLS

  • Wenn Sie die dateibasierte Zertifikatsverteilung verwenden, fügen Sie Ihrem Envoy-Sidecar ein EBS EFS Oder-Volume hinzu. Stellen Sie sicher, dass der Pfad zum Zertifikat und zum privaten Schlüssel mit dem im Controller konfigurierten Pfad übereinstimmt. Alternativ können Sie ein Kubernetes Secret verwenden, das im Dateisystem bereitgestellt ist.

  • Wenn Sie eine SDS basierte Distribution verwenden, sollten Sie einen lokalen SDS Node-Anbieter einrichten, der Envoy's implementiert. SDS API Envoy wird es erreichen. UDS Um die TLS Unterstützung von SDS based m im EKS AppMesh Controller zu aktivieren, setzen Sie das enable-sds Flag auf true und geben Sie den UDS Pfad des lokalen SDS Anbieters zum Controller über das sds-uds-path Flag an. Wenn Sie helm verwenden, legen Sie diese im Rahmen Ihrer Controller-Installation fest:

    --set sds.enabled=true
Anmerkung

Sie können Ihre Zertifikate nicht SPIRE zur Verteilung verwenden, wenn Sie Amazon Elastic Kubernetes Service (AmazonEKS) im Fargate-Modus verwenden.