Crittografia mTLS Cilium (anteprima pubblica)

La crittografia Cilium mTLS fornisce crittografia e autenticazione TLS trasparente e mutua (mTLS) per il traffico da pod a pod in Kubernetes senza richiedere modifiche alle applicazioni o introdurre uno stack di rete aggiuntivo.

Garantisce che i carichi di lavoro di origine e di destinazione vengano autenticati in modo crittografico prima che venga scambiato qualsiasi traffico. Questo approccio consente un modello di rete zero-trust per i carichi di lavoro Kubernetes.

Tutta la crittografia e l'autenticazione vengono eseguite sotto il livello dell'applicazione, ovvero i carichi di lavoro non devono essere modificati, ricompilati o riavviati per trarre vantaggio da mTLS.

La crittografia mTLS di Cilium per AKS è parte del set di funzionalità di Advanced Container Networking Services (ACNS) e la sua implementazione si basa su Cilium.

Importante

Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Architettura

A livello generale, Cilium mTLS protegge il traffico combinando il rilascio delle identità, l'intercettazione del traffico trasparente e l'applicazione della crittografia a livello di carico di lavoro.

A ogni carico di lavoro viene assegnata un'identità crittografica derivata da attributi Kubernetes, ad esempio spazio dei nomi e ServiceAccount. Quando viene avviato il traffico TCP da pod a pod, il traffico viene intercettato in modo trasparente a livello di nodo. Il traffico viene quindi autenticato e crittografato usando TLS reciproco prima di essere inoltrato al carico di lavoro di destinazione.

Il sistema è composto da tre componenti di cooperazione:

  • SPIRE : fornisce l'identità del carico di lavoro e il rilascio di certificati.
  • ztunnel : applica mTLS nel piano dati.
  • Cilium : installa regole iptables che reindirizzano il traffico in uscita a ztunnel sulla porta 15001.

Insieme, questi componenti assicurano che l'autenticazione e la crittografia vengano eseguite in modo trasparente e coerente nel cluster.

Modello di identità e autenticazione

Cilium mTLS utilizza l'autenticazione reciproca basata sull'identità di carico di lavoro di SPIFFE.

A ogni carico di lavoro viene assegnato un'identità SPIFFE (SVID) derivata da:

  • Spazio dei nomi Kubernetes
  • Kubernetes ServiceAccount

Quando un carico di lavoro avvia una connessione:

  1. Il ztunnel sorgente recupera un SVID valido per il carico di lavoro.
  2. Ztunnel di destinazione convalida l'identità presentata.
  3. Entrambi i lati completano la verifica reciproca prima che il traffico sia autorizzato a fluire.

Le decisioni di autenticazione si basano sull'identità del workload anziché sulla posizione della rete. Questa progettazione garantisce che:

  • Solo i carichi di lavoro autenticati possono comunicare.
  • L'identità rimane coerente tra la riprogrammazione e la scalabilità.
  • L'attendibilità non dipende dall'indirizzamento IP o dalla topologia di rete.

Flusso di crittografia

Al termine dell'autenticazione, il traffico viene protetto tramite TLS reciproco.

  1. Il traffico intercettato all'interno del namespace della rete pod e reindirizzato all'istanza locale di ztunnel.
  2. Ztunnel di origine avvia una sessione mTLS con ztunnel di destinazione.
  3. I certificati vengono scambiati e convalidati.
  4. I dati dell'applicazione vengono crittografati prima della trasmissione.
  5. Lo ztunnel di destinazione decrittografa il traffico e lo distribuisce al pod di destinazione.

Diagramma del processo di autenticazione Mutual TLS.

Ogni pacchetto da un pod registrato viene crittografato. Non esiste alcuna finestra di testo non crittografato e non vengono eliminati i primi pacchetti. La connessione viene mantenuta inline da ztunnel fino a quando non viene stabilito il tunnel mTLS, quindi il traffico scorre bidirezionalmente attraverso un tunnel HBONE (HTTP/2 CONNECT).

Componenti principali

SPIRE (identità e attendibilità)

SPIRE (SPIFFE Runtime Environment) è responsabile della gestione delle identità del carico di lavoro e dei certificati. SPIRE include due componenti principali: il server SPIRE e l'agente SPIRE.

Il server SPIRE funge da autorità di certificazione (CA) del cluster. Rilascia certificati X.509 di breve durata (SVID) solo ai carichi di lavoro autorizzati a ricevere identità. Usa l'attestazione nativa di Kubernetes, associando l'identità a attributi come il namespace e il ServiceAccount anziché a proprietà di rete come gli indirizzi IP.

In ogni nodo, l'agente SPIRE è responsabile dell'attestazione del nodo al server SPIRE e del recupero dei certificati per conto dei carichi di lavoro locali. I carichi di lavoro comunicano solo con l'agente SPIRE e non direttamente con il server SPIRE.

SPIRE garantisce che ogni identità del carico di lavoro sia:

  • Verificabile in modo crittografico.
  • Rilasciata e ruotata automaticamente.
  • Associato alle primitive Kubernetes, non agli indirizzi IP.
  • Stabile durante i riavvii dei pod e gli eventi di riprogrammazione.

Questa base di identità consente decisioni attendibili e indipendenti dalla topologia.

Ztunnel (piano dati mTLS)

Ztunnel è un proxy leggero di livello 4 a livello di nodo responsabile dell'applicazione di mTLS tra i carichi di lavoro. Eseguita come DaemonSet, con un'istanza per nodo, eliminando la necessità di proxy sidecar per ogni pod.

Quando un'unità di lavoro avvia una connessione TCP, ztunnel stabilisce una sessione TLS autenticata reciprocamente con l'istanza ztunnel del nodo peer. Usa i certificati ottenuti da SPIRE per autenticare entrambi i lati della connessione prima di consentire il flusso del traffico.

Ztunnel applica le garanzie seguenti:

  • Entrambi i lati di una connessione devono presentare certificati di carico di lavoro validi.
  • I certificati vengono verificati in base al dominio di attendibilità del cluster.
  • Il traffico viene sempre crittografato in rete.
  • Non è consentito alcun fallback in testo non crittografato per i carichi di lavoro registrati.

Centralizzando l'imposizione mTLS a livello di nodo, ztunnel offre proprietà di sicurezza avanzate senza aumentare il sovraccarico operativo per pod.

Cilium (regole di reindirizzamento e iscrizione del pod)

Cilium è responsabile della trasparenza mTLS per le applicazioni.

Quando uno spazio dei nomi viene etichettato con "io.cilium/mtls-enabled=true", l'agente Cilium registra tutti i pod in tale spazio dei nomi. Entra nello spazio dei nomi di rete di ogni pod e installa regole iptables che reindirizzano il traffico in uscita a ztunnel sulla porta 15001.

Cilium passa anche i metadati del carico di lavoro, ad esempio l'UID pod, a ztunnel e si integra con l'operatore Cilium per registrare le identità del carico di lavoro con SPIRE.

Dal punto di vista dell'applicazione, la comunicazione continua a usare socket TCP standard. La crittografia e l'autenticazione vengono applicate interamente sotto il livello dell'applicazione, senza alcuna modifica del codice.

Limiti di ambito e attendibilità

Registrazione dello spazio dei nomi

Cilium mTLS è una funzionalità che richiede il consenso esplicito e con ambito a livello di spazio dei nomi. Per abilitare l'implementazione mTLS, uno spazio dei nomi deve essere etichettato esplicitamente. Dopo l'abilitazione, tutti i pod all'interno di tale spazio dei nomi sono soggetti all'autenticazione e alla crittografia obbligatori.

I pod negli spazi dei nomi non registrati non sono interessati. Questa progettazione consente l'implementazione incrementale e l'adozione a fasi in ambienti diversi.

Modello di imposizione

La crittografia viene applicata solo quando entrambi i pod sono attivati. Il traffico tra carichi di lavoro registrati e non registrati continua in testo non crittografato senza causare problemi di connettività o errori rigidi.

origine Destinazione Result
Iscritto Iscritto Crittografato (mTLS su HBONE)
Iscritto Non registrato Pass-through con testo non crittografato
Non registrato Iscritto Testo non crittografato (acquisito da ztunnel, ma non crittografato)
Non registrato Non registrato Percorso dati Cilium normale (nessun coinvolgimento di ztunnel)

Considerazioni e limitazioni

  • La funzionalità è disponibile solo nei cluster che utilizzano Azure CNI con motore Cilium e con Advanced Container Networking Services (ACNS) abilitato.
  • mTLS è abilitato a livello di namespace. Tutti i pod in uno spazio dei nomi registrato partecipano a mTLS. Il supporto per "opt-in" o "opt-out" a livello di pod non è disponibile.
  • Cilium mTLS attualmente protegge il traffico da pod a pod basato su TCP. Attualmente non esegue la crittografia o l'autenticazione di altri protocolli, incluso UDP.
  • Nella fase corrente, l'applicazione dei criteri di rete L4/L7 non è supportata con mTLS.
  • Non è possibile portare un'autorità di certificazione personalizzata. SPIRE funge da autorità di certificazione del cluster e gestisce il rilascio e la rotazione dei certificati.
  • L'abilitazione di mTLS e WireGuard nello stesso cluster non è supportata.
  • L'abilitazione della crittografia Istio e Cilium mTLS non è supportata.
  • La crittografia mTLS per il traffico tra cluster non è supportata.
  • L'integrazione richiede il supporto di iptables nel kernel e non può essere usata con ambienti che non supportano iptable , ad esempio alcuni runtime di contenitori minimi.
  • I pod senza un percorso dello spazio dei nomi di rete (ad esempio i pod con rete host) non possono essere registrati in ztunnel e vengono esclusi durante il processo di registrazione.

Pricing

Importante

Servizi avanzati di rete per contenitori è un'offerta a pagamento. Per altre informazioni sui prezzi, vedere Servizi di rete dei contenitori avanzati - Prezzi.

Passaggi successivi