Best practice per la sicurezza di Cloud Service Mesh

Questo documento descrive le best practice per stabilire e gestire una configurazione sicura di Cloud Service Mesh in esecuzione su Google Kubernetes Engine (GKE). Le indicazioni contenute nel documento vanno oltre le impostazioni utilizzate per configurare e installare Cloud Service Mesh e descrivono come utilizzare Cloud Service Mesh con altri prodotti e funzionalità per proteggersi dalle minacce alla sicurezza che le applicazioni in una mesh potrebbero affrontare. Google Cloud

Il pubblico di destinazione di questo documento include gli amministratori che gestiscono i criteri in un Cloud Service Mesh e gli utenti che eseguono servizi in un Cloud Service Mesh. Le misure di sicurezza descritte qui sono utili anche per le organizzazioni che devono migliorare la sicurezza dei propri service mesh per soddisfare i requisiti di conformità.

Il documento è organizzato come segue:

Introduzione

Cloud Service Mesh fornisce funzionalità e strumenti che ti aiutano a osservare, gestire e proteggere i servizi in modo unificato. Adotta un approccio incentrato sulle applicazioni e utilizza identità di applicazioni attendibili anziché un approccio incentrato sull'IP di rete. Puoi eseguire il deployment di un mesh di servizi in modo trasparente senza dover modificare il codice dell'applicazione esistente. Cloud Service Mesh fornisce un controllo dichiarativo sul comportamento della rete, il che contribuisce a separare il lavoro dei team responsabili della distribuzione e del rilascio delle funzionalità delle applicazioni dalle responsabilità degli amministratori responsabili della sicurezza e del networking.

Cloud Service Mesh si basa sul mesh di servizi Istio open source, che consente configurazioni e topologie sofisticate. A seconda della struttura della tua organizzazione, uno o più team o ruoli potrebbero essere responsabili dell'installazione e della configurazione di una mesh. Le impostazioni predefinite di Cloud Service Mesh sono scelte per proteggere le applicazioni, ma in alcuni casi potrebbe essere necessario configurazioni personalizzate o concedere eccezioni escludendo determinate app, porte o indirizzi IP dalla partecipazione a un mesh. È importante disporre di controlli per gestire le configurazioni mesh e le eccezioni di sicurezza.

Vettori di attacco e rischi per la sicurezza

Vettori d'attacco

La sicurezza di Cloud Service Mesh segue il modello di sicurezza Zero Trust, che presuppone che le minacce alla sicurezza provengano sia dall'interno che dall'esterno del perimetro di sicurezza di un'organizzazione. Ecco alcuni esempi di tipi di attacchi alla sicurezza che possono minacciare le applicazioni in unmesh di servizih:

  • Attacchi di esfiltrazione di dati. Ad esempio, attacchi che intercettano dati sensibili o credenziali dal traffico da servizio a servizio.
  • Attacchi man-in-the-middle. Ad esempio, un servizio dannoso che si spaccia per un servizio legittimo per ottenere o modificare la comunicazione tra i servizi.
  • Attacchi di escalation dei privilegi. Ad esempio, attacchi che utilizzano l'accesso illecito a privilegi elevati per eseguire operazioni in una rete.
  • Attacchi Denial of Service (DoS).
  • Attacchi botnet che tentano di compromettere e manipolare i servizi per lanciare attacchi ad altri servizi.

Gli attacchi possono anche essere classificati in base ai target:

  • Attacchi alla rete interna mesh. Attacchi volti a manomettere, intercettare o falsificare la comunicazione interna da servizio a servizio o da servizio a control plane del mesh.
  • Attacchi al control plane. Attacchi volti a causare il malfunzionamento del piano di controllo (ad esempio un attacco DoS) o a estrarre dati sensibili dal piano di controllo.
  • Attacchi perimetrali della mesh. Attacchi volti a manomettere, intercettare o falsificare la comunicazione in entrata o in uscita dalla rete mesh.
  • Attacchi di operazioni mesh. Attacchi mirati alle operazioni mesh. Gli autori degli attacchi potrebbero tentare di ottenere privilegi elevati per condurre operazioni dannose in una mesh, come la modifica delle relative norme di sicurezza e delle immagini dei workload.

Rischi per la sicurezza

Oltre agli attacchi alla sicurezza, una mesh deve affrontare anche altri rischi per la sicurezza. Il seguente elenco descrive alcuni possibili rischi per la sicurezza:

  • Protezione di sicurezza incompleta. Una mesh di servizi non è stata configurata con criteri di autenticazione e autorizzazione per proteggere la sua sicurezza. Ad esempio, non sono definiti criteri di autenticazione o autorizzazione per i servizi in un mesh.
  • Eccezioni ai criteri di sicurezza. Per soddisfare i loro casi d'uso specifici, gli utenti possono creare eccezioni ai criteri di sicurezza per determinati tipi di traffico (interno o esterno) da escludere dai criteri di sicurezza di Cloud Service Mesh. Per gestire in modo sicuro questi casi, consulta la sezione Gestire in modo sicuro le eccezioni alle norme.
  • Mancato aggiornamento delle immagini. Potrebbero essere rilevate vulnerabilità per le immagini utilizzate in una mesh. Devi mantenere aggiornati i componenti mesh e le immagini dei carichi di lavoro con le correzioni delle vulnerabilità più recenti.
  • Mancanza di manutenzione (nessuna competenza o risorse). Le configurazioni del software mesh e delle policy richiedono una manutenzione regolare per sfruttare i meccanismi di protezione della sicurezza più recenti.
  • Mancanza di visibilità. Errori di configurazione o configurazioni non sicure di policy mesh e operazioni/traffico mesh anomali non vengono portati all'attenzione degli amministratori mesh.
  • Deriva della configurazione. La configurazione dei criteri in una mesh si discosta dalla fonte di riferimento.

Misure per proteggere un mesh di servizi

Questa sezione presenta un manuale operativo per proteggere i service mesh.

Architettura di sicurezza

La sicurezza di un mesh di servizi dipende dalla sicurezza dei componenti nei diversi livelli del sistema mesh e delle relative applicazioni. L'intenzione di alto livello della postura di sicurezza di Cloud Service Mesh proposta è quella di proteggere un service mesh integrando più meccanismi di sicurezza a diversi livelli, che insieme raggiungono la sicurezza complessiva del sistema nel modello di sicurezza Zero Trust. Il seguente diagramma mostra la postura di sicurezza proposta per Cloud Service Mesh.

postura di sicurezza di Cloud Service Mesh

Cloud Service Mesh fornisce sicurezza a più livelli, tra cui:

  • Sicurezza edge della mesh
    • La sicurezza in entrata di Cloud Service Mesh fornisce il controllo dell'accesso per il traffico esterno e protegge l'accesso esterno alle API esposte dai servizi nel mesh.
    • La sicurezza in uscita di Cloud Service Mesh regola il traffico in uscita dai carichi di lavoro interni.
    • Cloud Service Mesh User Auth si integra con l'infrastruttura Google per autenticare le chiamate esterne dai browser web ai servizi che eseguono applicazioni web.
    • La gestione dei certificati del gateway di Cloud Service Mesh protegge e ruota le chiavi private e i certificati X.509 utilizzati dai gateway di ingresso e uscita di Cloud Service Mesh utilizzando Certificate Authority Service.
    • Cloud Armor può difendersi dagli attacchi DDoS (Distributed Denial-of-Service) esterni e di livello 7. Funge da web application firewall (WAF) per proteggere la mesh dagli attacchi di rete. Ad esempio, attacchi di iniezione ed esecuzione di codice da remoto.
    • VPC e Controlli di servizio VPC proteggono il perimetro del mesh tramite i controlli di accesso alla rete privata.
  • Sicurezza del cluster
    • TLS reciproca (mTLS) di Cloud Service Mesh applica la crittografia e l'autenticazione del traffico da workload a workload.
    • Le CA gestite, come l'autorità di certificazione Cloud Service Mesh e Certificate Authority Service, eseguono il provisioning e la gestione sicuri dei certificati utilizzati dai workload.
    • L'autorizzazione Cloud Service Mesh applica controllo dell'accesso per i servizi mesh in base alle loro identità e ad altri attributi.
    • Il dashboard della sicurezza di GKE Enterprise fornisce il monitoraggio delle configurazioni delle norme di sicurezza e delle norme di rete Kubernetes per i carichi di lavoro.
    • La policy di rete Kubernetes applica controllo dell'accesso ai pod in base a indirizzi IP, etichette dei pod, spazi dei nomi e altro ancora.
    • La sicurezza del control plane difende dagli attacchi al control plane. Questa protezione impedisce agli autori degli attacchi di modificare, sfruttare o divulgare i dati di configurazione del servizio e della mesh.
  • Sicurezza dei workload
    • Tieniti al passo con le release di sicurezza di Cloud Service Mesh per assicurarti che i binari di Cloud Service Mesh in esecuzione nel tuo mesh siano privi di vulnerabilità note pubblicamente.
    • Workload Identity Federation for GKE consente ai workload di ottenere le credenziali per chiamare in modo sicuro i servizi Google.
    • Cloud Key Management Service (Cloud KMS) protegge i dati o le credenziali sensibili tramite moduli di sicurezza hardware (HSM). Ad esempio, i carichi di lavoro possono utilizzare Cloud KMS per archiviare credenziali o altri dati sensibili. CA Service, utilizzato per emettere certificati per i workload mesh, supporta chiavi di firma per cliente e basate su HSM gestite da Cloud KMS.
    • Kubernetes CNI (Container Network Interface) impedisce gli attacchi di escalation dei privilegi eliminando la necessità di un container init Cloud Service Mesh con privilegi.
  • Sicurezza dell'operatore
    • Controllo dell'accesso basato sui ruoli (RBAC) di Kubernetes limita l'accesso alle risorse Kubernetes e confina le autorizzazioni dell'operatore per mitigare gli attacchi provenienti da operatori dannosi o dall'impersonificazione di operatori.
    • Policy Controller di GKE Enterprise convalida e controlla le configurazioni dei criteri nel mesh per evitare errori di configurazione.
    • Google Cloud Autorizzazione binaria garantisce che le immagini dei workload nel mesh siano quelle autorizzate dagli amministratori.
    • Google Cloud L'audit logging esegue l'audit delle operazioni della mesh.

Il diagramma seguente mostra i flussi di comunicazione e configurazione con le soluzioni di sicurezza integrate in Cloud Service Mesh.

security diagram traffic flow

Sicurezza del cluster

Abilita mutual TLS rigoroso

Un attacco man in the middle (MitM) tenta di inserire un'entità dannosa tra due parti che comunicano per intercettare o manipolare la comunicazione. Cloud Service Mesh si difende dagli attacchi MITM e di esfiltrazione di dati applicando la crittografia e l'autenticazione mTLS per tutte le parti che comunicano. La modalità permissiva utilizza mTLS quando entrambe le parti lo supportano, ma consente connessioni senza mTLS. Al contrario, la modalità mTLS restrittiva richiede che il traffico venga criptato e autenticato con mTLS e non consente il traffico in testo normale.

Cloud Service Mesh ti consente di configurare la versione TLS minima per le connessioni TLS tra i tuoi workload per soddisfare i requisiti di sicurezza e conformità.

Per saperne di più, consulta Anthos Service Mesh tramite esempi: mTLS | Applicazione di mTLS a livello di mesh.

Abilitare i controlli dell'accesso

I criteri di sicurezza di Cloud Service Mesh (ad esempio criteri di autenticazione e autorizzazione) devono essere applicati a tutto il traffico in entrata e in uscita dal mesh, a meno che non esistano giustificazioni valide per escludere un servizio o un pod dai criteri di sicurezza di Cloud Service Mesh. In alcuni casi, gli utenti potrebbero avere motivi legittimi per bypassare i criteri di sicurezza di Cloud Service Mesh per alcune porte e intervalli IP. Ad esempio, per stabilire connessioni native con servizi non gestiti da Cloud Service Mesh. Per proteggere Cloud Service Mesh in questi casi d'uso, consulta Gestire in modo sicuro le eccezioni ai criteri di Cloud Service Mesh.

Il controllo dell'accesso ai servizi è fondamentale per impedire l'accesso non autorizzato ai servizi. L'applicazione di mTLS cripta e autentica una richiesta, ma una mesh ha comunque bisogno di criteri di autorizzazione Cloud Service Mesh per applicare controllo dell'accesso dell'accesso ai servizi. Ad esempio, rifiutare una richiesta non autorizzata proveniente da un client autenticato.

I criteri di autorizzazione di Cloud Service Mesh forniscono un modo flessibile per configurare i controlli di accesso per proteggere i tuoi servizi da accessi non autorizzati. I criteri di autorizzazione di Cloud Service Mesh devono essere applicati in base alle identità autenticate derivate dai risultati dell'autenticazione. Le autenticazioni basate su mTLS o JWT (JSON Web Token) devono essere utilizzate insieme nell'ambito dei criteri di autorizzazione di Cloud Service Mesh.

Applica i criteri di autenticazione di Cloud Service Mesh

JSON Web Token (JWT)

Oltre all'autenticazione mTLS, gli amministratori del mesh possono richiedere a un servizio di autenticare e autorizzare le richieste in base a JWT. Cloud Service Mesh non funge da provider JWT, ma autentica i JWT in base agli endpoint JWKS (JSON Web Key Set) configurati. L'autenticazione JWT può essere applicata ai gateway Ingress per il traffico esterno o ai servizi interni per il traffico in-mesh. L'autenticazione JWT può essere combinata con l'autenticazione mTLS quando un JWT viene utilizzato come credenziale per rappresentare il chiamante finale e il servizio richiesto richiede la prova che viene chiamato per conto del chiamante finale. L'applicazione forzata dell'autenticazione JWT protegge dagli attacchi che accedono a un servizio senza credenziali valide e per conto di un utente finale reale.

Autenticazione utente Cloud Service Mesh

L'autenticazione utente Cloud Service Mesh è una soluzione integrata per l'autenticazione e il controllo dell'accesso degli utenti finali basati su browser ai tuoi carichi di lavoro. Integra un mesh di servizi con i provider di identità (IdP) esistenti per implementare un flusso di accesso e consenso OpenID Connect (OIDC) standard basato sul web e utilizza i criteri di autorizzazione di Cloud Service Mesh per il controllo dell'accesso.

Applicare i criteri di autorizzazione

I criteri di autorizzazione di Cloud Service Mesh controllano:

  • Chi o cosa è autorizzato ad accedere a un servizio.
  • A quali risorse è possibile accedere.
  • Quali operazioni possono essere eseguite sulle risorse consentite.

I criteri di autorizzazione sono un modo versatile per configurare controllo dell'accesso dell'accesso in base alle identità effettive con cui vengono eseguiti i servizi, alle proprietà del traffico del livello applicazione (livello 7) (ad esempio le intestazioni delle richieste) e alle proprietà del livello di rete (livello 3 e livello 4) come intervalli IP e porte.

I criteri di autorizzazione di Cloud Service Mesh devono essere applicati in base alle identità autenticate derivate dai risultati dell'autenticazione per proteggersi dall'accesso non autorizzato a servizi o dati.

Per impostazione predefinita, l'accesso a un servizio deve essere negato a meno che non siano definiti in modo esplicito criteri di autorizzazione per consentire l'accesso al servizio. Consulta le best practice per i criteri di autorizzazione per esempi di criteri di autorizzazione che negano le richieste di accesso.

Le norme di autorizzazione devono limitare l'attendibilità il più possibile. Ad esempio, l'accesso a un servizio può essere definito in base ai singoli percorsi URL esposti da un servizio in modo che solo un servizio A possa accedere al percorso /admin di un servizio B.

I criteri di autorizzazione possono essere utilizzati insieme ai criteri di rete Kubernetes, che operano solo a livello di rete (livello 3 e livello 4) e controllano l'accesso alla rete per indirizzi IP e porte su pod Kubernetes e spazi dei nomi Kubernetes.

Imporre lo scambio di token per accedere ai servizi mesh

Per difendersi dagli attacchi di replay dei token che rubano i token e li riutilizzano per accedere ai servizi mesh, un token in una richiesta proveniente dall'esterno della mesh deve essere scambiato con un token interno alla mesh di breve durata al perimetro della mesh.

Una richiesta dall'esterno del mesh per accedere a un servizio mesh deve includere un token, ad esempio JWT o cookie, per essere autenticata e autorizzata dal servizio mesh. Un token esterno alla mesh potrebbe avere una lunga durata. Per difendersi dagli attacchi di replay dei token, un token esterno al mesh deve essere scambiato con un token interno al mesh di breve durata con un ambito limitato all'ingresso del mesh. Il servizio mesh autentica un token interno al mesh e autorizza la richiesta di accesso in base al token interno al mesh.

Cloud Service Mesh supporta l'integrazione con Identity-Aware Proxy (IAP), che genera un RequestContextToken (un token interno al mesh di breve durata scambiato da un token esterno) utilizzato in Cloud Service Mesh per l'autorizzazione. Con lo scambio di token, gli autori degli attacchi non possono utilizzare un token rubato nella mesh per accedere ai servizi. L'ambito e la durata limitati del token scambiato riducono notevolmente la possibilità di un attacco di replay del token.

Gestire in modo sicuro le eccezioni ai criteri di Cloud Service Mesh

Potresti avere casi d'uso speciali per il tuo mesh di servizi. Ad esempio, potresti dover esporre una determinata porta di rete al traffico di testo normale. Per adattarsi a scenari di utilizzo specifici, a volte potrebbe essere necessario creare eccezioni per consentire l'esclusione di determinati traffici interni o esterni dalle norme di sicurezza di Cloud Service Mesh, il che crea problemi di sicurezza.

Potresti avere motivi legittimi per ignorare le norme di sicurezza di Cloud Service Mesh per alcuni intervalli di porte e IP. Puoi aggiungere annotazioni (ad esempio, excludeInboundPorts, excludeOutboundPorts, excludeOutboundIPRanges) ai pod per escludere la gestione del traffico da parte del sidecar Envoy. Oltre alle annotazioni per escludere il traffico, puoi bypassare completamente il mesh eseguendo il deployment di un'applicazione con l'inserimento di sidecar disattivato. Ad esempio, aggiungendo un'etichetta sidecar.istio.io/inject="false" al pod dell'applicazione.

L'elusione delle policy di sicurezza di Cloud Service Mesh ha un impatto negativo sulla sicurezza complessiva del sistema. Ad esempio, se le norme di autorizzazione e mTLS di Cloud Service Mesh vengono bypassate per una porta di rete tramite annotazioni, non sarà presente alcun controllo dell'accesso per il traffico sulla porta e potrebbe essere possibile intercettare o modificare il traffico. Inoltre, l'elusione dei criteri di Cloud Service Mesh influisce anche sui criteri non di sicurezza, come i criteri di rete.

Quando la norma di sicurezza di Cloud Service Mesh viene ignorata per una porta o un IP (intenzionalmente o meno), devono essere in atto altre misure di sicurezza per proteggere il mesh e monitorare le eccezioni di sicurezza, le potenziali scappatoie di sicurezza e lo stato generale dell'applicazione della sicurezza. Per proteggere la mesh in questi scenari, puoi:

  • Assicurati che il traffico che bypassa i sidecar sia criptato e autenticato in modo nativo per impedire attacchi MITM.
  • Applica i criteri di rete Kubernetes per limitare la connettività delle porte con eccezioni ai criteri (ad esempio, limita una porta con eccezioni ai criteri in modo che consenta solo il traffico da un altro servizio nello stesso spazio dei nomi) o per consentire solo il traffico attraverso le porte con i criteri di sicurezza di Cloud Service Mesh applicati.
  • Forza GKE Enterprise Policy Controller a convalidare automaticamente i criteri di Cloud Service Mesh. Ad esempio, imporre che i sidecar di Cloud Service Mesh vengano sempre inseriti nei carichi di lavoro.

Applica i criteri di rete di Kubernetes

Cloud Service Mesh si basa sulla piattaforma sottostante (ad esempio Kubernetes). Pertanto, la sicurezza di Cloud Service Mesh dipende dalla sicurezza della piattaforma sottostante. Ad esempio, senza il controllo su chi può aggiornare le risorse Kubernetes, un utente potrebbe modificare il deployment Kubernetes di un servizio per bypassare il sidecar del servizio.

Per formare una solida postura di sicurezza per un mesh di servizi, i meccanismi di sicurezza della piattaforma sottostante devono essere applicati per funzionare congiuntamente ai criteri di sicurezza di Cloud Service Mesh.

I criteri di rete di Kubernetes operano a livello di rete (L3 e L4) per indirizzi IP e porte su pod e spazi dei nomi Kubernetes. Le policy di rete Kubernetes possono essere applicate insieme alle policy di Cloud Service Mesh per migliorare la sicurezza del mesh.

Ad esempio, l'amministratore del mesh può configurare i criteri di rete di Kubernetes per consentire al traffico di utilizzare solo le porte con i criteri di sicurezza di Cloud Service Mesh applicati. Se tutto il traffico deve essere applicato con mTLS di Cloud Service Mesh, l'amministratore può configurare una policy di rete Kubernetes per consentire solo il traffico sulle porte configurate con la policy mTLS di Cloud Service Mesh. L'amministratore del mesh può anche configurare i criteri di rete Kubernetes per limitare la connettività delle porte con eccezioni ai criteri. Ad esempio, limita la connettività di queste porte a un namespace.

Accesso sicuro al control plane

Il control plane di Cloud Service Mesh autentica tutti i client che si connettono. Pertanto, solo i chiamanti con credenziali valide (JWT Kubernetes o certificati X.509 emessi da CA consentite) possono accedere al control plane di Cloud Service Mesh. TLS cripta le connessioni tra i carichi di lavoro e il control plane di Cloud Service Mesh.

Oltre al meccanismo di autenticazione, per Cloud Service Mesh in-cluster, è possibile implementare criteri di rete Kubernetes per isolare lo spazio dei nomi di sistema Cloud Service Mesh (per impostazione predefinita istio-system) da spazi dei nomi e client non gestiti al di fuori della mesh, consentendo al contempo ai data plane di accedere al control plane. Le regole firewall VPC possono impedire al traffico esterno a un cluster di raggiungere Istiod. Con queste misure di isolamento della rete, un malintenzionato esterno al mesh non potrà accedere al control plane, anche se dispone di credenziali valide. Per i control plane gestiti, Google gestisce la sicurezza dei control plane e non sono necessarie queste norme di isolamento di rete per i control plane.

Applica i limiti dello spazio dei nomi

Per impedire a un utente di uno spazio dei nomi di accedere/aggiornare le risorse in uno spazio dei nomi non autorizzato:

  • Applica controlli dell'accesso.
  • Applica i criteri di rete di Kubernetes. Se i servizi in uno spazio dei nomi non hanno traffico al di fuori dello spazio dei nomi, l'amministratore del mesh deve implementare un criterio di rete Kubernetes che consenta solo il traffico all'interno dello spazio dei nomi: nessun traffico in entrata o in uscita dallo spazio dei nomi.
  • Applica i criteri RBAC di Kubernetes.
    • I ruoli degli amministratori delle applicazioni devono essere associati a uno spazio dei nomi.
    • Consenti solo agli amministratori del mesh di disporre di ClusterRole.

Applica le norme RBAC di Kubernetes

Gli amministratori del mesh devono applicare i criteri RBAC di Kubernetes per controllare chi è autorizzato ad accedere e aggiornare le risorse Kubernetes. Controllo dell'accesso di Kubernetes può mitigare i rischi per la sicurezza nel mesh. Ad esempio, gli utenti non autorizzati non devono essere autorizzati a modificare i deployment Kubernetes e a ignorare l'applicazione dei criteri di Cloud Service Mesh. I ruoli di un utente devono essere associati a uno spazio dei nomi, in modo che l'utente non possa accedere a più spazi dei nomi di quelli a cui deve accedere. Per guide dettagliate ed esempi di configurazione del controllo degli accessi basato sui ruoli, consulta Configurare il controllo degli accessi basato sui ruoli. Dopo aver attivato Workload Identity Federation per GKE, puoi anche consentire a un account di servizio Kubernetes di fungere da service account IAM.

Sicurezza edge del mesh

Poiché la maggior parte degli attacchi può provenire anche dall'esterno di un cluster, è fondamentale garantire la sicurezza ai margini della mesh.

Controllo dell'accesso Ingress del cluster

Cloud Service Mesh riceve il traffico esterno in entrata tramite il gateway in entrata. I servizi esposti dal gateway in entrata sono potenzialmente soggetti ad attacchi da fonti esterne. Gli amministratori della sicurezza devono sempre assicurarsi che i servizi esposti al traffico esterno tramite i gateway in entrata siano sufficientemente sicuri da difendersi dagli attacchi.

Ingress deve applicare l'autenticazione e l'autorizzazione per i servizi esposti a chiamanti esterni.

  • Applica i criteri di sicurezza in entrata del cluster. Quando il cluster deve ricevere traffico esterno, l'amministratore del mesh deve applicare criteri di sicurezza in entrata, inclusi TLS gateway, autenticazione e autorizzazione di Cloud Service Mesh, per autenticare le richieste esterne e verificare che siano autorizzate ad accedere ai servizi esposti dal gateway in entrata. L'applicazione dei criteri di sicurezza in entrata protegge dagli attacchi provenienti dall'esterno del mesh che tentano di accedere a un servizio senza credenziali o autorizzazioni valide.
  • Utilizza Cloud Armor come Web Application Firewall (WAF) per proteggerti dagli attacchi basati sul web (ad esempio, attacchi di iniezione ed esecuzione remota). Per maggiori informazioni, consulta Da dispositivi periferici a mesh: esposizione delle applicazioni di mesh di servizi mediante GKE Ingress.

Regola il traffico in uscita del cluster

La sicurezza in uscita del cluster è fondamentale per la sicurezza della mesh perché i criteri di sicurezza in uscita possono difendere dagli attacchi diesfiltrazione di datii, applicare il filtro del traffico in uscita e applicare l&#3originazione TLSLS per il traffico in uscita. Gli amministratori della sicurezza devono regolamentare e controllare il traffico in uscita del cluster.

Oltre a utilizzare i firewall VPC per limitare il traffico in uscita, gli amministratori del mesh devono anche applicare criteri di sicurezza in uscita per il cluster e configurare il traffico in uscita in modo che passi attraverso i gateway di uscita.

Le norme di uscita possono mitigare i seguenti attacchi:

  • Attacchi di esfiltrazione di dati.
  • I service pod possono essere sfruttati dagli autori degli attacchi se le relative vulnerabilità e esposizioni comuni (CVE) non vengono corrette. I pod compromessi possono diventare una botnet controllata da utenti malintenzionati per inviare spam o lanciare attacchi DoS.

I criteri di autorizzazione applicati ai gateway di uscita possono garantire che solo i servizi autorizzati possano inviare traffico a host specifici al di fuori del mesh. Nel frattempo, per il traffico che esce dalla mesh, anziché gestire l'origine TLS nei singoli sidecar, TLS può essere originato nei gateway di uscita. In questo modo, il traffico TLS viene generato in modo uniforme e più sicuro, perché i certificati client per mTLS possono essere isolati dagli spazi dei nomi in cui vengono eseguite le applicazioni.

Utilizza il cluster privato o il controllo di servizio VPC per bloccare gli accessi esterni

Oltre a applicare criteri di sicurezza in entrata e in uscita, blocca l'accesso esterno utilizzando il cluster privato o i Controlli di servizio VPC, ove possibile. Mentre le norme di sicurezza sono controllate dagli amministratori della sicurezza del mesh, la configurazione del cluster privato o i Controlli di servizio VPC possono essere applicati dagli amministratori della sicurezza dell'organizzazione.

I Controlli di servizio VPC possono essere applicati per definire un perimetro di sicurezza per i servizi al fine di:

  • Limita l'accesso dei servizi a risorse esterne.
  • Impedisci a persone esterne di accedere ai servizi in un perimetro di sicurezza.

I Controlli di servizio VPC aiutano a difendersi dagli attacchi di esfiltrazione di dati e impediscono agli aggressori esterni di accedere ai servizi all'interno di un mesh.

Difenditi dagli attacchi DDoS esterni

Gli attacchi DDoS esterni possono sovraccaricare i gateway di ingresso e i servizi di backend, impedendo la gestione delle richieste legittime. Cloud Armor può essere utilizzato per difendersi dagli attacchi DDoS. Cloud Armor si difende non solo dagli attacchi DDoS a livello di rete (L3 e L4), ma anche dagli attacchi DDoS a livello di applicazione (L7).

Sicurezza per l'amministrazione e l'automazione della mesh

È importante considerare la sicurezza per le operazioni amministrative e per qualsiasi automazione che crei intorno al mesh, ad esempio CI/CD. Le seguenti pratiche mirano a garantire che la mesh possa essere gestita in sicurezza senza il rischio di esporre i servizi ad attacchi aggiuntivi.

Segmenta i ruoli utilizzati per le operazioni della mesh

Seguendo lo stesso principio del controllo dell'accesso basato su ruoli, gli utenti di una mesh devono essere classificati in base ai loro ruoli. A ogni ruolo deve essere concesso solo il set minimo di privilegi necessari.

Ad esempio, l'insieme di utenti che eseguono i deployment dei servizi non deve disporre dei privilegi per aggiornare i criteri di autenticazione e autorizzazione.

Esistono diverse categorie di operatori. Ad esempio, gli operatori del cluster e gli operatori dello spazio dei nomi. È importante impedire l'escalation dei privilegi da parte di un operatore, che potrebbe comportare l'accesso illecito a risorse non autorizzate.

I criteri RBAC di Kubernetes consentono agli amministratori del mesh di limitare l'accesso alle risorse solo agli utenti autorizzati.

Convalida automatica delle configurazioni dei criteri

Gli operatori potrebbero configurare in modo errato i criteri di Cloud Service Mesh, il che può comportare gravi incidenti di sicurezza. Per evitare errori di configurazione e convalidare automaticamente le policy Cloud Service Mesh, gli amministratori del mesh possono utilizzare Policy Controller per applicare i vincoli alle configurazioni delle policy.

Per evitare di riporre troppa fiducia in persone con autorizzazioni per aggiornare le policy di sicurezza di Cloud Service Mesh e per automatizzare la convalida delle policy di Cloud Service Mesh, gli amministratori del mesh devono implementare vincoli sulle policy di Cloud Service Mesh utilizzando Policy Controller.

Policy Controller si basa sul progetto open source Gatekeeper e può essere eseguito come controller di ammissione di Kubernetes per impedire l'applicazione di risorse non valide o in modalità di controllo in modo che gli amministratori possano ricevere avvisi in caso di violazioni. Policy Controller può convalidare automaticamente il deployment di risorse nel mesh, ad esempio convalidando che le annotazioni in un deployment non bypassino le norme di Cloud Service Mesh, convalidando che le norme di Cloud Service Mesh siano come previsto e convalidando che un deployment non includa funzionalità root (ad esempio NET_ADMIN e NET_RAW).

Policy Controller può anche controllare le risorse Cloud Service Mesh esistenti rispetto ai vincoli per rilevare errori di configurazione dei criteri.

Di seguito sono riportati alcuni esempi di applicazione dei criteri di sicurezza di GKE Enterprise Policy Controller:

La libreria di modelli di vincolo fornita con Policy Controller contiene un insieme di modelli di vincolo che possono essere utilizzati con il pacchetto di vincoli di sicurezza Cloud Service Mesh predefinito per applicare best practice di sicurezza specifiche di Cloud Service Mesh, ad esempio criteri di autenticazione, autorizzazione e traffico. Di seguito sono riportati alcuni esempi di vincoli inclusi nel bundle:

  • Applica l'autenticazione reciproca TLS (mTLS) restrittiva a livello di mesh PeerAuthentication.
  • Imponi che tutte le PeerAuthentications non possano sovrascrivere la modalità mTLS restrittiva.
  • Applica l'AuthorizationPolicy default deny a livello di mesh.
  • Applica i pattern sicuri di AuthorizationPolicy.
  • Forza l'inserimento dei sidecar Cloud Service Mesh nei workload.

Per gestire le eccezioni e le situazioni di emergenza, l'amministratore del mesh può:

Utilizzare un approccio GitOps con Config Sync per evitare la deviazione dalla configurazione

La deriva della configurazione si verifica quando la configurazione dei criteri in una mesh si discosta dalla relativa origine attendibile. Config Sync può essere utilizzato per prevenire la deviazione della configurazione.

Applica audit log e monitoraggio

Gli amministratori della mesh devono monitorare quanto segue:

Queste risorse di osservabilità possono essere utilizzate per verificare che la configurazione di sicurezza funzioni come previsto e monitorare eventuali eccezioni all'applicazione dei criteri di sicurezza. Ad esempio, l'accesso che non è passato attraverso i sidecar, l'accesso che non aveva credenziali valide ma ha raggiunto un servizio.

Sebbene il software di osservabilità open source (ad esempio, Prometheus) possa essere utilizzato con Cloud Service Mesh, consigliamo vivamente di utilizzare Google Cloud Observability (in precedenza Stackdriver). La soluzione di osservabilità integrata per Google Cloud fornisce logging, raccolta di metriche, monitoraggio e avvisi, che sono completamente gestiti e facili da usare.

Proteggere l'autorità di certificazione per i certificati in-cluster

Per impostazione predefinita, Cloud Service Mesh utilizza un'autorità di certificazione (CA) gestita da Google chiamata autorità di certificazione Cloud Service Mesh.

Se utilizzi l'autorità di certificazione (CA) Istio non gestita, ospitata come parte di Istiod, la chiave di firma della CA è archiviata in un secret Kubernetes ed è accessibile agli operatori che hanno accesso alla risorsa secret nello spazio dei nomi istio-system. Si tratta di un rischio, in quanto un operatore potrebbe essere in grado di utilizzare la chiave CA indipendentemente dalla CA di Istiod e potenzialmente firmare i certificati del workload in modo indipendente. Esiste anche il rischio che una chiave di firma CA autogestita venga divulgata accidentalmente a causa di un errore operativo.

Per proteggere la chiave di firma della CA, l'amministratore del mesh può eseguire l'upgrade del mesh per utilizzare l'autorità di certificazione Cloud Service Mesh o Certificate Authority Service (CA Service), che sono protetti e gestiti da Google. Rispetto all'autorità di certificazione Cloud Service Mesh, CA Service supporta chiavi di firma per cliente tramite Cloud KMS supportato da Cloud HSM. CA Service supporta anche i carichi di lavoro regolamentati, mentre l'autorità di certificazione Cloud Service Mesh non lo fa.

Sicurezza dei carichi di lavoro

La sicurezza dei carichi di lavoro protegge dagli attacchi che compromettono i pod dei carichi di lavoro e poi utilizzano i pod compromessi per lanciare attacchi contro il cluster (ad esempio, attacchi botnet).

Limitare i privilegi del pod

Un pod Kubernetes potrebbe avere privilegi che influiscono su altri pod sul nodo o sul cluster. È importante applicare restrizioni di sicurezza ai pod dei carichi di lavoro per impedire a un pod compromesso di lanciare attacchi contro il cluster.

Per applicare il principio del privilegio minimo ai workload su un pod:

  • I servizi di cui è stato eseguito il deployment in un mesh devono essere eseguiti con il minor numero possibile di privilegi.
  • I pod Kubernetes in esecuzione in modalità con privilegi possono manipolare gli stack di rete e altre funzionalità del kernel sull'host. GKE Enterprise Policy Controller può essere utilizzato per impedire ai pod di eseguire container con privilegi.
  • Cloud Service Mesh può essere configurato per utilizzare un init container per configurare il reindirizzamento del traffico iptables al sidecar. Per questo è necessario che l'utente che esegue i deployment dei carichi di lavoro disponga dei privilegi per il deployment di container con le funzionalità NET_ADMIN e NET_RAW. Per evitare il rischio di eseguire container con privilegi elevati, gli amministratori del mesh possono invece abilitare il plug-in Istio CNI per configurare il reindirizzamento del traffico ai sidecar.

Immagini container sicure

Gli autori degli attacchi possono lanciare attacchi sfruttando immagini container vulnerabili. Gli amministratori devono applicare Autorizzazione binaria per verificare l'integrità delle immagini container e garantire che nel mesh venga eseguito il deployment solo delle immagini container attendibili.

Mitigare le vulnerabilità della rete mesh

  • Container Analysis. Container Analysis può analizzare e rilevare le vulnerabilità nei carichi di lavoro GKE.
  • Gestione delle CVE (Common Vulnerabilities and Exposures). Dopo che è stata rilevata una vulnerabilità in un'immagine container, gli amministratori del mesh devono correggerla il prima possibile. Per Cloud Service Mesh gestito con piano dati gestito, Google gestisce automaticamente l'applicazione di patch alle CVE che interessano le immagini mesh.

Utilizzare la federazione delle identità per i carichi di lavoro per GKE per accedere in modo sicuro ai servizi Google

La federazione delle identità per i carichi di lavoro per GKE è il modo consigliato per i carichi di lavoro mesh di accedere in modo sicuro ai servizi Google. L'alternativa di archiviare una chiave dell'account di servizio in un secret Kubernetes e utilizzare la chiave dell'account di servizio per accedere ai servizi Google non è altrettanto sicura a causa dei rischi di compromissione delle credenziali, escalation dei privilegi, divulgazione di informazioni e non ripudio.

Monitorare lo stato di sicurezza tramite la dashboard per la sicurezza e la telemetria

Un mesh di servizi potrebbe presentare eccezioni di sicurezza e potenziali scappatoie. È fondamentale mostrare e monitorare lo stato di sicurezza di un mesh, che include i criteri di sicurezza applicati, le eccezioni di sicurezza e le potenziali lacune di sicurezza nel mesh. La dashboard per la sicurezza di GKE Enterprise e la telemetria possono essere utilizzate per visualizzare e monitorare lo stato di sicurezza del mesh.

La telemetria monitora l'integrità e le prestazioni dei servizi in un mesh, consentendo agli amministratori del mesh di osservare i comportamenti dei servizi (ad esempio SLO, traffico anomalo, interruzione del servizio, topologia).

La dashboard per la sicurezza di GKE Enterprise analizza e visualizza i criteri di sicurezza applicati a un workload in un mesh di servizi, inclusi i criteri di controllo dell'accesso dell'accesso (criteri di rete Kubernetes, criteri di autorizzazione binaria e criteri di controllo dell'accesso al servizio) e i criteri di autenticazione (mTLS).

Sicurezza per dati e credenziali utente sensibili

I dati o le credenziali sensibili degli utenti possono essere vulnerabili agli attacchi provenienti da pod o operazioni dannose se vengono archiviati nell'archiviazione permanente del cluster, ad esempio utilizzando i secret di Kubernetes o direttamente nei pod. Sono anche vulnerabili agli attacchi di rete se vengono trasferiti sulla rete per l'autenticazione ai servizi.

  • Se possibile, archivia i dati e le credenziali sensibili degli utenti in uno spazio di archiviazione protetto, come Secret Manager e Cloud KMS.
  • Designa spazi dei nomi separati per i pod Kubernetes che accedono a dati sensibili e definisci criteri Kubernetes per renderli inaccessibili da altri spazi dei nomi. Segmenta i ruoli utilizzati per le operazioni e applica i limiti dello spazio dei nomi.
  • Imponi lo scambio di token per impedire l'esfiltrazione di token di lunga durata con privilegi elevati.

Passaggi successivi