Sicurezza del servizio
Questo documento fornisce una panoramica della sicurezza dei servizi con Cloud Service Mesh. È destinato agli utenti di Cloud Service Mesh che vogliono aggiungere autenticazione, crittografia e autorizzazione ai loro deployment. Questo documento presuppone che tu conosca la panoramica di Cloud Service Mesh e le applicazioni gRPC senza proxy.
Cloud Service Mesh ti consente di proteggere le comunicazioni da servizio a servizio nel tuo mesh. Nella mesh, ogni servizio ha un'identità. Le seguenti funzionalità contribuiscono a supportare le comunicazioni sicure:
- Autenticazione e crittografia che utilizzano Transport Layer Security (TLS) e TLS reciproco (mTLS) sia per Cloud Service Mesh con Envoy sia per Cloud Service Mesh con applicazioni gRPC senza proxy. I criteri TLS client e i criteri TLS server controllano se i servizi devono dimostrare la propria identità reciproca e utilizzare canali di comunicazione criptati.
- Autorizzazione, in base alle caratteristiche del cliente e della richiesta. Le policy di autorizzazione controllano se un servizio è autorizzato ad accedere a un altro servizio e quali azioni sono consentite.
L'utilizzo di certificati e chiavi forniti da un'autorità di certificazione (CA) privata, Certificate Authority Service di Google, semplifica la manutenzione della sicurezza del servizio. CA Service fornisce certificati mesh GKE. La funzionalità dei certificati mesh GKE e Cloud Service Mesh ti consentono di eseguire automaticamente il deployment di questi certificati e di farli utilizzare dai workload. Modifica i pod per consentire ai workload di ricevere e utilizzare le credenziali mTLS. La sicurezza del servizio Cloud Service Mesh è attualmente disponibile solo per i carichi di lavoro basati su GKE.
Nelle moderne architetture basate su microservizi, servizi più piccoli e mirati sostituiscono le grandi applicazioni monolitiche. Le chiamate di servizio comunicano tra loro tramite la rete. Queste chiamate, che erano chiamate in corso nelle applicazioni monolitiche, presentano sfide di sicurezza, quindi è meglio autenticarle, criptarle e autorizzarle. Questi passaggi supportano il principio Zero Trust, in cui si presume che tutto il traffico di rete sia a rischio, indipendentemente dal fatto che abbia origine all'interno o all'esterno della rete.
Il pattern di progettazione del mesh di servizi separa qualsiasi complessità relativa alle comunicazioni tra servizi dalla logica di business. Il piano di controllo gestisce questa complessità. Oltre a ridurre la complessità delle applicazioni, il pattern di progettazione mesh di servizi consente di implementare e gestire pattern di sicurezza che altrimenti potrebbero essere difficili da implementare e gestire.
In questo modello, gRPC senza proxy o i sidecar Envoy 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 il processo di deployment di Cloud Service Mesh fornendo quanto segue:
- Provisioning automatico di chiavi e certificati per tutti i servizi nella mesh.
- Rotazione automatica di chiavi e certificati per una maggiore sicurezza.
- Integrazione con Google Kubernetes Engine (GKE) per utilizzare tutte le sue funzionalità, come descrittori di deployment ed etichette.
- Alta disponibilità dei servizi gestiti da Google, tra cui Cloud Service Mesh e pool di autorità di certificazione private gestite da CA Service.
- Sicurezza legata a Google Identity and Access Management (IAM): autorizzazione del servizio basata su service account Google autorizzati.
- Interoperabilità perfetta con i carichi di lavoro basati su Envoy e senza proxy. Ad esempio, un servizio può trovarsi dietro un proxy Envoy, ma il client utilizza la sicurezza della mesh di servizi gRPC senza proxy. Al contrario, un servizio può trovarsi dietro la sicurezza della mesh di servizi gRPC senza proxy, ma il client utilizza un proxy Envoy.
Comunicazioni tra servizi sicure
Cloud Service Mesh fornisce l'autorizzazione e la sicurezza da servizio a servizio con crittografia e autenticazione che utilizzano TLS. Le policy TLS del client e del server consentono ai servizi di:
- Affermare e convalidare le proprie 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 prendere provvedimenti 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 soggetto ad attacchi man-in-the-middle, in cui un malintenzionato intercetta il traffico e ne ispeziona o manipola i contenuti.
Per mitigare questo potenziale problema, puoi utilizzare HTTP, HTTP/2 o gRPC su TLS con Cloud Service Mesh. Quando utilizzi questi protocolli su TLS, il traffico tra il client e il server viene criptato utilizzando TLS basato sul certificato del server. Il traffico non è più in testo normale, il che riduce la probabilità che un malintenzionato possa intercettare e ispezionare o manipolare i suoi contenuti.
Utilizzare TLS per l'autenticazione
Quando un servizio chiama un altro servizio, considera le seguenti domande:
Come fa un client a sapere di ricevere una risposta dal server corretto anziché da un impostore? Ad esempio, in una tipica interazione richiesta-risposta basata su HTTP, il client non verifica l'identità del server.
Che cosa succede se un malintenzionato intercetta il traffico? Ad esempio, il traffico HTTP non è criptato, quindi chiunque lo riceva può esaminarne i contenuti. Questo tipo di attacco è noto come attacco person-in-the-middle.
Per mitigare questi problemi, puoi utilizzare HTTP, HTTP/2 e gRPC su TLS. In questi scambi tra un client e un server, il server deve utilizzare un certificato server per dimostrare la sua identità al client. Le richieste e le risposte vengono poi criptate utilizzando TLS.
Autenticazione TLS reciproca
Quando Cloud Service Mesh configura il networking delle applicazioni sia per il client che per il server, ad esempio configurando un proxy Envoy sul lato client e un altro proxy Envoy sul lato server, puoi sfruttare pattern di autenticazione avanzati come l'autenticazione reciproca.
In un tipico scambio HTTP su TLS, che non si basa sull'autenticazione reciproca, il server dispone di un certificato che utilizza per criptare le comunicazioni tra il client e il server. Il client può verificare l'identità del server controllando la firma che il server invia durante l'handshake TLS. Tuttavia, il server non verifica l'identità del client.
Quando l'autenticazione reciproca è abilitata, anche il client ha un certificato. Il client verifica l'identità del server, come descritto nel paragrafo precedente, e il server può anche verificare l'identità del client. Vengono utilizzati sia il certificato client sia quello server per criptare il canale di comunicazione. In questo modo, il server può autorizzare i client in base all'identità verificata del client.
Autorizza chiamate di servizio
Puoi scegliere di consentire o negare l'accesso al servizio utilizzando i criteri di autorizzazione.
Utilizzando Cloud Service Mesh, puoi definire regole di autorizzazione e negazione per autorizzare l'accesso
in base ai parametri della richiesta. Puoi basare queste regole sui parametri dei livelli 3 e 7, inclusi l'ID client, derivato da client-cert
in una connessione mTLS, l'indirizzo IP di origine, la corrispondenza host, la corrispondenza metodo e la corrispondenza intestazione. Il seguente diagramma mostra l'autorizzazione con i proxy Envoy. La procedura
è simile con i client gRPC.
Limitare l'accesso tramite l'autorizzazione
Una best practice all'interno di un mesh di servizi consiste nel rispettare il principio del privilegio minimo. Puoi rispettare questo principio limitando l'accesso al servizio solo ai chiamanti che dipendono dal servizio. Quando un chiamante tenta di accedere a un servizio per il quale non è autorizzato, il tentativo viene rifiutato.
Con Cloud Service Mesh, puoi configurare criteri di autorizzazione che consentono al tuo piano dati di consentire o negare l'accesso al servizio in base alle regole che definisci. Queste norme sono costituite da due componenti:
- Un'azione: consentire o negare
- Un elenco di regole
Quando viene inviata una richiesta o una RPC, il client Cloud Service Mesh sul servizio chiamato determina se esiste una corrispondenza con una regola. Se viene trovata una corrispondenza, la richiesta o la RPC viene consentita o negata. Puoi definire una regola di corrispondenza per attributi come i seguenti:
- Quando viene utilizzato mTLS, il service account Kubernetes del servizio chiamante
- L'indirizzo IP (o l'intervallo di indirizzi) del servizio chiamante
- Le porte del servizio di destinazione
- Gli attributi HTTP della richiesta, inclusi nomi host, metodi e intestazioni HTTP definite dall'utente.
Denominazione sicura
Come meccanismo di sicurezza aggiuntivo, puoi configurare la denominazione sicura con Cloud Service Mesh. In questo modo puoi definire un elenco di nomi consentiti o 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 client esamina il certificato per verificare che il certificato X.509 corrisponda a uno dei nomi o delle 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 gateway, puoi utilizzare Cloud Service Mesh. Un gateway è un proxy Envoy autonomo che in genere funge da:
- Un gateway in entrata che gestisce il traffico in entrata in un mesh o in un altro dominio
- Un gateway di uscita che gestisce il traffico in uscita da una mesh o da un altro dominio
- Un reverse proxy o un proxy intermedio che distribuisce il traffico in entrata tra uno o più servizi.
I client che vogliono inviare traffico nella mesh o fuori dalla mesh inviano il traffico al gateway. Il gateway gestisce quindi le richieste in base alle regole che hai configurato con Cloud Service Mesh. Ad esempio, puoi forzare la crittografia del traffico che entra nella mesh (tramite il gateway in entrata) utilizzando TLS.
Componenti di sicurezza
La sicurezza del servizio Cloud Service Mesh supporta le policy TLS del client, le policy TLS del server e le policy di autorizzazione. Crea questi criteri in modo che Cloud Service Mesh possa configurare il piano dati e attivare le funzionalità di sicurezza. Per creare o aggiornare queste norme, non devi apportare modifiche alle tue applicazioni.
Crittografia e modalità di autenticazione supportate
Quando un servizio chiama un altro servizio, il primo passaggio per stabilire comunicazioni sicure è che ogni servizio dimostri la propria identità all'altro servizio. Il grado in cui un servizio deve dimostrare la sua identità si basa sulla modalità TLS che configuri.
Puoi configurare i seguenti livelli di sicurezza:
- Non criptato/non autenticato
- TLS
- TLS reciproco (mTLS)
- Permissiva: mTLS o non criptata/non autenticata, 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 la fiducia in un sistema distribuito come unmesh di servizih. Utilizzando i certificati, i servizi possono dimostrare la propria identità e verificare le identità presentate nei seguenti modi:
- Un servizio che vuole dimostrare la propria identità a un altro servizio presenta il proprio certificato all'altro servizio. Una CA di cui entrambi i servizi si fidano firma e rilascia questo certificato in modo crittografico.
- Il servizio che riceve questo certificato può verificare che provenga da una CA di cui si fida.
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 per i client Cloud Service Mesh, come i proxy 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 i dettagli, vedi Passaggi successivi).
Architettura e risorse
Cloud Service Mesh include lo spazio dei nomi dell'API Network Security, che è costituito da tre Google Cloud risorse API che ti consentono di specificare le norme di sicurezza da applicare al tuo data plane.
Due risorse API Google Cloud supportano l'autenticazione nel mesh: policy TLS client e policy TLS server. Una terza risorsa, la policy di autorizzazione, supporta l'autorizzazione.
Lo spazio dei nomi dell'API Network Services include la risorsa policy dell'endpoint, che consente a Cloud Service Mesh di fornire la configurazione (TLS server, TLS client e policy di autorizzazione) agli endpoint. Gli endpoint sono i client Cloud Service Mesh che terminano una comunicazione in entrata da un altro client Cloud Service Mesh.
Policy TLS del client
Un criterio TLS client consente di specificare la modalità TLS lato client e le informazioni sul fornitore di certificati da applicare al tuo data plane. I criteri TLS client supportano l'autenticazione TLS e mTLS. Le norme TLS client devono essere collegate 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 lo scambio TLS
utilizzando il campo API serverValidationCa
. Il client utilizza queste informazioni per ottenere un certificato di convalida che può utilizzare per convalidare il certificato del server.
Quando configuri mTLS, devi anche fornire un meccanismo mediante il quale il client
ottiene il certificato e la chiave privata utilizzando il campo clientCertificate
dell'API. 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, il servizio CA. La configurazione
è semplice: devi specificare il nome del plug-in google_cloud_private_spiffe
quando configuri il fornitore di certificati. In questo modo, i client xDS caricano 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.
Policy TLS del server
Un criterio TLS del server (risorsa ServerTlsPolicy
) consente di specificare la modalità TLS lato server e le informazioni sul fornitore di certificati da applicare al data plane. I criteri TLS del server supportano TLS, mTLS e, solo con Envoy,
l'autenticazione Open_or_mTLS
. Colleghi i criteri TLS del server a una risorsa di criteri
endpoint.
Nomi alternativi dell'oggetto
Quando configuri il campo securitySettings
di un servizio di backend globale, puoi
fornire un elenco di nomi alternativi del soggetto nel campo subjectAltNames
. Quando
un client avvia un handshake TLS con uno dei backend del servizio, il
server presenta il proprio certificato X.509. Il client esamina il campo
subjectAltName
del certificato. Se il campo contiene uno dei valori specificati,
la comunicazione continua. Questo meccanismo è descritto in precedenza nella sezione
Denominazione sicura.
Policy di autorizzazione
Un criterio di autorizzazione (risorsa AuthorizationPolicy
) specifica in che modo un server autorizza le richieste o le RPC in entrata. Può essere configurato per consentire o negare una
richiesta in entrata o una RPC in base a vari parametri, come l'identità del client
che ha inviato la richiesta, l'host, le intestazioni e altri attributi HTTP. Collega
le policy di autorizzazione a una risorsa policy endpoint.
Una regola di policy di autorizzazione ha i seguenti componenti:
from
: specifica l'identità del client consentito dalla regola. L'identità può essere derivata da un certificato client in una connessione TLS reciproca oppure può essere l'identità ambiente associata alla VM client, ad esempio da un account di servizio o un tag sicuro.to
: specifica le operazioni consentite dalla regola, ad esempio gli URL a cui è possibile accedere o i metodi HTTP consentiti.when
: consente di definire vincoli aggiuntivi che devono essere soddisfatti. Puoi utilizzare le espressioni Common Expression Language (CEL) per definire i vincoli.action
: specifica l'azione della regola. Può essere uno dei seguenti valori:ALLOW
,DENY
oCUSTOM
.
Limitazioni
La sicurezza del servizio Cloud Service Mesh è supportata solo con GKE. Non puoi eseguire il deployment della sicurezza del servizio con Compute Engine.
Quando valuta una richiesta, un criterio di autorizzazione esegue una delle seguenti azioni:
ALLOW
: concede l'accesso alla risorsa richiesta se la richiesta corrisponde alle regole definite all'interno del criterio di autorizzazione. Il criterio di autorizzazione blocca l'accesso alla risorsa richiesta se la richiesta non corrisponde ad alcuna regola definita all'interno del criterio di autorizzazione. Una richiesta viene rifiutata se non corrisponde a un criterioALLOW
, anche se altri criteri lo consentono.DENY
: blocca l'accesso alla risorsa se una richiesta corrisponde a una delle regole specifiche all'interno di un criterioDENY
. Il criterio di autorizzazione concede l'accesso alla risorsa richiesta se la richiesta non corrisponde ad alcuna regola definita all'interno del criterio di autorizzazione. Una richiesta viene negata se corrisponde a un criterioDENY
, anche se altri criteri lo consentono.CUSTOM
(non supportato su Cloud Service Mesh): consente l'integrazione con sistemi di autorizzazione esterni per decisioni di autorizzazione complesse. Le azioniCUSTOM
vengono utilizzate per i criteri che utilizzano le estensioni di servizio per le decisioni di autorizzazione.
Ordine di valutazione dei criteri di autorizzazione
Quando più criteri di autorizzazione sono associati a una singola risorsa, vengono valutati nel seguente ordine per determinare se una richiesta è consentita o negata.
Norme con azioni
CUSTOM
: se le normeCUSTOM
negano la richiesta, quest'ultima viene rifiutata immediatamente. Le normeDENY
oALLOW
non vengono valutate, anche se sono configurate.Norme con azioni
DENY
: se una qualsiasi normaDENY
corrisponde alla richiesta, la richiesta viene negata. Le eventuali normeALLOW
non vengono valutate, anche se sono configurate.Norme con azioni
ALLOW
: se non esistono normeALLOW
o se una normaALLOW
corrisponde alla richiesta, quest'ultima viene consentita. Tuttavia, se nessun criterioALLOW
corrisponde alla richiesta, quest'ultima viene negata.
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.
Quote di AuthzPolicy
- Puoi utilizzare un massimo di 5 criteri di autorizzazione per gateway.
- Hai un limite di 20 risorse AuthzPolicy per progetto.
- Un singolo AuthzPolicy può puntare a un massimo di 100 gateway.
Passaggi successivi
- Per scoprire di più sulle opzioni di configurazione, consulta Casi d'uso della sicurezza del servizio Cloud Service Mesh.
- Per saperne di più sui criteri di autorizzazione, consulta la panoramica dei criteri di autorizzazione .
- Per configurare la sicurezza del servizio con i proxy Envoy, vedi Configurare la sicurezza del servizio Cloud Service Mesh con Envoy.
- Per configurare la sicurezza del servizio con applicazioni gRPC proxyless, consulta Configurazione della sicurezza del servizio Cloud Service Mesh con applicazioni gRPC proxyless.