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)

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

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

  • Un certificato privato di AWS Certificate Manager (ACM) rilasciato da un AWS Private Certificate Authority (AWS Private CA).

  • Un certificato memorizzato 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) tramite Unix Domain Socket locale.

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

Requisiti del certificato

Uno dei nomi alternativi del soggetto (SANs) sul certificato deve soddisfare criteri specifici, a seconda di come viene scoperto il servizio effettivo rappresentato da un endpoint mesh.

  • DNS— Uno dei certificati SANs deve corrispondere al valore fornito nelle impostazioni di rilevamento del DNS servizio. Per un'applicazione con il nome di rilevamento del serviziomesh-endpoint.apps.local, è possibile creare un certificato corrispondente a quel nome o un certificato con la wild card*.apps.local.

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

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

TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

TLScertificati di autenticazione

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

AWS Private CA

Il certificato deve essere archiviato ACM nella stessa regione e nello stesso AWS account dell'endpoint mesh che utilizzerà il certificato. Non è necessario che il certificato della CA si trovi nello 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 poterne richiedere un certificato. Per ulteriori informazioni sulla richiesta di un certificato da un utente esistenteACM, AWS Private CA consulta Richiedere un certificato privato. Il certificato non può essere un certificato pubblico.

L'utente privato CAs utilizzato per le politiche TLS dei client deve essere un utente rootCAs.

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

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

  • Per qualsiasi CAs configurazione basata su una politica TLS client, il principale deve disporre dell'acm-pca:DescribeCertificateAuthorityautorizzazione.

Importante

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

È possibile aggiungere queste autorizzazioni a una IAM politica esistente associata a un principale o creare un nuovo principale e una nuova politica e allegare la politica al principale. Per ulteriori informazioni, vedere Modifica dei IAM criteri, Creazione IAM di criteri e Aggiungere autorizzazioni di IAM identità.

Nota

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

Quando abiliti l'autorizzazione proxy per l'Envoy Proxy rappresentato da un endpoint mesh, al IAM ruolo 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 tutti i ruoli CAs configurati in base a una politica TLS client, il ruolo deve disporre dell'acm-pca:GetCertificateAuthorityCertificateautorizzazione.

File system

È possibile distribuire 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.

Servizio di scoperta segreto di Envoy () SDS

Envoy recupera segreti come i TLS certificati da un endpoint specifico tramite il protocollo Secrets Discovery. Per ulteriori informazioni su questo protocollo, consulta la documentazione di Envoy. SDS

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

Importante

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

App Mesh supporta il SDS protocollo V2 utilizzando g. RPC

Integrazione con SPIFFE Runtime Environment () SPIRE

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

È necessario configurare l'agente come provider per EnvoySPIRE. SDS Consentitegli di fornire direttamente a Envoy il materiale chiave di cui ha bisogno per fornire l'autenticazione reciproca. TLS Esegui SPIRE gli agenti nei sidecar accanto ai proxy Envoy. L'agente si occupa della rigenerazione delle chiavi e dei certificati di breve durata, se necessario. L'agente attesta Envoy e determina quali identità di servizio e certificati CA deve rendere disponibili a Envoy quando Envoy si connette al server esposto dall'agente. SDS SPIRE

Durante questo processo, le identità di servizio e i certificati CA vengono ruotati e gli aggiornamenti vengono trasmessi in streaming 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 gli Envoys per negoziare 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 dei clienti

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

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 TLS o meno con il client e come. Ad esempio, se un gateway virtuale non ha specificato una policy client e un nodo virtuale non ha configurato la TLS terminazione, non TLS verrà negoziata tra i proxy. Se un client non ha specificato una politica client corrispondente e un server è stato configurato con TLS modalità STRICT oPERMISSIVE, i proxy verranno configurati per la negoziazione. TLS A seconda del modo in cui i certificati sono stati forniti per la TLS terminazione, si applica il seguente comportamento aggiuntivo.

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

  • TLSCertificati basati su file: quando un server ha configurato la TLS terminazione utilizzando un certificato del file system locale del proxy, App Mesh configura automaticamente un client per la negoziazioneTLS, ma il certificato del server non viene convalidato.

Nomi alternativi dei soggetti

Facoltativamente, puoi specificare un elenco di nomi alternativi dei soggetti (SANs) di cui fidarti. SANsdeve essere nel URI formato FQDN o. Se SANs forniti, Envoy verifica che il nome alternativo del soggetto del certificato presentato corrisponda a uno dei nomi in questo elenco.

Se non lo specifichi SANs sull'endpoint mesh di terminazione, il proxy Envoy per quel nodo non verifica il certificato su un client peer. SAN Se non lo specifichi SANs sull'endpoint mesh di origine, il certificato fornito dall'endpoint terminante deve corrispondere alla configurazione di rilevamento del servizio di endpoint mesh. SAN

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

Importante

È possibile utilizzare i caratteri jolly solo SANs 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 essere applicataTLS, non può accettare caratteri jolly. SAN

Verifica la crittografia

Una volta abilitataTLS, puoi interrogare il proxy Envoy per confermare che la comunicazione sia crittografata. Il proxy Envoy emette statistiche sulle risorse che possono aiutarti a capire se la tua TLS comunicazione funziona correttamente. Ad esempio, il proxy Envoy registra le statistiche sul numero di TLS handshake riuscite negoziate per un endpoint mesh specificato. Determina quante TLS strette di mano riuscite sono state eseguite 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, l'output restituito è che ci sono state 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 statistiche anche quando la negoziazione fallisce. TLS Determina se ci sono stati TLS errori per l'endpoint della mesh.

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

Nell'esempio restituito dall'output, non ci sono stati errori per diverse statistiche, quindi la TLS negoziazione è 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 di Envoy, vedere Envoy TLS Listener Statistics.

Rinnovo del certificato

AWS Private CA

Quando rinnovi un certificato conACM, il certificato rinnovato verrà distribuito automaticamente ai proxy collegati entro 35 minuti dal completamento del rinnovo. Ti consigliamo di utilizzare il rinnovo gestito per rinnovare automaticamente i certificati verso la fine del periodo di validità. Per ulteriori informazioni, consulta la sezione Rinnovo gestito per i ACM certificati emessi da Amazon nella Guida per l' AWS Certificate Manager utente.

Il tuo certificato

Quando si utilizza un certificato del file system locale, Envoy non ricaricherà automaticamente il certificato quando viene modificato. È possibile riavviare o ridistribuire il processo Envoy per caricare un nuovo certificato. È inoltre possibile 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 ECS carichi di lavoro Amazon per utilizzare l'TLSautenticazione con AWS App Mesh

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

  • Se utilizzi la distribuzione di certificati basata su file, allega un volume EBS or EFS al sidecar Envoy. Assicurati che il percorso del certificato e della chiave privata corrisponda a quello configurato in. AWS App Mesh

  • Se utilizzi la distribuzione SDS basata, aggiungi un sidecar che implementa Envoy's SDS API con accesso al certificato.

Nota

SPIREnon è supportato su AmazonECS.

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

Puoi configurare AWS App Mesh Controller for Kubernetes per abilitare l'TLSautenticazione per i backend e i listener dei servizi di nodi 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 la distribuzione di certificati basata su file, allega un EFS volume EBS or al sidecar di Envoy. Assicurati che il percorso del certificato e della chiave privata corrisponda a quello configurato nel controller. In alternativa, puoi utilizzare un Kubernetes Secret montato sul file system.

  • Se utilizzi la distribuzione SDS basata, dovresti configurare un SDS provider locale di nodi che implementi Envoy's. SDS API Envoy lo raggiungerà. UDS Per abilitare il TLS supporto SDS based m nel EKS AppMesh controller, imposta il enable-sds flag su true e fornisci il UDS percorso del SDS provider locale al controller tramite il sds-uds-path flag. Se usi helm, li imposti come parte dell'installazione del controller:

    --set sds.enabled=true
Nota

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