Creare liste consentite per i workload privilegiati in Autopilot

Questo documento mostra come creare liste consentite che ti consentono di eseguire il deployment di workload con privilegi nei nodi Autopilot. Archivi queste liste consentite nei bucket Cloud Storage. Questo documento è destinato ad amministratori e operatori della piattaforma che vogliono esentare specifici workload di proprietà del cliente dai vincoli di sicurezza Autopilot predefiniti per specifici workload Kubernetes. Dovresti già avere familiarità con il controllo dell'ammissione dei workload privilegiati 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 di configurare i cluster in modo che riconoscano questi elenchi consentiti e bucket gestiti dal cliente. Gli amministratori del 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 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
  • 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.
  • Attiva l'API Cloud Storage.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin), che include l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilitare l'API

  • 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 privilegiato 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:

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 WorkloadAllowlist e caricarla nel bucket Cloud Storage:

  1. Identifica il workload privilegiato da inserire nella lista consentita.
  2. Aggiungi la seguente annotazione al campo metadata.annotations nella specifica del pod:

    cloud.google.com/generate-allowlist: "true"
    

    Per i pod gestiti da un controller, ad esempio un DaemonSet o un deployment, aggiungi l'annotazione al campo spec.template.metadata.annotations.

  3. Tenta di creare il carico di lavoro con privilegi nel cluster:

    kubectl apply -f WORKLOAD_FILE_PATH
    

    Sostituisci 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: true
    
  4. In un editor di testo, crea un file YAML che contenga l'elenco consentito dei workload generato.

  5. Imposta il campo metadata.name della lista consentita.

  6. (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[*].image e matchingCriteria.containers[*].args. Utilizza un'espressione regolare che corrisponda a più valori in diversi carichi di lavoro.

    • Campi specifici, come matchingCriteria.containers e matchingCriteria.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 CustomResourceDefinition WorkloadAllowlist.

  7. Carica il file manifest nel bucket Cloud Storage.

Se i criteri della tua organizzazione consentono l'installazione di liste consentite dal tuo bucket nei cluster, gli amministratori dei cluster possono:

  1. Aggiungi i percorsi della lista consentita a un cluster.
  2. 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-1 nel 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.
  1. 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: Directory
    

    Per impostazione predefinita, Autopilot rifiuta questo carico di lavoro.

  2. 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/log
    

    Questo elenco consentito di workload ha le seguenti proprietà:

    • I valori nel campo exemptions specificano i vincoli di Autopilot che la lista consentita aggira.
    • I valori nel campo matchingCriteria specificano 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 carico di lavoro, come il campo resources.requests, vengono ignorati.

Quando installi questo esempio di WorkloadAllowlist 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 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:

Per concedere questi ruoli all'agente di servizio, segui questi passaggi:

  1. Trova il numero del progetto del cluster:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    
  2. 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.bucketViewer
    

    Sostituisci 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.
  3. 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