View a markdown version of this page

Transport Layer Security (TLS) - AWS App Mesh

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Transport Layer Security (TLS)

Importante

Avviso di fine del supporto: il 30 settembre 2026, AWS interromperà il supporto per. AWS App Mesh Dopo il 30 settembre 2026, non potrai più accedere alla AWS App Mesh console o alle risorse. AWS App Mesh Per ulteriori informazioni, consulta questo post del blog Migrazione da AWS App Mesh ad Amazon ECS Service Connect.

In App Mesh, Transport Layer Security (TLS) crittografa le comunicazioni tra i proxy Envoy distribuiti sulle risorse di calcolo rappresentate in App Mesh da endpoint mesh, come e. Nodi virtuali Gateway virtuali Il proxy negozia e termina il protocollo TLS. Quando il proxy viene distribuito con un'applicazione, il codice dell'applicazione non è responsabile della negoziazione di una sessione TLS. Il proxy negozia il protocollo TLS per conto dell'applicazione.

App Mesh consente di fornire il certificato TLS al proxy nei seguenti modi:

  • Un certificato privato di AWS Certificate Manager (ACM) emesso da un Autorità di certificazione privata AWS (AWS Private CA).

  • Un certificato archiviato nel file system locale di un nodo virtuale emesso dalla propria autorità di certificazione (CA)

  • Un certificato fornito da un endpoint Secrets Discovery Service (SDS) su Unix Domain Socket locale.

Autorizzazione Envoy Proxydeve essere abilitato per il proxy Envoy distribuito rappresentato da un endpoint mesh. Quando abiliti l'autorizzazione del proxy, ti consigliamo di limitare l'accesso solo all'endpoint mesh per il quale stai abilitando la crittografia.

Requisiti del certificato

Uno dei Subject Alternative Names (SAN) sul certificato deve corrispondere a criteri specifici, a seconda di come viene scoperto il servizio effettivo rappresentato da un endpoint mesh.

  • DNS: uno dei SAN del certificato deve corrispondere al valore fornito nelle impostazioni di rilevamento del servizio DNS. Per un'applicazione con il nome di rilevamento del serviziomesh-endpoint.apps.local, puoi creare un certificato che corrisponda a quel nome o un certificato con la wild card. *.apps.local

  • AWS Cloud Map— Uno dei certificati SAN deve corrispondere al valore fornito nelle impostazioni di rilevamento del AWS Cloud Map servizio utilizzando il formatoservice-name.namespace-name. Per un'applicazione con le AWS Cloud Map impostazioni di rilevamento dei servizi di ServiceName mesh-endpoint e NameSpaceNameapps.local, è possibile creare un certificato che corrisponda al nome o un certificato con la wild mesh-endpoint.apps.local card *.apps.local.

Per entrambi i meccanismi di rilevamento, se nessuno dei certificati SAN corrisponde alle impostazioni di rilevamento del servizio DNS, la connessione tra Envoys fallisce e viene visualizzato il seguente messaggio di errore, come mostrato dal client Envoy.

TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

Certificati di autenticazione TLS

App Mesh supporta più fonti di certificati quando si utilizza l'autenticazione TLS.

AWS Private CA

Il certificato deve essere archiviato in ACM nella stessa regione e nello stesso AWS account dell'endpoint mesh che utilizzerà il certificato. Il certificato della CA non deve necessariamente appartenere allo stesso AWS account, ma deve comunque trovarsi nella stessa regione dell'endpoint mesh. Se non ne hai uno CA privata AWS, devi crearne uno prima di potervi richiedere un certificato. Per ulteriori informazioni sulla richiesta di un certificato da un ACM esistente AWS Private CA , consulta Richiedere un certificato privato. Il certificato non può essere un certificato pubblico.

Le CA private utilizzate per le policy dei client TLS devono essere CA utente root.

Per configurare un nodo virtuale con certificati e CA di AWS Private CA, il principale (ad esempio un utente o un ruolo) che usi per chiamare App Mesh deve disporre delle seguenti autorizzazioni IAM:

  • Per tutti i certificati aggiunti alla configurazione TLS di un listener, il principale deve disporre dell'autorizzazione. acm:DescribeCertificate

  • Per tutte le CA configurate in base a una policy client TLS, il principale deve disporre dell'autorizzazione. acm-pca:DescribeCertificateAuthority

Importante

La condivisione delle CA con altri account può conferire a tali account privilegi non intenzionali alla CA. Si consiglia di utilizzare politiche basate sulle risorse per limitare l'accesso solo acm-pca:DescribeCertificateAuthority agli account che non richiedono acm-pca:GetCertificateAuthorityCertificate l'emissione di certificati dalla CA.

Puoi aggiungere queste autorizzazioni a una policy IAM esistente associata a un principale o creare una nuova principale e una nuova policy e allegare la policy al principale. Per ulteriori informazioni, consulta Modifica delle politiche IAM, Creazione delle politiche IAM e Aggiunta delle autorizzazioni di identità IAM.

Nota

Paghi una tariffa mensile per il funzionamento di ciascuna di esse AWS Private CA fino a quando non le elimini. Paghi anche i certificati privati che emetti ogni mese e i certificati privati che esporti. Per ulteriori informazioni, consulta AWS Certificate Manager Prezzi.

Quando abiliti l'autorizzazione proxy per l'Envoy Proxy rappresentato da un endpoint mesh, al ruolo IAM che utilizzi devono essere assegnate le seguenti autorizzazioni IAM:

  • Per tutti i certificati configurati sul listener di un nodo virtuale, il ruolo deve disporre dell'autorizzazione. acm:ExportCertificate

  • Per tutte le CA configurate su una policy client TLS, il ruolo deve disporre dell'autorizzazione. acm-pca:GetCertificateAuthorityCertificate

File system

È possibile distribuire i certificati a Envoy utilizzando il file system. È possibile farlo rendendo disponibili la catena di certificati e la chiave privata corrispondente nel percorso del file. In questo modo, queste risorse sono raggiungibili dal proxy sidecar Envoy.

Secret Discovery Service (SDS) di Envoy

Envoy recupera segreti come i certificati TLS da un endpoint specifico tramite il protocollo Secrets Discovery. Per ulteriori informazioni su questo protocollo, consulta la documentazione SDS di Envoy. https://www.envoyproxy.io/docs/envoy/latest/configuration/security/secret

App Mesh configura il proxy Envoy per utilizzare un Unix Domain Socket locale rispetto al proxy che funga da endpoint Secret Discovery Service (SDS) quando SDS funge da origine per i certificati e le catene di certificati. È possibile configurare il percorso verso questo endpoint utilizzando la variabile di ambiente. APPMESH_SDS_SOCKET_PATH

Importante

Local Secrets Discovery Service che utilizza Unix Domain Socket è supportato nella versione proxy App Mesh Envoy 1.15.1.0 e successive.

App Mesh supporta il protocollo SDS V2 che utilizza gRPC.

Integrazione con SPIFFE Runtime Environment (SPIRE)

È possibile utilizzare qualsiasi implementazione collaterale dell'API SDS, comprese le toolchain esistenti come SPIFFE Runtime Environment (SPIRE). SPIRE è progettato per consentire l'implementazione dell'autenticazione TLS reciproca tra più carichi di lavoro in sistemi distribuiti. Attesta l'identità dei carichi di lavoro in fase di esecuzione. SPIRE fornisce inoltre chiavi e certificati specifici per i carichi di lavoro, di breve durata e con rotazione automatica direttamente ai carichi di lavoro.

È necessario configurare SPIRE Agent come provider SDS per Envoy. Consentitegli di fornire direttamente a Envoy il materiale chiave necessario per fornire l'autenticazione TLS reciproca. Esegui SPIRE Agents in sidecar accanto ai proxy Envoy. L'agente si occupa di rigenerare le chiavi e i certificati di breve durata, come richiesto. L'agente attesta Envoy e determina quali identità di servizio e certificati CA deve rendere disponibili a Envoy quando Envoy si connette al server SDS esposto dall'agente SPIRE.

Durante questo processo, le identità dei servizi e i certificati CA vengono ruotati e gli aggiornamenti vengono trasmessi a Envoy. Envoy li applica immediatamente alle nuove connessioni senza interruzioni o tempi di inattività e senza che le chiavi private tocchino mai il file system.

In che modo App Mesh configura Envoys per negoziare il protocollo TLS

App Mesh utilizza la configurazione degli endpoint mesh sia del client che del server per determinare come configurare la comunicazione tra Envoys in una mesh.

Con le politiche del cliente

Quando una policy client impone l'uso di TLS e una delle porte nella policy del client corrisponde alla porta della policy del server, la policy del client viene utilizzata per configurare il contesto di convalida TLS del client. Ad esempio, se la politica client di un gateway virtuale corrisponde alla politica del server di un nodo virtuale, verrà tentata la negoziazione TLS tra i proxy utilizzando le impostazioni definite nella politica client del gateway virtuale. Se la politica del client non corrisponde alla porta della politica del server, il protocollo TLS tra i proxy può essere negoziato o meno, a seconda delle impostazioni TLS della politica del server.

Senza politiche client

Se il client non ha configurato una politica client o la politica del client non corrisponde alla porta del server, App Mesh utilizzerà il server per determinare se negoziare o meno il protocollo TLS dal client e in che modo. Ad esempio, se un gateway virtuale non ha specificato una policy client e un nodo virtuale non ha configurato la terminazione TLS, TLS non verrà negoziato tra i proxy. Se un client non ha specificato una politica client corrispondente e un server è stato configurato con le modalità TLS STRICT oPERMISSIVE, i proxy verranno configurati per negoziare TLS. A seconda di come sono stati forniti i certificati per la terminazione TLS, si applica il seguente comportamento aggiuntivo.

  • ACM-managed Certificati TLS: quando un server ha configurato la terminazione TLS utilizzando un ACM-managed certificato, App Mesh configura automaticamente i client per negoziare il protocollo TLS e convalidare il certificato rispetto alla CA dell'utente root a cui il certificato è collegato.

  • File-based Certificati TLS: quando un server ha configurato la terminazione TLS utilizzando un certificato del file system locale del proxy, App Mesh configura automaticamente un client per negoziare il protocollo TLS, ma il certificato del server non viene convalidato.

Oggetto: nomi alternativi

È possibile specificare facoltativamente un elenco di nomi alternativi del soggetto (SAN) di cui fidarsi. I SAN devono essere in formato FQDN o URI. Se vengono forniti dei SAN, Envoy verifica che il nome alternativo dell'oggetto del certificato presentato corrisponda a uno dei nomi in questo elenco.

Se non si specificano le SAN nell'endpoint della mesh di terminazione, il proxy Envoy per quel nodo non verifica la SAN su un certificato client peer. Se non si specificano le SAN nell'endpoint della mesh di origine, la SAN sul certificato fornito dall'endpoint di terminazione deve corrispondere alla configurazione di rilevamento del servizio endpoint della mesh.

Per ulteriori informazioni, consulta App Mesh TLS: requisiti del certificato.

Importante

È possibile utilizzare SAN wildcard solo se la policy del client per TLS è impostata su. not enforced Se la policy client per il nodo virtuale o il gateway virtuale del client è configurata per applicare il protocollo TLS, non può accettare una SAN con caratteri jolly.

Verifica la crittografia

Dopo aver abilitato il TLS, puoi interrogare il proxy Envoy per confermare che la comunicazione è crittografata. Il proxy Envoy emette statistiche sulle risorse che possono aiutarti a capire se la tua comunicazione TLS funziona correttamente. Ad esempio, il proxy Envoy registra le statistiche sul numero di handshake TLS riusciti che ha negoziato per un endpoint mesh specificato. Determina quanti handshake TLS sono stati eseguiti con successo per un endpoint mesh denominato con il seguente comando. my-mesh-endpoint

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

Nell'esempio seguente è stato restituito l'output, sono state effettuate tre strette di mano per l'endpoint mesh, quindi la comunicazione è crittografata.

listener.0.0.0.0_15000.ssl.handshake: 3

Il proxy Envoy emette anche statistiche quando la negoziazione TLS fallisce. Determina se ci sono stati errori TLS per l'endpoint mesh.

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

Nell'output restituito dall'esempio, non ci sono stati errori per diverse statistiche, quindi la negoziazione TLS è riuscita.

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

Per ulteriori informazioni sulle statistiche TLS di Envoy, vedere Envoy Listener Statistics. https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/stats

Rinnovo del certificato

AWS Private CA

Quando rinnovi un certificato con ACM, il certificato rinnovato verrà automaticamente distribuito ai proxy connessi entro 35 minuti dal completamento del rinnovo. Ti consigliamo di utilizzare il rinnovo gestito per rinnovare automaticamente i certificati verso la fine del loro periodo di validità. Per ulteriori informazioni, consulta Managed Renewal for ACM's Amazon-Issued Certificates nella Guida per l' AWS Certificate Manager utente.

Il tuo certificato

Quando si utilizza un certificato dal file system locale, Envoy non ricarica automaticamente il certificato quando viene modificato. È possibile riavviare o ridistribuire il processo Envoy per caricare un nuovo certificato. Puoi anche inserire un certificato più recente in un percorso di file diverso e aggiornare la configurazione del nodo virtuale o del gateway con quel percorso di file.

Configura i carichi di lavoro Amazon ECS per utilizzare l'autenticazione TLS con AWS App Mesh

Puoi configurare la tua mesh per utilizzare l'autenticazione TLS. Assicurati che i certificati siano disponibili per i sidecar proxy Envoy che aggiungi ai tuoi carichi di lavoro. Puoi allegare un volume EBS o EFS al tuo sidecar Envoy oppure puoi archiviare e recuperare i certificati da Secrets Manager. AWS

  • Se utilizzi una distribuzione dei certificati basata su file, collega un volume EBS o EFS al sidecar Envoy. Assicurati che il percorso del certificato e della chiave privata corrispondano a quelli configurati in. AWS App Mesh

  • Se utilizzi una SDS-based distribuzione, aggiungi un sidecar che implementa l'API SDS di Envoy con accesso al certificato.

Nota

SPIRE non è supportato su Amazon ECS.

Configura i carichi di lavoro Kubernetes per utilizzare l'autenticazione TLS con AWS App Mesh

Puoi configurare il AWS App Mesh Controller for Kubernetes per abilitare l'autenticazione TLS per i backend e i listener dei servizi di nodi virtuali e gateway virtuali. Assicurati che i certificati siano disponibili per i sidecar proxy Envoy che aggiungi ai tuoi carichi di lavoro. Puoi vedere un esempio per ogni tipo di distribuzione nella sezione dettagliata di Autenticazione reciproca TLS.

  • Se utilizzi una distribuzione dei certificati basata su file, collega un volume EBS o EFS al sidecar Envoy. Assicurati che il percorso del certificato e della chiave privata corrispondano a quelli configurati nel controller. In alternativa, puoi utilizzare un Kubernetes Secret montato sul file system.

  • Se utilizzi la SDS-based distribuzione, dovresti configurare un provider SDS locale del nodo che implementa l'API SDS di Envoy. Envoy lo raggiungerà tramite UDS. Per abilitare il supporto degli MTL basati su SDS nel AppMesh controller EKS, imposta il enable-sds flag su true e fornisci il percorso UDS del provider SDS locale al controller tramite il flag. sds-uds-path Se usi helm, puoi impostarli come parte dell'installazione del controller:

    --set sds.enabled=true
Nota

Non sarai in grado di utilizzare SPIRE per distribuire i tuoi certificati se utilizzi Amazon Elastic Kubernetes Service (Amazon EKS) in modalità Fargate.