Sicurezza dei servizi (legacy)
Questo documento fornisce una panoramica della sicurezza dei servizi con Cloud Service Mesh utilizzando le API di bilanciamento del carico. È destinato agli utenti di Cloud Service Mesh che vogliono aggiungere autenticazione, crittografia e autorizzazione ai propri deployment. Questo documento presuppone che tu abbia familiarità con Cloud Service Mesh con Envoy e con applicazioni gRPC senza proxy.
Questo documento riguarda le configurazioni che utilizzano le API di bilanciamento del carico. Se utilizzano le API di routing dei servizi, consulta Sicurezza dei servizi. Questo è un documento precedente.
Cloud Service Mesh ti consente di proteggere le comunicazioni tra servizi mesh. Nel mesh, ogni servizio ha un'identità. Le seguenti funzionalità aiutano per supportare comunicazioni sicure:
- Autenticazione e crittografia che utilizzano TLS (Transport Layer Security) e TLS (mTLS) reciproco sia per Cloud Service Mesh con Envoy che per Cloud Service Mesh con applicazioni gRPC senza proxy. Criteri TLS del client e criteri TLS del server controllare se i servizi devono dimostrare la propria identità tra loro e utilizzare a canali di comunicazione criptati.
- Autorizzazione, in base alle caratteristiche del client e della richiesta. I criteri di autorizzazione controllano se un servizio è autorizzato ad accedere a un altro servizio e quali azioni sono consentite.
Utilizzando certificati e chiavi forniti da un'autorità di certificazione privata (CA), Certificate Authority Service di Google, per permetterti di mantenere la sicurezza dei servizi. CA Service fornisce Certificati mesh GKE. I certificati mesh GKE e Cloud Service Mesh ti consentono di eseguire automaticamente il deployment e fare in modo che i carichi di lavoro li utilizzino. Modifica i pod per consentire ai carichi di lavoro di ricevere e utilizzare le credenziali mTLS. La sicurezza del servizio Cloud Service Mesh è disponibile solo per i carichi di lavoro basati su GKE.
Nelle moderne architetture basate su microservizi, i servizi più piccoli e più mirati per sostituire le grandi applicazioni monolitiche. Le chiamate di servizio comunicano tra loro sulla rete. Queste chiamate, che erano chiamate in-process nelle applicazioni monolithic, presentano problemi di sicurezza, quindi è meglio autenticarle, criptarle e autorizzarle. Questi passaggi supportano il principio Zero Trust, in che si presuppone che tutto il traffico di rete sia a rischio, indipendentemente dal fatto che il traffico ha origine all'interno o all'esterno della rete.
Il pattern di progettazione del mesh di servizi separa qualsiasi complessità relativa le comunicazioni tra servizi dalla logica di business. È il piano di dati a gestire questa complessità. Oltre a ridurre la complessità dell'applicazione, il pattern di progettazione del mesh di servizi consente modelli di sicurezza che altrimenti potrebbero essere difficili da implementare e gestire.
In questo modello, i sidecar gRPC o Envoy senza proxy autenticano e criptano in modo sicuro le comunicazioni, ottenendo informazioni di configurazione da Cloud Service Mesh e certificati da un Pool di servizi CA.
Queste funzionalità di sicurezza semplificano la procedura di implementazione di Cloud Service Mesh fornendo quanto segue:
- Provisioning automatico di chiavi e certificati per tutti i servizi nel tuo mesh.
- Rotazione automatica di chiavi e certificati per maggiore sicurezza.
- L'integrazione con Google Kubernetes Engine (GKE) per utilizzare tutte le sue funzionalità, come descrittori ed etichette del deployment.
- Disponibilità elevata dei servizi gestiti da Google, tra cui Cloud Service Mesh e i pool di autorità di certificazione private gestiti da CA Service.
- Sicurezza legata a Google Identity and Access Management (IAM): autorizzazione del servizio in base agli account di servizio Google autorizzati.
- Interoperabilità perfetta con i tuoi carichi di lavoro basati su Envoy e senza proxy. Per Ad esempio, un servizio può essere dietro un proxy Envoy, ma il client utilizza gRPC la sicurezza del mesh di servizi senza proxy. Al contrario, un servizio può essere protetto dalla sicurezza del mesh di servizi gRPC senza proxy, ma il client utilizza un proxy Envoy.
Comunicazioni tra servizi sicure
Cloud Service Mesh fornisce autorizzazione e sicurezza service-to-service con la crittografia e l'autenticazione che usano TLS. Criteri TLS del client e i criteri TLS del server consentono ai servizi di:
- Affermare e convalidare le loro identità.
- Cripta le sessioni di comunicazione utilizzando TLS o mTLS.
In un mesh di servizi, il piano dati gestisce questo tipo di sicurezza in modo che le applicazioni non debbano adottare misure speciali per essere sicure.
I criteri di autorizzazione ti consentono di negare o consentire l'accesso in base alle regole che definisci.
Utilizzare TLS per la crittografia
Quando un servizio chiama un altro servizio utilizzando il protocollo HTTP, HTTP/2 o gRPC, il traffico che transita nella rete è in testo normale. Questo traffico potrebbe essere soggetti ad attacchi person in the middle, in cui un aggressore intercetta il traffico e ispeziona o manipola il suo contenuti.
Per ridurre questo potenziale problema, puoi utilizzare HTTP, HTTP/2 o gRPC tramite TLS con Cloud Service Mesh. Quando utilizzi questi protocolli su TLS, il traffico tra il client e il server viene criptato utilizzando TLS in base al certificato del server. Il traffico non è più in testo normale e ciò riduce probabilità che un aggressore possa intercettare e ispezionare o manipolare i suoi contenuti.
Utilizza TLS per l'autenticazione
Quando un servizio effettua una chiamata a un altro servizio, poniti le seguenti domande:
Come fa un cliente a sapere che sta ricevendo una risposta da parte di server piuttosto che un impostore? Ad esempio, in una tipica interazione richiesta-risposta basata su HTTP, il client non verifica l'identità del server.
Cosa succede se un aggressore intercetta questo traffico? Ad esempio, traffico HTTP non è criptato, quindi chiunque riceva il traffico può esaminarne il contenuto. Questo è noto come attacco man in the middle.
Per ridurre al minimo questi problemi, puoi utilizzare HTTP, HTTP/2 e gRPC su TLS. In queste gli scambi tra un client e un server, il server deve utilizzare un server per dimostrare la sua identità al client. Le richieste e le risposte vengono quindi criptati con TLS.
Autenticazione TLS reciproca
Quando Cloud Service Mesh configura il networking delle applicazioni sia per il client che per il client server, ad esempio configurando un proxy Envoy sul lato client un altro proxy Envoy sul lato server, puoi sfruttare le funzionalità di autenticazione, come l'autenticazione reciproca.
In un tipico scambio HTTP over TLS, che non si basa sull'autenticazione reciproca, il server ha un certificato che utilizza per criptare le comunicazioni tra il client e il server. Il client può verificare l'identità di un server controllando la firma che il server invia durante il TLS handshake. Tuttavia, il server non verifica l'identità del client.
Quando l'autenticazione reciproca è abilitata, il client ha anche un certificato. Il client verifica l'identità del server, come descritto nel paragrafo precedente, e il server può anche verificare l'identità del client. Sia il client che il server certificati sono utilizzati per crittografare il canale di comunicazione. Ciò consente inoltre il server ad autorizzare i client in base a una verifica dell'identità del client.
Autorizza le chiamate di servizio
Puoi scegliere di consentire o negare l'accesso al servizio utilizzando i criteri di autorizzazione.
Con Cloud Service Mesh, puoi definire regole di autorizzazione e di rifiuto per autorizzare l'accesso in base ai parametri di richiesta. Puoi basare queste regole su parametri di livello 3 e 7, tra cui l'ID client, che viene dedotto da client-cert
in una connessione mTLS, l'indirizzo IP di origine, la corrispondenza dell'host, la corrispondenza del metodo e la corrispondenza dell'intestazione. Il seguente diagramma mostra l'autorizzazione con i proxy Envoy. Il processo
è simile ai client gRPC.
Limitare l'accesso tramite l'autorizzazione
Una best practice all'interno di un mesh di servizi è rispettare il principio di almeno di accesso. Puoi aderire a questo principio limitando l'accesso ai servizi solo ai chiamanti che dipendono dal servizio. Quando un chiamante tenta di accedere per un servizio per il quale non è autorizzato, il tentativo viene rifiutato.
Con Cloud Service Mesh, puoi configurare criteri di autorizzazione che abilitano il tuo piano dati per consentire o negare l'accesso ai servizi in base alle regole che definisci. Questi criteri sono costituiti da due componenti:
- Un'azione: consentire o negare
- Un elenco di regole
Quando viene inviata una richiesta o un'RPC, il client Cloud Service Mesh nel servizio chiamato determina se esiste una corrispondenza con una regola. Se viene trovata una corrispondenza, la richiesta o l'RPC viene consentita o negata. Puoi definire una regola per la corrispondenza in base ad attributi come:
- Quando viene utilizzato mTLS, l'account di servizio Kubernetes del servizio chiamante
- L'indirizzo IP (o intervallo di indirizzi) del servizio chiamante
- Le porte del servizio di destinazione
- Gli attributi HTTP della richiesta, inclusi i nomi host, i metodi e le intestazioni HTTP definite dall'utente.
Nomi sicuri
Come ulteriore meccanismo di sicurezza, puoi configurare la denominazione sicura con Cloud Service Mesh. In questo modo puoi definire un elenco di nomi consentiti o di identità SPIFFE (Secure Production Identity Framework for Everyone) per un determinato servizio a cui un client sta tentando di connettersi. Durante lo scambio TLS, il backend del servizio restituisce un certificato X.509 al client. Il cliente quindi controlla il certificato per confermare che il certificato X.509 corrisponda a uno degli i nomi o le identità SPIFFE. Per saperne di più sulle identità SPIFFE, consulta Secure Production Identity Framework for Everyone.
Proteggere il traffico a un gateway
Per configurare i tuoi gateway, puoi utilizzare Cloud Service Mesh. Un gateway è un proxy Envoy autonomo che generalmente agisce in uno dei seguenti modi:
- Un gateway in entrata che gestisce il traffico in entrata in un mesh o in un altro dominio
- Un gateway in uscita che gestisce il traffico in uscita da un mesh o da un altro dominio
- Un proxy inverso o un proxy intermedio che distribuisce il traffico in entrata tra uno o più servizi
I client che vogliono inviare traffico all'interno o all'esterno del mesh lo inviano al gateway. Il gateway gestisce quindi le richieste in base alle regole configurato con Cloud Service Mesh. Ad esempio, puoi imporre che il traffico che entra nel tuo mesh (anche tramite il gateway di ingresso) debba essere criptato utilizzando TLS.
Componenti di sicurezza
La sicurezza del servizio Cloud Service Mesh supporta i criteri TLS del client, i criteri TLS del server e i criteri di autorizzazione. I criteri vengono creati in modo da Cloud Service Mesh può configurare il tuo piano dati e abilitare la sicurezza le funzionalità di machine learning. Per creare o aggiornare queste norme, non è necessario apportare modifiche alle applicazioni.
Crittografia e modalità di autenticazione supportate
Quando un servizio effettua una chiamata a un altro servizio, il primo passo per stabilire la sicurezza le comunicazioni è fare in modo che ogni servizio dimostri la propria identità all'altro servizio. Il grado in cui un servizio ha bisogno di dimostrare la propria identità si basa sul protocollo TLS che hai configurato.
Puoi configurare i seguenti livelli di sicurezza:
- Non criptato/non autenticato
- TLS
- TLS reciproco (mTLS)
- Permissivo: mTLS o non criptato/non autenticato, a seconda di come il client avvia la connessione
Certificati e autorità di certificazione
I certificati e un'autorità di certificazione (CA) attendibile forniscono le basi per l'attendibilità in un sistema distribuito come un mesh di servizi. Utilizzando i certificati, possono dimostrare la propria identità e verificare le identità presentate come indicato di seguito:
- Un servizio che vuole dimostrare la propria identità a un altro servizio presenta il suo certificato all'altro servizio. Una CA considerata attendibile da entrambi i servizi firma e rilascia questo certificato in modo crittografico.
- Il servizio che riceve questo certificato può verificare che proveniente da una CA che considera attendibile.
Cloud Service Mesh non è un'autorità di certificazione. Per abilitare le comunicazioni sicure, devi configurare un meccanismo che:
- Esegue il provisioning di identità e certificati
- Rende i certificati disponibili ai client Cloud Service Mesh, come Envoy che Cloud Service Mesh configura
Cloud Service Mesh supporta il servizio CA di Google. Le guide alla configurazione per Envoy e gRPC proxyless includono istruzioni per la configurazione (per maggiori dettagli, consulta Passaggi successivi).
Architettura e risorse
Cloud Service Mesh include lo spazio dei nomi dell'API Network Security, costituito da tre risorse API Google Cloud che ti consentono di specificare i criteri di sicurezza da applicare al piano dati.
Due risorse dell'API Google Cloud supportano l'autenticazione nel mesh: i criteri TLS client e i criteri TLS server. Una terza risorsa, l'autorizzazione supporta l'autorizzazione.
Lo spazio dei nomi dell'API Network Services include la risorsa dei criteri degli endpoint, che consente a Cloud Service Mesh di fornire la configurazione (TLS del server, TLS di autorizzazione) agli endpoint. Gli endpoint sono il Cloud Service Mesh client che interrompono una comunicazione in entrata da un altro Cloud Service Mesh di alto profilo.
Per abilitare il servizio di sicurezza, utilizza il proxy HTTPS di destinazione o il proxy gRPC di destinazione nel deployment. Non puoi utilizzare il proxy HTTP o il proxy TCP di destinazione.
Criterio TLS del client
Un criterio TLS del client consente di specificare la modalità TLS lato client e le informazioni sul fornitore di certificati da applicare al piano dati. TLS client I criteri supportano l'autenticazione TLS e mTLS. I criteri TLS del client devono essere collegato a una risorsa del servizio di backend globale.
Quando configuri TLS, devi fornire un meccanismo mediante il quale il client
convalida il certificato che riceve dal server durante la convalida
Exchange usando il campo API serverValidationCa
. Il cliente utilizza questo
informazioni per ottenere un certificato di convalida che possa essere utilizzato per convalidare
certificato del server.
Quando configuri mTLS, devi anche fornire un meccanismo tramite il quale il client ottiene il proprio certificato e la propria chiave privata utilizzando il campo API clientCertificate
. Il client utilizza queste informazioni per presentare un certificato al server
durante l'handshake TLS.
In questa release, Cloud Service Mesh supporta un'autorità di certificazione gestita,
CA Service. La configurazione è semplice: specifica il nome del plug-in google_cloud_private_spiffe
quando configuri il provider di certificati. Questo fa sì che i client xDS
caricare certificati e chiavi da una posizione statica. Come prerequisiti, devi configurare i pool di servizi CA e abilitare i certificati mesh sul tuo cluster GKE.
Criterio TLS del server
Un criterio TLS del server (risorsa ServerTlsPolicy
) consente di specificare la modalità TLS lato server e le informazioni del provider di certificati da applicare al piano dati. I criteri TLS del server supportano TLS, mTLS e, solo con Envoy,
Open_or_mTLS
l'autenticazione. I criteri TLS del server possono essere collegati alla risorsa proxy HTTPS di destinazione o a una risorsa di criteri endpoint.
Nomi alternativi dell'oggetto
Quando configuri il campo securitySettings
di un servizio di backend globale, puoi:
fornisce un elenco di nomi alternativi dei soggetti nel campo subjectAltNames
. Quando
un client avvia un handshake TLS con uno dei backend del servizio,
server presenta il proprio certificato X.509. Il client esamina il certificato
campo subjectAltName
. Se il campo contiene uno dei valori specificati, la comunicazione continua. Questo meccanismo è descritto in precedenza in Nomi sicuri.
Criterio di autorizzazione
Un criterio di autorizzazione (risorsa AuthorizationPolicy
) specifica in che modo un server autorizzi le richieste o le RPC in entrata. Può essere configurato per consentire o negare un
in entrata o in RPC in base a vari parametri, ad esempio l'identità del client
che ha inviato la richiesta, l'host, le intestazioni e altri attributi HTTP. Un criterio di autorizzazione può essere associato alla risorsa proxy HTTPS di destinazione o a una risorsa criterio endpoint.
Limitazioni
La sicurezza del servizio Cloud Service Mesh è supportata solo con con GKE. Non puoi eseguire il deployment della sicurezza del servizio con Compute Engine.
Limitazioni con applicazioni gRPC senza proxy
La sicurezza del servizio per i servizi gRPC senza proxy presenta le seguenti limitazioni:
- Questa release è limitata a Java, Python, C++ e Go.
Passaggi successivi
- Per saperne di più sulle opzioni di configurazione, consulta Casi d'uso per la sicurezza del servizio Cloud Service Mesh (legacy).
- Per configurare la sicurezza del servizio con i proxy Envoy, consulta Configurare la sicurezza del servizio Cloud Service Mesh con Envoy (legacy).
- Per configurare la sicurezza del servizio con applicazioni gRPC proxyless, consulta Configurazione della sicurezza del servizio Cloud Service Mesh con applicazioni gRPC proxyless (legacy).