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. 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 update comando. 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.

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

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:

  1. Identifica il workload con privilegi 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 un DaemonSet o un deployment, aggiungi l'annotazione al campo spec.template.metadata.annotations.

  3. Prova a creare il workload con privilegi nel cluster:

    kubectl apply -f WORKLOAD_FILE_PATH
    

    Sostituisci 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: true
    
  4. In un editor di testo, crea un file YAML contenente il WorkloadAllowlist generato.

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

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

    • 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 definizione della risorsa personalizzata WorkloadAllowlist.

  7. Carica il file manifest nel bucket Cloud Storage.

Se le policy dell'organizzazione consentono l'installazione di liste consentite dal bucket nei cluster, gli amministratori dei cluster possono eseguire le seguenti operazioni:

  1. Aggiungi i percorsi delle liste consentite a un cluster.
  2. 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-1 nel workload 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 workload.

  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 WorkloadAllowlist ha le seguenti proprietà:

    • I valori nel campo exemptions specificano i vincoli Autopilot che la lista consentita ignora.
    • I valori nel campo matchingCriteria specificano 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.

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:

Per concedere questi ruoli al service agent:

  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 del 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