Questa pagina descrive in che modo GKE Sandbox protegge il kernel dell'host quando i container nel pod eseguono codice sconosciuto o non attendibile. Per un esempio, cluster multi-tenant come i provider SaaS (Software-as-a-Service) spesso eseguono codice sconosciuto inviate dai loro utenti. GKE Sandbox è anche un'utile difesa in profondità misura l'esecuzione di container di alto valore.
GKE Sandbox utilizza gVisor, un progetto open source. Questo argomento parla ampiamente di gVisor, ma puoi trovare maggiori dettagli leggendo l' documentazione ufficiale di gVisor.
Per istruzioni su come abilitare e utilizzare GKE Sandbox, consulta Configura GKE Sandbox.
Panoramica
GKE Sandbox fornisce un ulteriore livello di sicurezza per prevenire codice non attendibile influisca sul kernel dell'host sui nodi del cluster. Prima di discutere di come GKE Sandbox funziona, è utile comprendere la natura del potenziale e i rischi che aiuta a mitigare.
Un runtime container come containerd
fornisce un certo grado di
e l'isolamento tra i processi del container e il kernel in esecuzione sul nodo.
Tuttavia, il runtime del container spesso viene eseguito come utente con privilegi sul nodo
ha accesso alla maggior parte delle chiamate di sistema nel kernel dell'host.
Minacce potenziali
I cluster multi-tenant e i cluster i cui container eseguono carichi di lavoro non attendibili più esposti alle vulnerabilità di sicurezza rispetto ad altri cluster. Ecco alcuni esempi: Provider SaaS, provider di web hosting o altre organizzazioni che consentano agli utenti di caricare ed eseguire il codice. Un difetto nel runtime del container o nell'host kernel potrebbe consentire a un processo in esecuzione all'interno di un container di "escape" il del container e influire sul kernel del nodo, portandolo potenzialmente in stato di inattività.
Esiste anche la possibilità che un tenant dannoso possa accedere a e esfiltrare i dati di un altro tenant in memoria o su disco, sfruttando tale difettoso.
Infine, un carico di lavoro non attendibile potrebbe potenzialmente accedere ad altri carichi di lavoro Google Cloud o i metadati del cluster.
In che modo GKE Sandbox attenua queste minacce
gVisor è una reimplementazione dello spazio utente dell'API del kernel Linux che non
richiedono privilegi elevati. In combinazione con un runtime container come
containerd
, il kernel dello spazio utente reimplementa la maggior parte delle chiamate di sistema
e li gestisce per conto del kernel dell'host. Accesso diretto al kernel dell'host
è limitato. Consulta le
Guida all'architettura di gVisor
per informazioni dettagliate su come funziona. Dal punto del container
vista, gVisor è quasi trasparente e non richiede alcuna modifica
in un'applicazione containerizzata.
Quando richiedi GKE Sandbox in un pod in cluster Autopilot, GKE esegue il pod in una sandbox. In GKE Standard, se abiliti GKE Sandbox sui nodi, su tutti i pod in esecuzione i nodi vengono eseguiti in sandbox.
Ogni sandbox utilizza il proprio kernel dello spazio utente. Tenendo conto di questo, puoi rendere su come raggruppare i container nei pod, in base al livello l'isolamento richiesto e le caratteristiche delle applicazioni.
GKE Sandbox è particolarmente adatto ai seguenti tipi di diverse applicazioni. Leggi la sezione Limitazioni per avere maggiori informazioni decidere quali applicazioni limitare tramite sandbox.
- Applicazioni non attendibili o di terze parti che utilizzano runtime come Rust, Java, Python, PHP, Node.js o Golang
- Front-end, cache o proxy di server web
- Applicazioni che elaborano dati o supporti esterni utilizzando le CPU
- Carichi di lavoro di machine learning mediante CPU
- Applicazioni che utilizzano molta CPU o memoria
- Carichi di lavoro ad alta intensità di GPU
Suggerimenti aggiuntivi per la sicurezza
Quando utilizzi GKE Sandbox, ti consigliamo di seguire anche queste raccomandazioni:
Specifica limiti delle risorse in tutti i container in esecuzione in una sandbox. Questo meccanismo protegge dal rischio di un'applicazione difettosa o dannosa che esaurisce il nodo di risorse dando un impatto negativo su altre applicazioni o altri processi di sistema in esecuzione sul nodo.
Se utilizzi Federazione delle identità per i carichi di lavoro per GKE, per bloccare l'accesso ai metadati del cluster Criterio di rete per bloccare accesso a
169.254.169.254
. Questo meccanismo protegge dal rischio di attacchi un'applicazione che accede alle informazioni a dati potenzialmente privati come ID progetto, il nome del nodo e la zona. La federazione delle identità per i carichi di lavoro per GKE è sempre abilitata in GKE Autopilot.
Limitazioni
GKE Sandbox funziona bene con molte applicazioni, ma non con tutte. Questa sezione fornisce ulteriori informazioni sugli attuali limiti di GKE Sandbox.
GPU in GKE Sandbox
In GKE versione 1.29.2-gke.1108000 e successive, GKE Sandbox supporta l'uso delle GPU NVIDIA.
GKE Sandbox non mitiga tutte le vulnerabilità dei driver NVIDIA, ma conserva la protezione dalle vulnerabilità del kernel Linux. Per maggiori dettagli su in che modo il progetto gVisor protegge i carichi di lavoro GPU, vedi Guida di assistenza per le GPU
Le seguenti limitazioni si applicano ai carichi di lavoro GPU all'interno di GKE Sandbox:
- Solo la versione del driver NVIDIA
latest
su una determinata versione di GKE è supportato. I cluster Autopilot installano automaticamente il driver NVIDIA che supportano GKE Sandbox. - Sono supportati solo i carichi di lavoro CUDA.
- Sono supportati i seguenti modelli di GPU: nvidia-tesla-t4, nvidia-tesla-a100, nvidia-a100-80gb, nvidia-l4 e nvidia-h100-80gb.
Puoi utilizzare GKE Sandbox con carichi di lavoro GPU senza costi aggiuntivi.
Configurazione del pool di nodi
Si applica ai cluster standard
- Non puoi utilizzare GKE Sandbox sui pool di nodi di Windows Server.
- Non puoi abilitare GKE Sandbox sul pool di nodi predefinito per separare il sistema di servizi in esecuzione nel pool di nodi predefinito da carichi di lavoro non attendibili utilizzando GKE Sandbox.
- Quando utilizzi GKE Sandbox, il cluster deve avere almeno due pool di nodi. Devi sempre avere almeno un pool di nodi in cui GKE Sandbox è disabilitato. Questo pool di nodi deve contenere almeno un nodo, anche se tutti i carichi di lavoro sono sandbox.
- Le versioni GKE precedenti alla 1.24.2-gke.300 non supportano Tipi di macchine e2-micro, e2-small ed e2-medium. Versione GKE La versione 1.24.2-gke.300 e successive supporta questi tipi di macchina.
- I nodi devono utilizzare l'immagine del nodo Container-Optimized OS con containerd (
cos_containerd
).
Accesso ai metadati del cluster
Si applica ai cluster Autopilot e Standard
- I nodi che eseguono pod con sandbox non possono accedere ai metadati del cluster il livello del sistema operativo sul nodo.
- In GKE Standard, puoi eseguire pod normali su un nodo con GKE Sandbox abilitata. Tuttavia, per impostazione predefinita, i pod normali non possono accedere ai servizi Google Cloud o ai metadati del cluster.
- Utilizza la Federazione delle identità dei carichi di lavoro per GKE per per concedere ai pod l'accesso ai servizi Google Cloud.
SMT potrebbe essere disattivato
Si applica ai cluster Autopilot e Standard
Le impostazioni di multi-threading simultaneo (SMT) vengono utilizzate per limitare il numero di le vulnerabilità che sfruttano i thread che condividono lo stato principale, come Vulnerabilità del Microarchitectural Data Sampling (MDS).
In GKE versioni 1.25.5-gke.2500 o successive e 1.26.0-gke.2500 o in seguito, gVisor è configurato per utilizzare Linux Core Scheduling per mitigare gli attacchi al canale laterale. Le impostazioni SMT non sono state modificate rispetto a quelle predefinite. Nucleo La pianificazione viene utilizzata solo per i carichi di lavoro in esecuzione con gVisor.
A partire da GKE versione 1.24.2-gke.300, SMT è configurato di tipo di macchina in base alla vulnerabilità della macchina nei confronti di MDS, come segue:
Autopilot in esecuzione Classe di computing
Scale-Out
: SMT disattivato.Tipi di macchina con processori Intel: SMT disattivato per impostazione predefinita.
Tipi di macchina senza processori Intel: SMT abilitato per impostazione predefinita.
Tipi di macchina con un solo thread per core: nessun supporto SMT. Tutte richieste vCPU visibili.
Prima della versione 1.24.2-gke.300, SMT è disabilitato su tutti i tipi di macchina.
Abilita SMT
Si applica ai cluster standard
Nei cluster GKE Standard, puoi abilitare SMT se disabilitato sul tipo di macchina selezionato. Ti vengono addebitate ogni vCPU, indipendentemente dal fatto che SMT sia attivato o meno. Per i prezzi informazioni, fai riferimento Prezzi di Compute Engine.
GKE 1.24.2-gke.300 e versioni successive
Imposta il flag --threads-per-core
quando
creando un pool di nodi GKE Sandbox:
gcloud container node-pools create smt-enabled \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--threads-per-core=2 \
--sandbox type=gvisor
CLUSTER_NAME
: il nome del cluster esistente.MACHINE_TYPE
: il tipo di macchina.
Per ulteriori informazioni su --threads-per-core
, consulta
Imposta il numero di thread per core.
Versioni di GKE precedenti alla 1.24.2-gke.300
Crea un nuovo pool di nodi nel cluster con l'etichetta nodo
cloud.google.com/gke-smt-disabled=false
:gcloud container node-pools create smt-enabled \ --cluster=CLUSTER_NAME \ --machine-type=MACHINE_TYPE \ --node-labels=cloud.google.com/gke-smt-disabled=false \ --image-type=cos_containerd \ --sandbox type=gvisor
Esegui il deployment del DaemonSet nel pool di nodi. Il DaemonSet viene eseguito solo su nodi con l'etichetta
cloud.google.com/gke-smt-disabled=false
.kubectl create -f \ https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/disable-smt/gke/enable-smt.yaml
Assicurati che i pod del DaemonSet siano in esecuzione.
kubectl get pods --selector=name=enable-smt -n kube-system
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE enable-smt-2xnnc 1/1 Running 0 6m
Verifica che
SMT has been enabled
sia presente nei log dei pod.kubectl logs enable-smt-2xnnc enable-smt -n kube-system
Funzionalità
Si applica ai cluster standard
Per impostazione predefinita, al container non è consentito aprire socket non elaborati, per ridurre
il potenziale di attacchi dannosi. Alcuni strumenti relativi alla rete, come ping
e tcpdump
creano socket non elaborati come parte della loro funzionalità di base. Per attivare
socket non elaborati, devi aggiungere esplicitamente la funzionalità NET_RAW
contesto di sicurezza del container:
spec:
containers:
- name: my-container
securityContext:
capabilities:
add: ["NET_RAW"]
Se usi GKE Autopilot, Google Cloud ti impedisce
aggiungendo l'autorizzazione NET_RAW
ai container per motivi di sicurezza
implicazioni di questa funzionalità.
Dipendenze esterne
Si applica ai cluster Autopilot e Standard
Il codice non attendibile in esecuzione all'interno della sandbox potrebbe essere autorizzato a raggiungere indirizzi esterni come server di database, API, altri container e CSI driver. Questi servizi sono in esecuzione al di fuori dei confini della sandbox e devono essere protetti singolarmente. Un utente malintenzionato può tentare di sfruttare le vulnerabilità in questi per uscire dalla sandbox. Devi considerare il rischio e l’impatto essere raggiungibili dal codice in esecuzione all'interno della sandbox e si applicano le misure necessarie per proteggerli.
Ciò include implementazioni di file system per volumi di container come ext4 e Driver CSI. I driver CSI vengono eseguiti al di fuori dell'isolamento sandbox e potrebbero l'accesso privilegiato all'host e ai servizi. Un exploit in questi fattori può influenzano il kernel dell'host e compromettono l'intero nodo. Ti consigliamo di eseguire il driver CSI all'interno di un container con la quantità minima di autorizzazioni richiesta, per ridurre l'esposizione in caso di exploit. GKE Sandbox supporta l'utilizzo Driver CSI per il disco permanente di Compute Engine.
Funzionalità incompatibili
Non puoi utilizzare GKE Sandbox con le seguenti funzionalità di Kubernetes:
- Metriche di utilizzo della memoria a livello di container. Tuttavia, la memoria utilizzata dai pod supportati.
- Archiviazione del percorso host
- I limiti di CPU e memoria si applicano solo ai pod garantiti e ai pod bursabili. e solo quando vengono specificati limiti di CPU e memoria per tutti i container in esecuzione nel pod.
- Container in esecuzione in modalità con privilegi
- VolumeDevices
- Port-forward
- moduli di sicurezza kernel Linux come Seccomp, Apparmor o Selinux,
Sysctl,
NoNewPrivileges
, bidirezionale MountPropagation, o ProcMount. - Traffic Director
ASM con Istio CNI
FSGroup è supportato in GKE 1.22 e versioni successive.
Cloud Service Mesh non è supportato per GKE Sandbox nei cluster Autopilot.
Caratteristiche del carico di lavoro
Si applica ai cluster Autopilot e Standard
Imposizione di un livello aggiuntivo di indiretta per l'accesso al kernel del nodo comporta dei compromessi in termini di prestazioni. GKE Sandbox offre la soluzione e offre vantaggi specifici sui cluster multi-tenant di grandi dimensioni in cui l'isolamento è importante. Mantieni il valore le linee guida seguenti quando testi i tuoi carichi di lavoro con GKE Sandbox.
Chiamate di sistema
Si applica ai cluster Autopilot e Standard
Carichi di lavoro che generano un volume elevato di chiamate di sistema a basso overhead, come di operazioni di I/O di piccole dimensioni, potrebbero richiedere più risorse di sistema in esecuzione in una sandbox, quindi potresti dover utilizzare nodi più potenti o aggiungere nodi aggiuntivi al cluster.
Accesso diretto all'hardware o alla virtualizzazione
Si applica ai cluster Autopilot e Standard
Se il tuo carico di lavoro ha bisogno di uno dei seguenti requisiti, GKE Sandbox potrebbe non essere è adatta perché impedisce l'accesso diretto al kernel dell'host sul nodo:
- Accesso diretto all'hardware del nodo
- Funzionalità di virtualizzazione a livello di kernel
- Container con privilegi
Passaggi successivi
- Configura GKE Sandbox.
- Leggi la panoramica sulla sicurezza.
- Scopri di più sul ciclo di vita dei pod.