Questo documento illustra le misure di sicurezza integrate in Connect.
Una piattaforma ibrida e multi-cloud efficace offre gestione centralizzata, osservabilità e accesso ai servizi in tutti gli ambienti. GKE Enterprise offre un'esperienza uniforme e completa per queste funzionalità, indipendentemente dal provider Kubernetes che utilizzi. Connect è un agente leggero che fornisce quanto segue in modo scalabile e tra i vari fornitori:
- Gestione multi-cluster e visibilità dei cluster
- Deployment e gestione del ciclo di vita dei servizi applicativi
Questo documento tratta i seguenti argomenti:
- In che modo la progettazione di Connect mette la sicurezza al primo posto
- Best practice per l'implementazione di Connect Agent
- Come migliorare la security posture del deployment Kubernetes
Architettura di Connect
Connect consente agli utenti finali e ai servizi di accedere ai server API Kubernetes che non si trovano su internet pubblico. Google CloudL'agente Connect viene eseguito nel cluster Kubernetes (un agente per cluster) e si connette a un proxy Connect. Google Cloud I servizi che devono interagire con il cluster Kubernetes si connettono al proxy, che inoltra le richieste all'agente. L'agente, a sua volta, le inoltra al server API Kubernetes, come illustrato nel seguente diagramma.
Quando l'agente viene implementato, stabilisce una connessione TLS 1.2+ permanente ai serviziGoogle Cloud per attendere le richieste. Google Cloud , quando abilitati dagli amministratori, possono generare richieste per i tuoi cluster Kubernetes. Queste richieste potrebbero provenire anche dall'interazione diretta degli utenti con la console Google Cloud , Connect Gateway o altri servizi Google.
Il Google Cloud servizio invia la richiesta al proxy. Il proxy inoltra quindi la richiesta all'agente di cui è stato eseguito il deployment responsabile di un cluster e infine l'agente inoltra la richiesta al server API Kubernetes. Il server API Kubernetes applica le policy di autenticazione, autorizzazione e audit logging di Kubernetes e restituisce una risposta. La risposta viene restituita tramite l'agente e il proxy al servizio Google Cloud . In ogni passaggio della procedura, i componenti eseguono l'autenticazione e l'autorizzazione per connessione e per richiesta.
Il server API Kubernetes applica gli stessi criteri di autenticazione, autorizzazione e registrazione degli audit a tutte le richieste, incluse quelle tramite Connect. Questa procedura garantisce che tu abbia sempre il controllo dell'accesso al tuo cluster.
Connessione e difesa in profondità
La difesa in profondità è intrinseca a tutto ciò che Google Cloud fa all'interno della sua infrastruttura e delle sue pratiche di sicurezza. Adottiamo un approccio a più livelli per ogni aspetto della sicurezza della nostra organizzazione e dei nostri clienti al fine di proteggere dati, informazioni e utenti di valore. Questo è lo stesso principio in base al quale abbiamo progettato Connect.
Oltre alla strategia e alla progettazione di difesa in profondità di Google, devi valutare i contenuti forniti qui insieme alla tua postura e ai tuoi standard di sicurezza. Questa sezione descrive misure aggiuntive che puoi adottare e che integrano le best practice di hardening di Kubernetes.
Sicurezza da componente a componente
Ogni componente di una richiesta di connessione autentica i suoi peer e condivide i dati solo con i peer autenticati e autorizzati per questi dati, come illustrato nel seguente diagramma.
Ogni componente di una richiesta di connessione utilizza i seguenti elementi per autenticarsi a vicenda:
- Transport Layer Security (TLS)
- Application Layer Transport Security (ALTS)
- OAuth
Ogni componente di una richiesta di connessione utilizza i seguenti elementi per autorizzarsi a vicenda:
- Identity and Access Management (IAM)
- Liste consentite
Ogni connessione tra il cluster Kubernetes e Google Cloud è crittografata e almeno un peer di ogni connessione utilizza l'autenticazione basata su certificati. Questa procedura contribuisce a garantire che tutte le credenziali del token vengano criptate durante il transito e ricevute solo da peer autenticati e autorizzati.
Autenticazione utente per Google Cloud
Quando utilizzano la console Google Cloud , gli utenti seguono il flusso di accesso standard di Google. Google Cloud fornisce un certificato TLS che il browser dell'utente autentica e l'utente accede a un account Google Cloud o Google Workspace per autenticarsi su Google Cloud.
L'accesso a un progetto tramite la console Google Cloud o altre API è controllato dalle autorizzazioni IAM.
Google Cloud Autenticazione service-to-service
Google Cloud utilizza ALTS per l'autenticazione interna tra servizi. ALTS consente ai servizi, come il proxy, di creare una connessione autenticata e protetta dall'integrità. Google Cloud
I serviziGoogle Cloud devono essere autorizzati internamente a utilizzare il proxy per connettersi a un'istanza di Connect remota perché il proxy utilizza un elenco consentito di identità di servizio per limitare l'accesso.
Autenticazione in corso… Google Cloud
L'agente utilizza TLS per autenticare e criptare ogni connessione. L'agente autentica Google Cloud i certificati TLS utilizzando un insieme di certificati root integrati nel file binario, per evitare di considerare attendibili inavvertitamente i certificati aggiunti al container dell'agente. L'agente esegue chiamate API solo su endpoint autenticati correttamente. Questa procedura contribuisce a garantire che i certificati dell'account di servizio e le richieste API Kubernetes vengano inviati daGoogle Cloude che le risposte vengano inviate solo a Google Cloud.
Per l'elenco dei domini con cui l'agente comunica durante il normale funzionamento, consulta Garantire la connettività di rete.
Puoi configurare l'agente per
connettersi a Google Cloud
tramite un proxy HTTP. In questa configurazione, l'agente utilizza HTTP/1.1
CONNECT
rispetto al proxy HTTP e stabilisce una connessione TLS a
Google Cloud. Il proxy HTTP vede solo il traffico criptato tra l'agente e Google Cloud. L'integrità e la sicurezza end-to-end della connessione
tra l'agente e Google Cloud non sono interessate.
Autenticazione dell'agente
L'agente esegue l'autenticazione in Google Cloud utilizzando la federazione delle identità per i carichi di lavoro del parco risorse. La federazione delle identità per i carichi di lavoro del parco risorse consente di eseguire l'autenticazione dai workload del parco risorse alle API Google Cloud utilizzando meccanismi di autenticazione Google Cloud e Kubernetes integrati. Quando l'agente vuole autenticarsi su Google Cloud, scambia il token del service account Kubernetes con un token di accesso che rappresenta la sua identità del carico di lavoro.
Server API Kubernetes
L'agente utilizza la libreria client Kubernetes per creare una connessione TLS al server API Kubernetes. Il runtime Kubernetes fornisce al container dell'agente un certificato dell'autorità di certificazione (CA) TLS che l'agente utilizza per autenticare il server API.
Il server API autentica ogni richiesta separatamente, come descritto nella sezione successiva.
Richiedi sicurezza
Ogni richiesta inviata da Google Cloud tramite Connect include credenziali che identificano il mittente della richiesta: sia il servizioGoogle Cloud che ha generato la richiesta sia (se applicabile) l'utente finale per il quale viene inviata la richiesta. Queste credenziali consentono al server API Kubernetes di fornire controlli di autorizzazione e audit per ogni richiesta.
Autenticazione da servizio ad agente
Ogni richiesta inviata all'agente include un token di breve durata che identifica il servizioGoogle Cloud che ha inviato la richiesta, come illustrato nel seguente diagramma.
Il token è firmato da un service account Google Cloud associato esclusivamente al servizio Google Cloud . L'agente recupera le chiavi pubbliche del service account per convalidare il token. Questo token non viene inoltrato al server API.
L'agente convalida i certificati Google Cloud utilizzando le CA radice incorporate nel file binario. Questa procedura contribuisce a garantire che riceva richieste autentiche e non alterate da Google Cloud.
Autenticazione degli utenti finali
I servizi che accedono ai cluster per conto di un utente richiedono le credenziali dell'utente per l'autenticazione al server API, come illustrato nel seguente diagramma.Google Cloud
Questo criterio contribuisce a garantire che all'utente venga applicato lo stesso insieme di autorizzazioni quando accede tramite Connetti. Alcuni serviziGoogle Cloud eseguono l'autenticazione al server API per conto di un utente. Ad esempio, un utente può accedere alla console Google Cloud per visualizzare i workload nei cluster registrati in Fleet. Quando un utente accede a questi servizi, fornisce credenziali riconosciute dal server API Kubernetes: uno qualsiasi dei token supportati dal server API Kubernetes.
La Google Cloud console memorizza queste credenziali come parte del profilo di un utente. Queste credenziali vengono criptate a riposo, sono accessibili solo con le credenzialiGoogle Cloud o Google Workspace dell'utente e vengono utilizzate solo per le connessioni tramite Connect. Queste credenziali non possono essere scaricate di nuovo. Le credenziali vengono eliminate quando l'utente si disconnette dal cluster, quando la registrazione del cluster viene eliminata in Google Cloud, quando il progetto viene eliminato o quando l'account utente viene eliminato. Per ulteriori informazioni, consulta Eliminazione dei dati su Google Cloud.
Quando un utente interagisce con la console Google Cloud , vengono generate richieste per il server API Kubernetes. Il servizio invia le credenziali dell'utente insieme alla richiesta tramite Connect. L'agente presenta quindi la richiesta e le credenziali al server API Kubernetes.
Il server API Kubernetes autentica le credenziali dell'utente, esegue l'autorizzazione sull'identità dell'utente, produce un evento di controllo per l'azione (se configurato) e restituisce il risultato. Poiché le credenziali fornite dall'utente vengono utilizzate per autenticare la richiesta, il server API Kubernetes applica gli stessi criteri di autorizzazione e controllo per le richieste Connect come per le altre richieste.
Autenticazione da servizio a Kubernetes
I serviziGoogle Cloud che accedono al server API Kubernetes al di fuori del contesto di un utente utilizzano l'impersonificazione di Kubernetes per autenticarsi al server API Kubernetes. Questo metodo consente al server API Kubernetes di fornire controlli di autorizzazione e logging di controllo per servizio, come illustrato nel seguente diagramma.
I servizi all'indirizzo Google Cloud possono utilizzare Connect al di fuori del contesto di un utente. Ad esempio, un servizio Ingress multicluster può sincronizzare automaticamente le risorse Ingress tra i cluster. Questi servizi non dispongono di credenziali che il server API Kubernetes può autenticare: la maggior parte dei server API non è configurata per autenticare le credenziali del servizio Google Cloud . Tuttavia, un server API può delegare privilegi di autenticazione limitati a un altro servizio tramite la rappresentazione e l'agente può autenticare i servizi Google Cloud che inviano richieste tramite Connect. Insieme, consentono alle richieste tramite l'agente di autenticarsi come service account Google Cloud .
Quando un servizio Google Cloud invia una richiesta per proprio conto (anziché nel contesto di un utente), l'agente aggiunge alla richiesta le proprie credenziali Kubernetes e le proprie intestazioni di rappresentazione Kubernetes che identificano il servizio Google Cloud . Le intestazioni di rappresentazione rivendicano un nome utente del service account autenticato dall'agente. Google Cloud
Il server API Kubernetes autentica le credenziali dell'agente e verifica anche che l'agente possa rappresentare il service account Google Cloud . La possibilità di rappresentare un'identità è in genere controllata dalle regolecontrollo dell'accessoi basato sui ruoli (RBAC) e può essere limitata a identità specifiche, come i service account. Google Cloud
Se l'agente è autorizzato a rappresentare l'identità richiesta, il server API esegue i controlli di autorizzazione per il service account Google Cloud e gestisce la richiesta. Il log di controllo della richiesta include sia l'identità dell'agente sia il service account rappresentato Google Cloud .
Sicurezza in-cluster
L'agente invia infine le richieste API Kubernetes al server API Kubernetes, come illustrato nel seguente diagramma.
Il server API Kubernetes autentica, autorizza e registra queste richieste, proprio come fa per tutte le altre richieste che gestisce.
In qualità di proxy per queste richieste, l'agente ha accesso a dati sensibili, come credenziali, richieste e risposte. Kubernetes e il suo ecosistema forniscono un insieme di strumenti per impedire ad altri attori di ottenere l'accesso e per contribuire a garantire che l'agente acceda solo a ciò che deve.
Autenticazione Kubernetes
Il server API Kubernetes autentica il mittente di ogni richiesta in entrata per determinare quali autorizzazioni applicare nella fase di autorizzazione. Come descritto in precedenza, la richiesta include le credenziali di un utente oppure le credenziali Kubernetes dell'agente e le intestazioni di rappresentazione.
Gli amministratori del cluster mantengono il controllo dei meccanismi di autenticazione riconosciuti dal server API Kubernetes. Gli amministratori potrebbero essere in grado di revocare le credenziali di un utente e possono revocare o ridurre il privilegio delle credenziali dell'agente.
Autorizzazione Kubernetes
Il server dell'API Kubernetes verifica che l'identità autenticata sia autorizzata a eseguire l'azione richiesta sulla risorsa richiesta.
L'amministratore del cluster può utilizzare uno qualsiasi dei meccanismi di autorizzazione Kubernetes per configurare le regole di autorizzazione. Connect non esegue alcun controllo di autorizzazione per conto del cluster.
Sicurezza degli agenti
L'agente ha accesso alle proprie credenziali (Kubernetes e Google Cloud), nonché alle credenziali, alle richieste e alle risposte che lo attraversano. Pertanto, l'agente occupa una posizione attendibile in un cluster connesso.
L'agente è progettato con i seguenti principi fondamentali di sicurezza:
- L'agente è scritto in Go, che fornisce la gestione della memoria con garbage collection e impedisce molte operazioni di memoria non sicure.
- L'agente viene implementato in un'immagine container distroless. L'immagine dell'agente non include una shell, libc o altro codice estraneo al percorso di esecuzione dell'agente.
- L'immagine dell'agente viene creata dall'infrastruttura di build condivisa di Google dal codice archiviato. Solo questo sistema di compilazione può eseguire il deployment delle immagini degli agenti in Container Registry. Gli sviluppatori diGoogle Cloud non possono eseguire il deployment di nuove immagini autonomamente. Questa procedura contribuisce a garantire che tutte le modifiche alla fonte dell'agente possano essere ricondotte a un autore e a un revisore per il non ripudio.
L'agente viene eseguito come un deployment standard in un cluster Kubernetes che viene eseguito il deployment al momento della registrazione del cluster.
Di conseguenza, tutte le opzioni e le best practice disponibili per il monitoraggio e la protezione di deployment, ReplicaSets
e pod sono disponibili per l'agente.
Questi meccanismi sono progettati per rendere difficile la compromissione del container dell'agente. Tuttavia, l'accesso privilegiato al nodo dell'agente può comunque compromettere l'ambiente dell'agente; pertanto, è importante che gli amministratori seguano le linee guida standard per la sicurezza di Kubernetes per proteggere l'infrastruttura del cluster.
Sicurezza dei dati con i Controlli di servizio VPC
I Controlli di servizio VPC forniscono un ulteriore livello di difesa della sicurezza per i serviziGoogle Cloud indipendente da Identity and Access Management (IAM). Mentre IAM consente un controllo degli accessi basato sull'identità granulare, Controlli di servizio VPC consente una sicurezza perimetrale basata sul contesto più ampia, incluso il controllo dell'uscita dei dati attraverso il perimetro. Ad esempio, puoi specificare che solo determinati progetti possono accedere ai tuoi dati BigQuery. Per scoprire di più su come funzionano i Controlli di servizio VPC per proteggere i tuoi dati, consulta la panoramica dei Controlli di servizio VPC.
Puoi utilizzare Controlli di servizio VPC con Connect per una maggiore sicurezza dei dati, dopo aver verificato che i servizi necessari per utilizzare Connect siano accessibili dall'interno del perimetro di servizio specificato.
Se vuoi utilizzare Controlli di servizio VPC, devi abilitare le seguenti API:
cloudresourcemanager.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
Devi anche configurare la connettività privata per l'accesso alle API pertinenti. Per scoprire come fare, consulta la sezione Configurare la connettività privata.