Questa pagina descrive le funzionalità di sicurezza incluse in GKE su AWS, inclusi tutti i livelli della relativa infrastruttura, e come configurare le funzionalità di sicurezza in base alle tue esigenze.
Panoramica
GKE su AWS offre diverse funzionalità per contribuire a proteggere i tuoi workload, tra cui i contenuti dell'immagine del container, il runtime del container, la rete del cluster e l'accesso al server API del cluster.
È preferibile adottare un approccio a più livelli per proteggere i cluster e i carichi di lavoro. Puoi applicare il principio del privilegio minimo al livello di accesso fornito agli utenti e ai carichi di lavoro. Potresti dover fare dei compromessi per consentire il giusto livello di flessibilità e sicurezza.
Responsabilità condivise
Quando utilizzi GKE su AWS, accetti di assumerti determinate responsabilità per i tuoi cluster. Per saperne di più, consulta Responsabilità condivise dei cluster GKE.
Autenticazione e autorizzazione
Esegui l'autenticazione in un cluster utente GKE on AWS tramite uno dei seguenti metodi:
- Utilizzando lo strumento
anthos-gke
. - Utilizzo di un token account di servizio Kubernetes con la Google Cloud console.
- Utilizzo di OpenID Connect (OIDC).
Per configurare un accesso più granulare alle risorse Kubernetes a livello di cluster o all'interno degli spazi dei nomi Kubernetes, utilizza il controllo controllo dell'accesso basato sui ruoli (RBAC) di Kubernetes. RBAC ti consente di creare criteri dettagliati per definire le operazioni e le risorse a cui consenti agli utenti e agli account di servizio di accedere. Con il RBAC, puoi controllare l'accesso per qualsiasi identità convalidata fornita.
Per semplificare e snellire ulteriormente la strategia di autenticazione e autorizzazione per Kubernetes Engine, GKE su AWS disattiva il controllo dell'accesso basato su attributi (ABAC) legacy.
Crittografia
Per impostazione predefinita, GKE su AWS cripta
i dati at-rest in etcd
, i volumi EBS, i secret Kubernetes e
i componenti del piano di controllo con il
Key Management Service (KMS) di AWS.
Per criptare i dati sensibili nei cluster utente, puoi utilizzare una delle seguenti opzioni:
- Kubernetes Secrets
- Hashicorp Vault
Kubernetes Secrets
Le risorse Secret di Kubernetes archiviano dati sensibili, come password, token OAuth e chiavi SSH, nei cluster. L'archiviazione di dati sensibili nei secret è più sicura rispetto alla loro archiviazione in testo normale nei ConfigMaps o nelle specifiche dei pod. L'utilizzo dei secret ti consente di controllare il modo in cui vengono utilizzati i dati sensibili e di ridurre il rischio di esporli a utenti non autorizzati.
Hashicorp Vault
GKE su AWS può utilizzare Hashicorp Vault per proteggere i secret nei cluster utente. Per ulteriori informazioni, consulta Utilizzare HashiCorp Vault su GKE su AWS.
Sicurezza del piano di controllo
I componenti del piano di controllo includono il servizio di gestione e il server API Kubernetes, lo scheduler, i controller e il database etcd del cluster dell'utente. In GKE su AWS, gli amministratori locali gestiscono i componenti del piano di controllo.
In GKE su AWS, i componenti del piano di controllo vengono eseguiti su AWS. Puoi difendere GKE sul server API di AWS utilizzando i gruppi di sicurezza AWS e le ACL di rete.
Tutte le comunicazioni in GKE su AWS avvengono tramite canali Transport Layer Security (TLS) regolati dalle seguenti autorità di certificazione (CA):
- La CA etcd protegge la comunicazione dal server API alle repliche etcd e anche il traffico tra le repliche etcd. Questa CA è autofirmata.
- La CA del cluster utente protegge la comunicazione tra il server API e tutti gli agenti client API Kubernetes interni (kubelet, controller, scheduler). Questa CA è criptata con KMS.
- La CA del servizio di gestione è criptata con AWS KMS. Viene creato quando esegui
anthos-gke init
e archiviato nella tua area di lavoro Terraform. Quando utilizziterraform apply
per creare il servizio di gestione, la chiave CA viene passata come dati utente AWS EC2 e decriptata da AWS KMS all'avvio del cluster.
Per il servizio di gestione, le chiavi del piano di controllo vengono memorizzate nel piano di controllo [nodes]{:.external}. Per i cluster utente, le chiavi vengono memorizzate come segreti Kubernetes nel piano di controllo del servizio di gestione.
L'autenticazione del cluster in GKE su AWS viene gestita da certificati e token di accesso dell'account di servizio. In qualità di amministratore, esegui l'autenticazione al control plane utilizzando il certificato amministrativo per il servizio di gestione (che utilizzi per la creazione iniziale dell'associazione dei ruoli o per scopi di emergenza).
La rotazione dei certificati viene gestita nei seguenti modi:
- Per il server API, i piani di controllo e i nodi, GKE su AWS ruota i certificati TLS a ogni upgrade.
- Puoi anche ruotare le credenziali di sicurezza manualmente.
Sicurezza dei nodi
GKE su AWS esegue il deployment dei carichi di lavoro nei pool di nodi delle istanze AWS EC2. Le sezioni seguenti spiegano come utilizzare le funzionalità di sicurezza a livello di nodo in GKE su AWS.
Ubuntu
GKE su AWS utilizza una versione ottimizzata di Ubuntu come sistema operativo su cui eseguire il piano di controllo e i nodi di Kubernetes. Ubuntu include un ricco insieme di funzionalità di sicurezza moderne e GKE su AWS implementa diverse funzionalità per migliorare la sicurezza dei cluster, tra cui:
- Set di pacchetti ottimizzati.
- Kernel Linux personalizzato perGoogle Cloud.
- Account utente con limitazioni e accesso come utente root disabilitato.
Sono disponibili ulteriori guide sulla sicurezza per Ubuntu, ad esempio:
Upgrade dei nodi
Dovresti eseguire l'upgrade dei nodi su base regolare. Di tanto in tanto, problemi di sicurezza nel runtime del container, in Kubernetes stesso o nel sistema operativo del nodo potrebbero richiedere l'upgrade dei nodi in modo più urgente. Quando esegui l'upgrade del cluster utente, viene eseguito l'upgrade del software di ciascun nodo alle versioni più recenti. Inoltre, l'upgrade dei nodi ruota le credenziali di crittografia.
Protezione dei carichi di lavoro
Kubernetes consente agli utenti di eseguire il provisioning, scalare e aggiornare rapidamente i carichi di lavoro basati su container. Questa sezione descrive le tattiche che puoi utilizzare per limitare gli effetti collaterali dell'esecuzione dei contenitori nel cluster e nei Google Cloud servizi.
Limitare i privilegi dei processi dei container dei pod
Limitare i privilegi dei processi in container è importante per la sicurezza del tuo cluster. Puoi impostare le opzioni relative alla sicurezza con il contesto di sicurezza dei pod e dei container. Queste impostazioni ti consentono di modificare le impostazioni di sicurezza delle tue procedure, ad esempio:
- Utente e gruppo che eseguono il processo.
- Funzionalità Linux disponibili.
- Escalation dei privilegi.
Il sistema operativo predefinito dei nodi GKE su AWS, Ubuntu, applica i criteri di sicurezza Docker AppArmor predefiniti a tutti i container avviati da Kubernetes. Puoi visualizzare il modello del profilo su GitHub. Tra le altre cose, il profilo nega ai contenitori le seguenti funzionalità:
- Scrittura di file direttamente in una directory dell'ID processo (
/proc/
). - Scrittura in file non in
/proc/
. - Scrittura in file in
/proc/sys
diversi da/proc/sys/kernel/shm*
. - Montaggio dei file system.
Passaggi successivi
- Installa un servizio di gestione.
- Utilizza HashiCorp Vault su GKE su AWS.
- Ruota le credenziali di sicurezza.