Casi d'uso relativi alla sicurezza del servizio
Questo documento descrive i casi d'uso comuni della sicurezza di Cloud Service Mesh. Usa questa informazioni per aiutarti a determinare il modello di sicurezza più adatto alle tue esigenze. Questo documento fornisce anche una panoramica di alto livello di ciò che devi configurare per ogni caso d'uso.
Per una panoramica della sicurezza dei servizi, vedi Sicurezza del servizio Cloud Service Mesh.
Abilitazione di TLS reciproco per i servizi nel mesh
In una rete mesh di servizi, puoi attivare TLS mutuale (mTLS) in modo che sia il client sia il server in una comunicazione debbano dimostrare le proprie identità e criptare le comunicazioni.
La seguente sezione omette la discussione di Mesh
, Gateway
e Route
Google Cloud. Queste risorse API sono necessarie per creare la tua rete mesh e route
ma non è necessario aggiornarle per abilitare mTLS.
Il pattern precedente può essere ottenuto configurando le seguenti risorse dell'API Compute Engine. Questo diagramma utilizza i proxy sidecar, la configurazione di un'applicazione gRPC senza proxy con mTLS utilizza le stesse risorse.
Per creare questo modello, segui questi passaggi:
- Crea un criterio TLS (Transport Layer Security) del client.
- Crea un criterio TLS del server.
- Aggiorna il campo
securitySettings
nei servizi di backend globali esistenti per fare riferimento al nuovo criterio TLS del client. Crea un criterio per gli endpoint:
- Fai riferimento al criterio TLS del server nel campo
server_tls_policy
. Definisci un
EndpointMatcher
per selezionare i client Cloud Service Mesh che deve applicare l'autenticazione al traffico in entrata.La selezione dei client Cloud Service Mesh si basa sulle etichette specificate in la configurazione bootstrap del client Cloud Service Mesh. Queste etichette possono essere fornite manualmente o compilate automaticamente in base alle etichette ai deployment di Google Kubernetes Engine (GKE).
Nel diagramma precedente, le etichette
"mesh-service":"true"
sono configurate nel criterio endpoint e nei client Cloud Service Mesh. Puoi scegliere le etichette più adatte al tuo deployment.Se vuoi, definisci un valore
TrafficPortSelector
che applichi solo i criteri Quando le richieste in entrata vengono effettuate alla porta specificata sul piano dati. dell'oggetto.
- Fai riferimento al criterio TLS del server nel campo
Il seguente diagramma mostra le risorse Compute Engine utilizzate configurare mTLS, a prescindere dal fatto che utilizzi Envoy o una rete gRPC senza proxy un'applicazione.
Il seguente diagramma mostra il flusso di traffico ed elenca le risorse dell'API Compute Engine che configuri per abilitare mTLS. Il proxy sidecar locale che si trova insieme al pod GKE del Servizio B è presente l'endpoint comunicazione.
Il criterio dell'endpoint esegue le seguenti operazioni:
Seleziona un insieme di endpoint utilizzando uno strumento di abbinamento degli endpoint e, facoltativamente, su questi endpoint.
Il corrispettivo dell'endpoint ti consente di specificare regole che determinano se un client Cloud Service Mesh riceve la configurazione. Queste regole si basano sui metadati xDS che l'entità del piano dati fornisce al piano di controllo, in questo caso Cloud Service Mesh.
Puoi aggiungere etichette al client Cloud Service Mesh nel seguente modo:
- Puoi specificare manualmente questi metadati nel file di bootstrap del client Cloud Service Mesh.
In alternativa, i metadati possono essere compilati automaticamente quando utilizzi GKE aggiungendo le coppie chiave-valore alla sezione
env
dei filedemo_server.yaml
odemo_client.yaml
. Questi valori sono forniti nella guida alla configurazione di Envoy e nella guida alla configurazione di gRPC proxyless.Ad esempio, solo con Envoy puoi anteporre alla chiave il prefisso
ISTIO_META_
. I nomi delle variabili di ambiente del proxy che inizia conISTIO_META_
sono inclusi nel bootstrap generato e inviati al server xDS.- name: ISTIO_META_app value: 'review' - name: ISTIO_META_version value: 'canary'
Se specifichi una porta, i criteri a cui si fa riferimento nel criterio dell'endpoint vengono applicati solo alle richieste in entrata che specificano la stessa porta. Se non specifichi una porta, i criteri vengono applicati alle richieste in entrata che specificano una porta presente anche nel campo
TRAFFICDIRECTOR_INBOUND_BACKEND_PORTS
, fornito al client Cloud Service Mesh nelle sue informazioni di bootstrap.
Fa riferimento ai criteri TLS del client, TLS del server e ai criteri di autorizzazione che configurano gli endpoint in cui vengono risolte le richieste.
La configurazione di modalità TLS incompatibili potrebbe causare un'interruzione delle comunicazioni. Ad esempio, l'impostazione di OPEN
sul servizio di backend globale
lasciando vuoto il campo del criterio TLS del client e impostando MTLS
come valore
il criterio TLS del server nel criterio dell'endpoint, causando un errore di comunicazione
tentativi. Questo perché gli endpoint configurati per accettare solo mTLS
rifiutare i tentativi di stabilire canali di comunicazione non autenticati.
Nota la distinzione tra un criterio TLS del client e un criterio TLS del server collegati rispettivamente a un servizio di backend globale e a un criterio endpoint:
- Il criterio TLS del client viene applicato al servizio di backend globale. Indica al proxy Envoy o al client senza proxy quale modalità TLS, identità e approccio di convalida dei peer utilizzare per indirizzare il servizio.
- Il criterio TLS del server è associato al criterio dell'endpoint. Indica al server quale modalità TLS, identità e approccio di convalida dei peer utilizzare per le connessioni in entrata.
Abilitazione di TLS per un gateway in entrata
Dopo aver configurato mTLS per le comunicazioni all'interno del mesh, ti consigliamo di proteggere il traffico in entrata nel mesh, noto come traffico in entrata. Cloud Service Mesh può configurare il piano dati in modo da richiedere il traffico in entrata verso utilizzano canali di comunicazione con crittografia TLS.
Per raggiungere questo obiettivo, scegli una delle seguenti opzioni di architettura:
- I servizi nel mesh terminano TLS per il traffico proveniente da un bilanciatore del carico. In questo modello, ogni servizio nel mesh è configurato come backend nella configurazione del bilanciatore del carico, in particolare nella mappa di URL del bilanciatore del carico.
- Un gateway di ingresso termina TLS per il traffico proveniente da un bilanciatore del carico prima di inoltrarlo ai servizi nel mesh. In questo modello, un servizio dedicato nel mesh, l'ingress gateway, è configurato come backend nella configurazione del bilanciatore del carico, in particolare nella mappa URL del bilanciatore del carico.
Entrambe le opzioni sono spiegate in questa sezione.
I servizi nel mesh terminano il protocollo TLS per il traffico proveniente da un bilanciatore del carico
Se vuoi rendere i tuoi servizi disponibili ai clienti al di fuori del Google Cloud, potresti utilizzare Application Load Balancer esterno I client inviano il traffico all'indirizzo IP virtuale anycast globale (VIP) del bilanciatore del carico, che lo inoltra ai servizi nel tuo mesh. Ciò significa che esistono due connessioni quando un client esterno deve raggiungere un servizio nel mesh.
Lo stesso pattern si applica quando utilizzi un bilanciatore del carico delle applicazioni interno. Il traffico proveniente dai client interni raggiunge prima il bilanciatore del carico, che poi stabilisce una connessione al backend.
Per proteggere entrambe le connessioni:
- Proteggi la connessione tra il client e il bilanciatore del carico utilizzando un bilanciatore del carico delle applicazioni esterno.
- Configura il bilanciatore del carico in modo che utilizzi i protocolli HTTPS o HTTP/2 quando prova a Stabilire una connessione con i servizi nella rete mesh.
- Configura Cloud Service Mesh in modo che i client Cloud Service Mesh vengano terminati HTTPS e presentare certificati al client, che in questo caso è la con il bilanciatore del carico di rete passthrough esterno regionale.
Per ulteriori informazioni sui passaggi 1 e 2, consulta Configurazione di un bilanciatore del carico HTTPS esterno a più regioni in base ai contenuti.
Quando configuri la sicurezza di Cloud Service Mesh, configuri varie risorse dell'API Compute Engine. Queste risorse sono separate dalle risorse configurate per il bilanciatore del carico. Creerai un insieme di risorse dell'API Compute Engine (regola di inoltro globale, proxy di destinazione, mappa URL e servizi di backend globali) per il bilanciatore del carico e configurerai Cloud Service Mesh con le API di routing dei servizi. Inoltre, nel backend
di servizio, il bilanciatore del carico ha lo schema di bilanciamento del carico
INTERNAL_MANAGED
e Cloud Service Mesh utilizza lo schema di bilanciamento del carico
INTERNAL_SELF_MANAGED
.
Nel passaggio 3, configuri Cloud Service Mesh in modo che i client Cloud Service Mesh interrompano HTTPS e presentino i certificati ai client.
In questo modello, esegui queste operazioni:
- Crea un
serverTlsPolicy
: configuraserverCertificate
su la risorsaserverTlsPolicy
. - Crea un criterio relativo agli endpoint:
- Fai riferimento al criterio TLS del server nel campo
authentication
. - Definisci un
EndpointMatcher
per selezionare il piano dati xDS entità che devono applicare l'autenticazione al traffico in entrata. - Se vuoi, definisci un
TrafficPortSelector
che applichi i criteri solo quando vengono effettuate richieste in entrata alla porta specificata sul client Cloud Service Mesh.
- Fai riferimento al criterio TLS del server nel campo
Poiché il bilanciatore del carico delle applicazioni esterno è già configurato per l'avvio per le connessioni TLS ai servizi nel tuo mesh, Cloud Service Mesh deve solo configurare i client Cloud Service Mesh per la terminazione delle connessioni TLS.
Il gateway di ingresso termina TLS per il traffico proveniente da un bilanciatore del carico prima di inoltrarlo ai servizi nel mesh
Se vuoi esporre solo un gateway in entrata al bilanciatore del carico, puoi utilizzare il pattern di deployment del gateway in entrata. In questo pattern, il bilanciatore del carico non indirizza direttamente i servizi nel tuo mesh. Un proxy centrale si trova invece sul perimetro della rete mesh e instrada il traffico ai servizi all'interno del mesh, in base sulla configurazione che riceve da Cloud Service Mesh. Il proxy centrale può essere un proxy Envoy di cui hai eseguito il deployment su istanze di macchine virtuali (VM) in un gruppo di istanze gestite di Compute Engine.
Dal punto di vista della sicurezza, configuri il gateway in entrata per terminare TLS, e poi, se vuoi, di configurare le connessioni all'interno della rete mesh in modo con mTLS. Sono incluse le connessioni tra il gateway di ingresso e i servizi in-mesh e le connessioni tra i servizi in-mesh.
Dal punto di vista della configurazione, segui questi passaggi:
- Configura il mesh di servizi e abilita mTLS per le comunicazioni all'interno la rete mesh (come spiegato in precedenza).
- Configurare il bilanciatore del carico per instradare il traffico al gateway in entrata avviare connessioni utilizzando il protocollo HTTPS (come spiegato in precedenza).
- Crea un insieme di risorse dell'API Compute Engine che rappresentano il traffico in entrata e il criterio TLS del server.
Per il terzo passaggio, configura Cloud Service Mesh per la terminazione di HTTPS presentare certificati come segue:
Crea una risorsa
Mesh
per rappresentare il mesh.Crea una risorsa
Route
che punti al backend globale corretto e collega la risorsaRoute
alla risorsaMesh
.Crea un criterio TLS del server: configura
serverCertificate
.Crea una risorsa
Gateway
per rappresentare la versione gestita di Cloud Service Mesh gateway in entrata.Collega la risorsa del criterio TLS del server alla risorsa
Gateway
.
Il pattern del gateway in ingresso è particolarmente utile nelle grandi organizzazioni che utilizzano
VPC condivise. In una situazione di questo tipo, un team può
e consentire l'accesso ai suoi servizi
tramite un gateway in entrata. Nel diagramma precedente, quando configuri la regola di inoltro globale per il bilanciatore del carico, fornisci un indirizzo IP diverso (in questo esempio 10.0.0.2
) rispetto a quello fornito durante la configurazione del mesh (in questo esempio l'indirizzo del mesh è 10.0.0.1
). I client che comunicano tramite un'entità del piano dati xDS configurata in Cloud Service Mesh possono utilizzare questo indirizzo per accedere al gateway di ingresso.
Ad esempio, supponiamo che:
- Due progetti di servizio (1 e 2), entrambi collegati alla stessa rete VPC condiviso.
Il progetto di servizio 1 contiene un mesh di servizi configurato da Cloud Service Mesh.
Il progetto di servizio 1 ha configurato un mesh e un gateway di ingresso. Questo gateway in entrata è raggiungibile dall'indirizzo
10.0.0.2
/VIP.Il progetto di servizio 2 contiene un mesh di servizi configurato da Cloud Service Mesh.
Il progetto di servizio 2 potrebbe o meno avere un proprio gateway di ingresso.
Cloud Service Mesh configura i client Cloud Service Mesh in ogni progetto di servizio. I client vengono avviati per utilizzare la stessa rete.
Data questa configurazione, i client nel mesh del progetto di servizio 2 possono comunicare
con il gateway in entrata nel progetto di servizio 1 utilizzando il VIP 10.0.0.2
. In questo modo, i proprietari del progetto di servizio 1 possono configurare il routing, la sicurezza e altri criteri specifici per il traffico che entra nel mesh. In pratica, i proprietari del progetto di servizio 1 possono dire ad altri che i client della tua mesh possono raggiungere i miei servizi su 10.0.0.2
.
Limitazioni
La sicurezza del servizio Cloud Service Mesh è supportata solo con con GKE. Non puoi eseguire il deployment della sicurezza dei servizi con Compute Engine.
Passaggi successivi
- Per configurare la sicurezza del servizio Cloud Service Mesh con i proxy Envoy, consulta Configurazione della sicurezza del servizio Cloud Service Mesh con Envoy.
- Per configurare la sicurezza del servizio Cloud Service Mesh con applicazioni gRPC senza proxy, consulta Configurazione della sicurezza del servizio Cloud Service Mesh con gRPC senza proxy.