- Configura GKE per eseguire solo workload con privilegi specifici in modalità Autopilot.
- Installa liste consentite per i workload con privilegi.
Questo documento è rivolto ai seguenti tipi di ruoli:
- Ingegneri della sicurezza che vogliono assicurarsi che i workload di terze parti necessitino di una lista consentita per essere eseguiti sui tuoi cluster e provengano da origini approvate da GKE.
- Platform engineer che vogliono abilitare workload di terze parti sui cluster per sbloccare i team delle applicazioni.
Dovresti già avere familiarità con i seguenti concetti:
- Informazioni sull'ammissione dei workload con privilegi in modalità Autopilot
- Risorse personalizzate di Kubernetes
- Vincoli di sicurezza di GKE Autopilot
- Partner GKE Autopilot
Informazioni sui workload con privilegi in Autopilot
La modalità Autopilot applica un insieme predefinito di vincoli ai workload per migliorare la security posture. Puoi modificare questi vincoli per eseguire workload con privilegi specifici installando liste consentite corrispondenti a questi workload. Per impostazione predefinita, Autopilot ti consente di installare liste consentite dai partner Autopilot e da progetti open source specifici. I clienti GKE idonei possono anche creare liste consentite per i workload con privilegi di proprietà del cliente che caricano nei bucket Cloud Storage.
Ogni lista consentita è un file che corrisponde a un workload con privilegi specifico. Per eseguire un workload con privilegi, segui questi passaggi:
- 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 con privilegi è responsabile della creazione, dello sviluppo e della manutenzione dei workload e delle liste consentite. Se riscontri un bug o hai una richiesta di funzionalità per un workload con privilegi o una lista consentita, contatta il proprietario corrispondente.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Per 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 una policy 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 con privilegi di proprietà del cliente disponibili per i clienti GKE idonei, verifica entrambe le seguenti condizioni:
- L'amministratore dell'organizzazione ha aggiunto il percorso del bucket della lista consentita a una policy dell'organizzazione. Per saperne di più, consulta Limita i workload GKE con privilegi nelle organizzazioni.
- La lista consentita che vuoi installare si trova nel bucket Cloud Storage. Per saperne di più, consulta Crea liste consentite per i workload Autopilot con privilegi.
Requisiti
- La risorsa personalizzata AllowlistSynchronizer richiede GKE versione 1.32.2-gke.1652000 o successiva.
- Devi sapere quale workload con privilegi vuoi eseguire nel cluster.
- Per modificare la configurazione del percorso della lista consentita per un cluster, il cluster deve eseguire GKE versione 1.35 o successiva.
Configura i percorsi della lista consentita per un cluster
Questa sezione mostra come configurare un cluster per supportare l'installazione di allowlist da un insieme di percorsi approvati. Per impostazione predefinita, Autopilot supporta l'installazione di elementi inclusi nella lista consentita dai partner GKE e dai progetti open source approvati. Puoi modificare questa configurazione predefinita per i singoli cluster. Puoi anche specificare origini della lista consentita 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 della lista consentita 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 località del control plane del cluster, ad esempious-central1.ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: un elenco separato da virgole di percorsi per consentire file o directory. 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 è necessario specificare questo flag ogni volta che aggiorni un cluster.
Al termine dell'operazione di creazione o aggiornamento del cluster, puoi installare le liste consentite dai percorsi specificati creando AllowlistSynchronizer.
Crea un nuovo AllowlistSynchronizer
Per eseguire un workload con privilegi, aggiungi il percorso del file della lista consentita 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 per i file o le directory della lista consentita che vuoi installare, come nel seguente esempio per le liste consentite approvate da GKE:allowlistPaths: - Gke-Org/accelerators/* - Wiz/wiz-sensor/v1/wiz-sensor-v1.yamlIn alternativa, nel seguente esempio per le liste consentite di proprietà del cliente:
allowlistPaths: - my-agent/log-collector/* - my-agent/privileged-logging-agent.yamlLa configurazione del cluster deve supportare i percorsi specificati, come descritto nella sezione Configura i percorsi della lista consentita per un cluster. Inoltre, ogni AllowlistSynchronizer deve contenere esclusivamente liste consentite approvate da GKE o esclusivamente liste consentite di proprietà del cliente.
Se installi le liste consentite da un bucket Cloud Storage di proprietà del cliente, aggiungi i campi
spec.projectNumberespec.bucketNamead AllowlistSynchronizer. Per maggiori dettagli, consulta AllowlistSynchronizer CustomResourceDefinition.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 workload con privilegi nella tua pipeline di integrazione continua e deployment continuo (CI/CD). Configura il workflow in modo che attenda il completamento dell'installazione della lista consentita prima di eseguire il deployment del workload corrispondente.
Aggiorna un AllowlistSynchronizer esistente
Puoi aggiornare un AllowlistSynchronizer esistente per aggiungere o rimuovere file della lista consentita. Puoi aggiornare i sincronizzatori esistenti in situazioni come le seguenti:
- Il proprietario del workload aggiunge un nuovo file della lista consentita con un nome diverso.
- Vuoi aggiungere una nuova lista consentita di workload a un sincronizzatore esistente che raggruppa le liste consentite correlate.
- Vuoi rimuovere una lista consentita da un sincronizzatore perché non vuoi più utilizzare il workload 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 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 che hai aggiornato nel passaggio precedente.
Quando esegui il deployment di una configurazione del sincronizzatore aggiornata, il campo managedAllowlistStatus.generation nello stato dell'oggetto AllowlistSynchronizer viene incrementato di uno. Il controller AllowlistSynchronizer applica quindi le modifiche.
Monitora lo stato della sincronizzazione della lista consentita
Dopo aver installato un AllowlistSynchronizer 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 esempio di output, 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, consulta Stato di AllowlistSynchronizer.
Verifica che nel cluster esista una lista consentita
Per verificare che nel cluster esista una lista consentita, 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 con privilegi
Dopo aver installato correttamente una lista consentita, puoi eseguire il deployment del workload corrispondente nel tuo cluster. Il proprietario del workload deve anche fornirti le istruzioni di installazione del workload. Per un elenco dei partner Autopilot e dei link alla loro documentazione, consulta Partner Autopilot.
Utilizza repository mirror di immagini privati
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 workload disponibile pubblicamente.
- Il digest dell'immagine SHA-256 specificato 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 digest 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 digest delle immagini, segui questi passaggi:
- Verifica che la lista consentita esista nel tuo 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 digest consentiti.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23Se l'output non include un campo
imageDigestso se il digest della release che vuoi utilizzare non è presente nell'elenco, contatta direttamente il proprietario del workload e chiedigli di aggiornare la lista consentita. Dopo che il proprietario del workload ha aggiunto 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 nella specifica del 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 a quello disponibile pubblicamente, come nell'esempio seguente:
...
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 sottoposta a mirroring non verrà eseguita. Per conservare i digest delle immagini quando esegui il mirroring delle immagini dei partner, valuta l'utilizzo di uno strumento come crane, ORAS o skopeo.
Elimina un workload con privilegi
Per impedire l'esecuzione di un workload con privilegi 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 Aggiorna un 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 della lista consentita nei tuoi cluster
Per impedire l'installazione di liste consentite di workload con privilegi in cluster specifici, specifica una stringa vuota ("") nel flag --autopilot-privileged-admission quando crei o aggiorni un cluster.
Per disattivare percorsi di lista consentita specifici 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 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 Risolvi i problemi di deployment dei workload Autopilot con privilegi.
Passaggi successivi
- Scopri i workload disponibili dei partner GKE Autopilot
- Esegui workload open source con privilegi su GKE Autopilot
- Scopri le funzionalità di sicurezza predefinite di GKE Autopilot
- Leggi la CustomResourceDefinition AllowlistSynchronizer