Creare liste consentite per i carichi di lavoro privilegiati in Autopilot

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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the 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 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:

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:

  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, come DaemonSet o Deployment, aggiungi l'etichetta 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 di 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. 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.

  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 workload, come il campo resources.requests, vengono ignorati.

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:

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.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.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.objectViewer
    

Passaggi successivi