Questo documento mostra come creare liste consentite che ti consentono di eseguire il deployment di workload con privilegi 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 workload specifici di proprietà dei clienti dai vincoli di sicurezza predefiniti di Autopilot per workload Kubernetes specifici. Dovresti già conoscere il controllo dell'ammissione dei workload con privilegi in Autopilot.
Informazioni sui workload con privilegi in Autopilot
La modalità Autopilot applica un insieme predefinito di vincoli ai workload per migliorare la tua postura di sicurezza. Puoi ignorare questi vincoli per eseguire workload con privilegi specifici installando liste consentite corrispondenti a questi workload. Per impostazione predefinita, qualsiasi cluster Autopilot o Standard ti consente di installare liste consentite da partner Autopilot e progetti open source specifici.
I clienti GKE idonei possono creare e gestire liste consentite per i propri workload con privilegi che non sono compatibili con i vincoli Autopilot predefiniti. Queste liste consentite sono risorse personalizzate Kubernetes WorkloadAllowlist che definisci nei file YAML e archivi nei bucket Cloud Storage. Gli amministratori di identità e account utilizzano le policy dell'organizzazione per consentirti di configurare i cluster in modo che riconoscano queste liste consentite e questi bucket gestiti dai clienti. Gli amministratori dei cluster possono installare queste liste consentite in modo che i workload con privilegi possano essere eseguiti in modalità Autopilot.
Per ulteriori informazioni sulla procedura e sulle persone coinvolte, consulta Come funziona il controllo dell'ammissione dei workload con privilegi di Autopilot.
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
- 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
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
-
Attiva l'API Storage di Cloud Storage.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli. - 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 delle liste consentite. Puoi anche creare un bucket per questa attività.
- Apri il file 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:
-
Archivia le liste consentite nel bucket:
Storage Object User (
roles/storage.objectUser) -
Concedi l'accesso al service agent GKE:
Storage Admin (
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.
Creare e caricare un WorkloadAllowlist
Le liste consentite sono risorse personalizzate WorkloadAllowlist che definisci nei file YAML. I campi nella specifica di un WorkloadAllowlist sono simili ai campi in una specifica del pod Kubernetes. Quando installi una lista consentita nel cluster ed esegui il deployment di un workload con privilegi, GKE convalida la specifica del workload con privilegi 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 un nuovo WorkloadAllowlist e caricarlo nel bucket Cloud Storage:
- Identifica il workload con privilegi 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 un DaemonSet o un deployment, aggiungi l'annotazione al campo
spec.template.metadata.annotations.Prova a creare il workload con privilegi nel cluster:
kubectl apply -f WORKLOAD_FILE_PATHSostituisci WORKLOAD_FILE_PATH con il percorso del tuo file manifest del 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 contenente il WorkloadAllowlist generato.
Imposta il campo
metadata.namedella lista consentita.(Facoltativo) Generalizza il 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 workload.Campi specifici, come
matchingCriteria.containersematchingCriteria.securityContext.capabilities.add, corrispondono a qualsiasi workload con un sottoinsieme dei valori di WorkloadAllowlist. In WorkloadAllowlist, specifica valori aggiuntivi per corrispondere ad altri workload.
Per ulteriori informazioni su tutti i campi e i valori supportati che puoi utilizzare, consulta la definizione della risorsa personalizzata WorkloadAllowlist.
Se le policy dell'organizzazione consentono l'installazione di liste consentite dal bucket nei cluster, gli amministratori dei cluster possono eseguire le seguenti operazioni:
- Aggiungi i percorsi delle liste consentite a un cluster.
- Crea un AllowlistSynchronizer per installare le liste consentite dal bucket.
Per ulteriori informazioni su come configurare un cluster e installare le liste consentite, consulta Controllare l'ammissione dei workload con privilegi 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
definizione della risorsa personalizzata WorkloadAllowlist
è l'origine attendibile di 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 workload 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 workload.
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 WorkloadAllowlist ha le seguenti proprietà:
- I valori nel campo
exemptionsspecificano i vincoli Autopilot che la lista consentita ignora. - I valori nel campo
matchingCriteriaspecificano i container utilizzati dal workload di esempio e i campi che normalmente violerebbero i vincoli 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 WorkloadAllowlist di esempio in un cluster, GKE consente l'esecuzione del workload con privilegi in quel cluster. Ad esempio, in un cluster Standard con nodi Autopilot, l'installazione di questo WorkloadAllowlist consente l'esecuzione del workload con privilegi sui nodi Autopilot.
Concedere l'accesso al service agent GKE
Per sincronizzare le liste consentite dal bucket in un cluster, il service agent GKE nel progetto del cluster richiede i seguenti ruoli IAM:
- Visualizzatore bucket Storage (
roles/storage.bucketViewer) - Storage Object Viewer (
roles/storage.objectViewer)
Per concedere questi ruoli al service agent:
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.s3ns-system.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 del 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.s3ns-system.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.objectViewer
Passaggi successivi
- Aggiungere i percorsi delle liste consentite a una policy dell'organizzazione
- Configurare i cluster e installare le liste consentite