- Configura GKE per eseguire solo carichi di lavoro privilegiati specifici in modalità Autopilot.
- Installa le liste consentite per i workload con privilegi.
Questo documento è destinato ai seguenti tipi di ruoli:
- Gli ingegneri della sicurezza che vogliono assicurarsi che i workload di terze parti richiedano una consente di eseguire i cluster e provengano da fonti approvate da GKE.
- Gli ingegneri della piattaforma che vogliono abilitare i workload di terze parti sui cluster per sbloccare i team delle applicazioni.
Dovresti già avere familiarità con i seguenti concetti:
- Informazioni sull'ammissione di workload con privilegi in modalità Autopilot
- Risorse personalizzate di Kubernetes
- Vincoli di sicurezza di GKE Autopilot
- Partner GKE Autopilot
Informazioni sui workload privilegiati in Autopilot
La modalità Autopilot applica un insieme predefinito di vincoli ai carichi di lavoro per migliorare la tua postura di sicurezza. Puoi modificare questi vincoli per eseguire carichi di lavoro con privilegi specifici installando liste consentite che corrispondono a questi carichi di lavoro. Per impostazione predefinita, Autopilot consente di installare le liste consentite di partner Autopilot e progetti open source specifici. I clienti GKE idonei possono anche creare liste consentite per i workload privilegiati di proprietà dei clienti che caricano nei bucket Cloud Storage.
Ogni lista consentita è un file che corrisponde a un carico di lavoro privilegiato specifico. Per eseguire un workload con privilegi, procedi nel seguente modo:
- Configura il cluster per consentire l'installazione di liste consentite da percorsi specifici. Per impostazione predefinita, sono supportate tutte le liste consentite dei partner Autopilot e dei progetti open source approvati.
- Crea un AllowlistSynchronizer nel cluster che installa la lista consentita e la mantiene aggiornata.
Bug e richieste di funzionalità per workload con privilegi e liste consentite
Il proprietario di un workload privilegiato è responsabile della creazione, dello sviluppo e della manutenzione dei propri workload e delle proprie liste consentite. Se riscontri un bug o hai una richiesta di funzionalità per un workload privilegiato o una lista consentita, contatta il proprietario corrispondente.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Verifica di poter configurare i cluster per installare le liste consentite dall'origine selezionata. Gli amministratori dell'organizzazione possono utilizzare un criterio dell'organizzazione per controllare i percorsi che puoi aggiungere a un cluster. Per saperne di più, consulta Vincolo gestito del servizio Policy dell'organizzazione per le liste consentite.
Per i workload privilegiati di proprietà del cliente disponibili per i clienti GKE idonei, verifica entrambe le seguenti condizioni:
- L'amministratore della tua organizzazione ha aggiunto il percorso del bucket della lista consentita a un criterio dell'organizzazione. Per saperne di più, consulta Limitare i workload GKE privilegiati nelle organizzazioni.
- La lista consentita che vuoi installare si trova nel bucket Cloud Storage. Per maggiori informazioni, vedi Creare liste consentite per i workload Autopilot privilegiati.
Requisiti
- La risorsa personalizzata AllowlistSynchronizer richiede GKE versione 1.32.2-gke.1652000 o successive.
- Devi sapere quale workload con privilegi vuoi eseguire nel tuo cluster.
- Per modificare la configurazione del percorso della lista consentita per un cluster, il cluster deve eseguire GKE versione 1.35 o successive.
Configura i percorsi della lista consentita per un cluster
Questa sezione mostra come configurare un cluster per supportare l'installazione di liste consentite da un insieme di percorsi approvati. Per impostazione predefinita, Autopilot supporta l'installazione di liste consentite da partner GKE e progetti open source approvati. Puoi modificare questa configurazione predefinita per i singoli cluster. Puoi anche specificare origini consentite approvate per un'intera organizzazione, cartella o progetto utilizzando una policy dell'organizzazione.
Identifica i percorsi dei file della lista consentita da aggiungere al cluster. Puoi specificare più percorsi quando crei o aggiorni il cluster. Puoi anche disattivare l'installazione della lista consentita da qualsiasi origine specificando una stringa vuota anziché un percorso. Per saperne di più sui percorsi che puoi specificare, consulta Percorsi della lista consentita.
Per controllare le origini consentite approvate per un cluster, utilizza il flag
--autopilot-privileged-admissionquando crei o aggiorni un cluster Autopilot o Standard, come nel seguente comando:gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Sostituisci quanto segue:
CLUSTER_NAME: un nome per il nuovo cluster.LOCATION: la posizione del control plane del cluster, ad esempious-central1.ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: un elenco separato da virgole di percorsi di file o directory da inserire nella lista consentita. Ad esempio,gke://*,gs://my-agent/privileged-logging-agent.yaml. Puoi anche disattivare l'installazione dalla lista consentita da qualsiasi origine specificando una stringa vuota ("").
Se aggiorni un cluster esistente senza specificare il flag --autopilot-privileged-admission, la configurazione del percorso esistente per quel cluster non cambia. Non devi specificare questo flag ogni volta che
aggiorni un cluster.
Una volta completata l'operazione di creazione o aggiornamento del cluster, puoi installare le liste consentite dai percorsi specificati creando AllowlistSynchronizers.
Crea un nuovo AllowlistSynchronizer
Per eseguire un carico di lavoro con privilegi, aggiungi il percorso del file di allowlist corrispondente a una specifica AllowlistSynchronizer in un file YAML. Poi esegui il deployment di AllowlistSynchronizer nel tuo cluster.
- In un editor di testo, crea un nuovo file YAML.
Aggiungi i seguenti contenuti al file YAML:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATHSostituisci quanto segue:
ALLOWLIST_SYNCHRONIZER_NAME: il nome del nuovo sincronizzatore. Scegli un nome descrittivo che identifichi il workload o il team supportato dalla lista consentita.ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: un elenco di percorsi di file o directory consentiti che vuoi installare, come nel seguente esempio:allowlistPaths: - gke://* - gs://my-agent/privileged-logging-agent.yamlLa configurazione del cluster deve supportare i percorsi specificati, come descritto nella sezione Configurare i percorsi della lista consentita per un cluster.
Esegui il deployment del file YAML nel tuo cluster:
kubectl apply -f PATH_TO_YAML_FILESostituisci
PATH_TO_YAML_FILEcon il percorso del file YAML che hai creato nel passaggio precedente.Il controller AllowlistSynchronizer installa i file della lista consentita dai percorsi specificati nel cluster.
Attendi finché il sincronizzatore non segnala lo stato
Ready:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
Puoi anche integrare l'installazione della lista consentita e il deployment dei carichi di lavoro privilegiati nella pipeline di integrazione e deployment continui (CI/CD). Configura il workflow in modo che attenda l'installazione corretta della lista consentita prima di eseguire il deployment del workload corrispondente.
Aggiornare un AllowlistSynchronizer esistente
Puoi aggiornare un AllowlistSynchronizer esistente per aggiungere o rimuovere file di liste consentite. Potresti aggiornare i sincronizzatori esistenti in situazioni come le seguenti:
- Il proprietario del workload aggiunge un nuovo file di lista consentita con un nome diverso.
- Vuoi aggiungere una nuova lista consentita per i carichi di lavoro a un sincronizzatore esistente che raggruppa le liste consentite correlate.
- Vuoi rimuovere una lista consentita da un sincronizzatore perché non vuoi più utilizzare il carico di lavoro corrispondente.
Per aggiornare un oggetto AllowlistSynchronizer esistente:
Elenca i sincronizzatori esistenti nel cluster:
kubectl get allowlistsynchronizerApri la specifica del sincronizzatore che vuoi aggiornare in un editor di testo.
Aggiorna il campo
spec.allowlistPathsper aggiungere, modificare o rimuovere i percorsi dei file della lista consentita.Salva e chiudi l'editor di testo.
Applica la configurazione aggiornata al cluster:
kubectl apply -f PATH_TO_YAML_FILESostituisci
PATH_TO_YAML_FILEcon il percorso del file YAML aggiornato nel passaggio precedente.
Quando implementi una configurazione aggiornata del sincronizzatore, il
campo managedAllowlistStatus.generation nello stato dell'oggetto
AllowlistSynchronizer viene incrementato di uno. Il controller AllowlistSynchronizer
applica quindi le modifiche.
Monitorare lo stato della sincronizzazione della lista consentita
Dopo aver installato un sincronizzatore della lista consentita o aggiornato un sincronizzatore esistente, puoi monitorare lo stato della sincronizzazione. Lo stato ti aiuta a monitorare l'installazione, la rimozione o le modifiche dei file della lista consentita, nonché eventuali errori che potrebbero verificarsi.
Per monitorare lo stato generale della sincronizzazione, esegui questo comando:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
L'output è simile al seguente:
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/example-allowlist-2.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/example-allowlist-1.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
In questo output di esempio, la sincronizzazione della lista consentita example-allowlist-1.yaml non è riuscita, mentre la lista consentita example-allowlist-2.yaml è stata installata correttamente. Per una descrizione di questi campi, vedi
Stato di AllowlistSynchronizer.
Verifica che esista una lista consentita nel cluster
Per verificare che esista una lista consentita nel cluster, esegui questo comando:
kubectl get workloadallowlist
L'output è un elenco delle liste consentite installate nel cluster. Verifica che l'output includa la lista consentita che vuoi utilizzare.
Esegui il deployment del workload privilegiato
Dopo l'installazione corretta di una lista consentita, puoi eseguire il deployment del workload corrispondente nel cluster. Il proprietario del workload deve anche fornirti le istruzioni di installazione per il workload. Per un elenco dei partner Autopilot e dei link alla relativa documentazione, consulta la pagina Partner Autopilot.
Utilizzare repository mirror di immagini private
Puoi eseguire il mirroring delle immagini container dei workload con privilegi in repository privati di tua proprietà. Per eseguire queste immagini sottoposte a mirroring in un workload, devi soddisfare tutti i seguenti requisiti:
- Il digest SHA-256 dell'immagine sottoposta a mirroring deve corrispondere al digest dell'immagine del carico di lavoro disponibile pubblicamente.
- Il digest dell'immagine SHA-256 che specifichi deve esistere nell'oggetto
WorkloadAllowlistsincronizzato con il cluster.
Se il workload supporta le immagini sottoposte a mirroring, la specifica della lista consentita per quel workload contiene un elenco di hash delle immagini nel campo containers.imageDigests della specifica della lista consentita per quel workload. In genere, questo campo ha
un digest separato per ogni versione disponibile dell'immagine container. Per visualizzare questo elenco di hash delle immagini:
- Verifica che la lista consentita esista nel cluster.
Recupera la specifica della lista consentita installata:
kubectl get workloadallowlist ALLOWLIST_NAME -o yamlSostituisci
ALLOWLIST_NAMEcon il nome della lista consentita installata. Ad esempio,company-name-solution-v1.0.0.Per i workload che supportano questa funzionalità, l'output è simile al seguente. Il campo
imageDigestscontiene un elenco di riepiloghi consentiti.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23Se l'output non include un campo
imageDigestso se il digest per la release che vuoi utilizzare non è nell'elenco, contatta direttamente il proprietario del workload e chiedigli di aggiornare la lista consentita. Dopo che il proprietario del workload aggiunge i digest delle immagini alla lista consentita, il sincronizzatore della lista consentita nel cluster installa automaticamente la lista consentita aggiornata.Aggiungi uno dei digest delle immagini supportati al manifest del workload.
Ad esempio, considera la seguente immagine in una specifica Pod disponibile pubblicamente di un partner:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Puoi utilizzare un'immagine sottoposta a mirroring se il digest corrisponde al digest disponibile pubblicamente, come nel seguente esempio:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Devi includere il digest SHA-256 nel campo dell'immagine, in modo simile all'esempio precedente. Se i digest non corrispondono, l'immagine speculare non verrà pubblicata. Per conservare i digest delle immagini quando esegui il mirroring delle immagini partner, valuta la possibilità di utilizzare uno strumento come crane, ORAS o skopeo.
Eliminare un workload privilegiato
Per impedire l'esecuzione di un workload privilegiato nei tuoi cluster, rimuovi il percorso della lista consentita corrispondente da AllowlistSynchronizer. Il sincronizzatore disinstalla la lista consentita.
Se elimini un oggetto WorkloadAllowlist dal cluster anziché
aggiornare il sincronizzatore, quest'ultimo reinstalla la lista consentita. Assicurati
di rimuovere il percorso da AllowlistSynchronizer.
Per disinstallare una lista consentita:
- Nel manifest YAML per AllowlistSynchronizer che gestisce la lista consentita, rimuovi il percorso della lista consentita che vuoi disinstallare. Per istruzioni, consulta la sezione Aggiornare una sezione AllowlistSynchronizer esistente.
Per verificare che la lista consentita sia stata disinstallata, recupera un elenco di oggetti
WorkloadAllowlistnel tuo cluster:kubectl get workloadallowlistNell'output, assicurati che la lista consentita che volevi rimuovere non venga visualizzata.
Elimina il workload dal cluster. Per istruzioni, consulta la documentazione del provider del workload.
Impedisci l'installazione di liste consentite nei tuoi cluster
Per impedire l'installazione di elenchi consentiti di workload privilegiati in cluster specifici, specifica una stringa vuota ("") nel flag --autopilot-privileged-admission quando crei o aggiorni un cluster.
Per disabilitare percorsi specifici della lista consentita per un cluster, ometti i percorsi di queste liste consentite quando crei o aggiorni un cluster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Sostituisci
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...con un elenco separato da virgole di percorsi alle origini della lista consentita. Ometti i percorsi che vuoi disattivare.Per disattivare tutte le liste consentite in un cluster esistente, specifica una stringa vuota come il percorso approvato:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-allowlist-paths=""
Risoluzione dei problemi
Se la sincronizzazione o il deployment del workload non vanno a buon fine, consulta Risolvere i problemi relativi al deployment dei workload Autopilot con privilegi.
Passaggi successivi
- Scopri di più sui workload disponibili dei partner GKE Autopilot
- Esecuzione di carichi di lavoro open source privilegiati su GKE Autopilot
- Scopri di più sulle funzionalità di sicurezza di GKE Autopilot predefinite
- Leggi la CustomResourceDefinition AllowlistSynchronizer