Questo documento mostra come creare liste consentite che ti consentono di eseguire il deployment di workload privilegiati nei nodi Autopilot. Queste liste consentite vengono archiviate nei bucket Cloud Storage. Questo documento è destinato agli amministratori e agli operatori della piattaforma che vogliono esentare specifici carichi di lavoro di proprietà del cliente dai vincoli di sicurezza Autopilot predefiniti per specifici carichi di lavoro Kubernetes. Dovresti già avere familiarità con il controllo di ammissione dei workload con privilegi in 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 ignorare questi vincoli per eseguire carichi di lavoro con privilegi specifici installando liste consentite che corrispondono a questi carichi di lavoro. Per impostazione predefinita, qualsiasi cluster Autopilot o Standard consente di installare le liste consentite di partner Autopilot e progetti open source specifici.
I clienti GKE idonei possono creare e gestire liste consentite per i propri workload privilegiati che non sono compatibili con i vincoli Autopilot predefiniti. Queste liste consentite sono risorse personalizzate Kubernetes WorkloadAllowlist che definisci nei file YAML e memorizzi nei bucket Cloud Storage. Gli amministratori di identità e account utilizzano i criteri dell'organizzazione per consentire la configurazione dei cluster in modo che riconoscano gli elenchi consentiti e i bucket gestiti dai clienti. Gli amministratori del cluster possono installare queste liste consentite in modo che i workload con privilegi possano essere eseguiti in modalità Autopilot.
Per saperne di più sulla procedura e sulle persone coinvolte, consulta Come funziona il controllo di ammissione dei workload Autopilot privilegiati.
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.
-
Enable the Cloud Storage API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Assicurati di avere un cluster GKE che esegue la versione 1.35 o successive. Puoi anche creare un cluster Autopilot per questa attività.
- Verifica di avere un bucket Cloud Storage che puoi utilizzare per archiviare i file della lista consentita. Puoi anche creare un bucket per questa attività.
- Apri il manifest YAML che definisce il workload con privilegi che vuoi eseguire in Autopilot.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per archiviare le liste consentite in Cloud Storage e configurare la sincronizzazione, chiedi all'amministratore di concederti i seguenti ruoli IAM sul bucket:
-
Memorizza le liste consentite nel bucket:
Storage Object User (
roles/storage.objectUser) -
Concedi l'accesso all'agente di servizio GKE:
Amministratore storage (
roles/storage.admin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crea e carica un elenco consentito di workload
Le liste consentite sono risorse personalizzate WorkloadAllowlist che definisci nei file YAML. I campi nella specifica di una WorkloadAllowlist sono simili a quelli in una specifica del pod Kubernetes. Quando installi una lista consentita nel cluster e esegui il deployment di un workload privilegiato, GKE convalida la specifica del workload privilegiato rispetto alla lista consentita installata. Il workload può essere eseguito solo se tutti i campi nella specifica della lista consentita corrispondono ai campi corrispondenti nella specifica del workload.
Per creare una nuova lista consentita dei carichi di lavoro e caricarla nel bucket Cloud Storage:
- Identifica il workload privilegiato da inserire nella lista consentita.
Aggiungi la seguente annotazione al campo
metadata.annotationsnella specifica del pod:cloud.google.com/generate-allowlist: "true"Per i pod gestiti da un controller, come DaemonSet o Deployment, aggiungi l'etichetta al campo
spec.template.metadata.annotations.Tenta di creare il carico di lavoro con privilegi nel cluster:
kubectl apply -f WORKLOAD_FILE_PATHSostituisci WORKLOAD_FILE_PATH con il percorso del file manifest del tuo workload. GKE rifiuta il workload con un messaggio di errore che include un manifest WorkloadAllowlist. L'output è simile al seguente:
This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists. Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners. --- apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist metadata: name: test-pod-allowlist-2025-09-11t22-40-37 annotations: autopilot.gke.io/no-connect: "true" exemptions: - autogke-disallow-privilege matchingCriteria: containers: - name: pause-container2 image: k8s.gcr.io/pause2 securityContext: privileged: trueIn un editor di testo, crea un file YAML che contenga l'elenco consentito di workload generato.
Imposta il campo
metadata.namedella lista consentita.(Facoltativo) Generalizza la WorkloadAllowlist in modo che possa esentare workload simili. Utilizza uno dei seguenti metodi:
Campi specifici supportano le espressioni regolari, ad esempio
matchingCriteria.containers[*].imageematchingCriteria.containers[*].args. Utilizza un'espressione regolare che corrisponda a più valori in diversi carichi di lavoro.Campi specifici, come
matchingCriteria.containersematchingCriteria.securityContext.capabilities.add, corrispondono a qualsiasi workload con un sottoinsieme dei valori di WorkloadAllowlist. Nella lista consentita dei workload, specifica valori aggiuntivi per trovare corrispondenze con altri workload.
Per ulteriori informazioni su tutti i campi e i valori supportati che puoi utilizzare, consulta la CustomResourceDefinition WorkloadAllowlist.
Se i criteri della tua organizzazione consentono l'installazione di liste consentite dal tuo bucket nei cluster, gli amministratori dei cluster possono:
- Aggiungi i percorsi della lista consentita a un cluster.
- Crea un AllowlistSynchronizer per installare le liste consentite dal tuo bucket.
Per saperne di più su come configurare un cluster e installare le liste consentite, consulta Controllare l'ammissione dei workload privilegiati in modalità Autopilot.
Configurazione di esempio della lista consentita
Il campo matchingCriteria in una specifica WorkloadAllowlist ha una struttura simile alla specifica del pod Kubernetes. La
WorkloadAllowlist CustomResourceDefinition
è l'origine di riferimento per tutti i campi, i valori e le espressioni che
puoi utilizzare.
Questa sezione mostra un esempio di lista consentita che corrisponde a un workload con le seguenti proprietà:
- Il container
container-1nel carico di lavoro viene eseguito in modalità con privilegi. - Il workload monta la directory
/var/log/dal file system del nodo in modalità di scrittura.
Esamina il workload di esempio:
apiVersion: apps/v1 kind: Deployment metadata: name: example-privileged-workload labels: env: dev spec: selector: matchLabels: env: dev template: metadata: labels: env: dev spec: containers: - name: container-1 image: example-image-1 resources: requests: cpu: "400m" memory: "4Gi" # Run the container in privileged mode securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false # Mount a host directory volumes: - name: write-varlog hostPath: path: /var/log type: DirectoryPer impostazione predefinita, Autopilot rifiuta questo carico di lavoro.
Esamina l'esempio di WorkloadAllowlist:
apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist minGKEVersion: 1.32.0-gke.1000000 metadata: name: example-privileged-workload annotations: autopilot.gke.io/no-connect: "true" # List of constraints that the allowlist modifies exemptions: - autogke-disallow-privilege - autogke-no-write-mode-hostpath matchingCriteria: containers: - name: container-1 image: example-image-1 securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false volumes: - name: write-varlog hostPath: path: /var/logQuesto elenco consentito di workload ha le seguenti proprietà:
- I valori nel campo
exemptionsspecificano i vincoli di Autopilot che la lista consentita aggira. - I valori nel campo
matchingCriteriaspecificano i contenitori utilizzati dal carico di lavoro di esempio e i campi che normalmente violerebbero i vincoli di Autopilot.
La lista consentita contiene solo i valori dei campi che violano i vincoli. Gli altri campi del workload, come il campo
resources.requests, vengono ignorati.- I valori nel campo
Quando installi questo esempio di WorkloadAllowlist in un cluster, GKE consente l'esecuzione del workload privilegiato in quel cluster. Ad esempio, in un cluster Standard con nodi Autopilot, l'installazione di questo WorkloadAllowlist consente al workload con privilegi di essere eseguito sui nodi Autopilot.
Concedi l'accesso al service agent GKE
Per sincronizzare le liste consentite dal bucket in un cluster, l'agente di servizio GKE nel progetto del cluster richiede i seguenti ruoli IAM:
- Visualizzatore bucket di archiviazione (
roles/storage.bucketViewer) - Storage Object Viewer (
roles/storage.objectViewer)
Per concedere questi ruoli all'agente di servizio, segui questi passaggi:
Trova il numero del progetto del cluster:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'Concedi il ruolo
roles/storage.bucketViewer:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.bucketViewerSostituisci quanto segue:
BUCKET_NAME: il nome del bucket Cloud Storage.CLUSTER_PROJECT_NUMBER: il numero del progetto cluster, dall'output del passaggio precedente.BUCKET_PROJECT_ID: l'ID del progetto che contiene il bucket.
Concedi il ruolo
roles/storage.objectViewer:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.objectViewer
Passaggi successivi
- Aggiungere i percorsi della lista consentita a una policy dell'organizzazione
- Configurare i cluster e installare le liste consentite