Controllare l'ammissione dei workload con privilegi in modalità Autopilot

Puoi eseguire workload con privilegi in modalità Autopilot di Google Kubernetes Engine (GKE) installando le liste consentite per questi workload nei cluster. Questo documento mostra come eseguire le seguenti attività:

  • Configurare GKE per eseguire solo workload con privilegi specifici in modalità Autopilot.
  • Installare le liste consentite per i workload con privilegi.

Questo documento è destinato ai seguenti tipi di ruoli:

  • Ingegneri della sicurezza che vogliono assicurarsi che i workload di terze parti richiedano una lista consentita per essere eseguiti sui cluster e provengano da origini approvate da GKE.
  • Ingegneri della piattaforma che vogliono abilitare i workload di terze parti sui cluster per sbloccare i team di applicazioni.

Dovresti già conoscere i seguenti concetti:

Informazioni sui workload con privilegi in Autopilot

La modalità Autopilot applica un insieme predefinito di vincoli ai workload per migliorare la tua security posture. Puoi modificare questi vincoli per eseguire workload con privilegi specifici installando liste consentite che corrispondono a questi workload. Per impostazione predefinita, Autopilot ti consente di installare le liste consentite dai partner di Autopilot e da progetti open source specifici. I clienti GKE idonei possono anche creare liste consentite per i workload con privilegi di proprietà del cliente che caricano nei bucket Cloud Storage.

Ogni lista consentita è un file che corrisponde a un workload con privilegi specifico. Per eseguire un workload con privilegi:

  1. Configura il cluster in modo da consentire l'installazione delle liste consentite da percorsi specifici. Per impostazione predefinita, sono supportate tutte le liste consentite dei partner di Autopilot e dei progetti open source approvati.
  2. Crea un AllowlistSynchronizer nel cluster che installa la lista consentita e la mantiene aggiornata.

Bug e richieste di funzionalità per workload con privilegi e liste consentite

Il proprietario di un workload con privilegi è responsabile della creazione, dello sviluppo e della manutenzione dei workload e delle liste consentite. Se riscontri un bug o hai una richiesta di funzionalità per un workload con privilegi o una lista consentita, contatta il proprietario corrispondente.

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 installato in precedenza 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.

Requisiti

  • La risorsa personalizzata AllowlistSynchronizer richiede la versione 1.32.2-gke.1652000 di GKE o versioni successive.
  • Devi sapere quale workload con privilegi vuoi eseguire nel cluster.
  • Per modificare la configurazione del percorso della lista consentita per un cluster, il cluster deve eseguire GKE versione 1.35 o successive.

Configurare i percorsi delle liste consentite per un cluster

Questa sezione mostra come configurare un cluster per supportare l'installazione delle liste consentite da un insieme di percorsi approvati. Per impostazione predefinita, Autopilot supporta l'installazione delle liste consentite dai partner di GKE e dai progetti open source approvati. Puoi modificare questa configurazione predefinita per i singoli cluster. Puoi anche specificare le origini delle liste consentite approvate per un'intera organizzazione, cartella, o progetto utilizzando una policy dell'organizzazione.

  1. Identifica i percorsi dei file delle liste consentite da aggiungere al cluster. Puoi specificare più percorsi quando crei o aggiorni il cluster. Puoi anche disabilitare l'installazione delle liste consentite da qualsiasi origine specificando una stringa vuota anziché un percorso. Per saperne di più sui percorsi che puoi specificare, consulta Percorsi delle liste consentite.

  2. Per controllare le origini delle liste consentite approvate per un cluster, utilizza il flag --autopilot-privileged-admission quando crei o aggiorni un cluster Autopilot o Standard, come nel seguente comando:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: un nome per il nuovo cluster.
    • LOCATION: la località del piano di controllo del cluster, ad esempio us-central1.
    • ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: un elenco di percorsi separati da virgole per file o directory delle liste consentite. Ad esempio, gke://*,gs://my-agent/privileged-logging-agent.yaml. Puoi anche disattivare l'installazione delle liste consentite da qualsiasi origine specificando una stringa vuota ("").

Se aggiorni un cluster esistente senza specificare il flag --autopilot-privileged-admission, la configurazione del percorso esistente per quel cluster non cambia. Non devi specificare questo flag ogni volta che aggiorni un cluster.

Al termine dell'operazione di creazione o aggiornamento del cluster, puoi installare le liste consentite dai percorsi specificati creando AllowlistSynchronizers.

Creare un nuovo AllowlistSynchronizer

Per eseguire un workload con privilegi, aggiungi il percorso al file della lista consentita corrispondente a una specifica AllowlistSynchronizer in un file YAML. Poi esegui il deployment di AllowlistSynchronizer nel cluster.

  1. In un editor di testo, crea un nuovo file YAML.
  2. Aggiungi i seguenti contenuti al file YAML:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Sostituisci quanto segue:

    • ALLOWLIST_SYNCHRONIZER_NAME: il nome del nuovo sincronizzatore. Scegli un nome descrittivo che identifichi il workload o il team supportato dalla lista consentita.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: un elenco di percorsi per file o directory delle liste consentite che vuoi installare, come nel seguente esempio per le liste consentite approvate da GKE:

      allowlistPaths:
      - Gke-Org/accelerators/*
      - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml
      

      Oppure nel seguente esempio per le liste consentite di proprietà del cliente:

      allowlistPaths:
      - my-agent/log-collector/*
      - my-agent/privileged-logging-agent.yaml
      

      La configurazione del cluster deve supportare i percorsi specificati, come descritto nella sezione Configurare i percorsi delle liste consentite per un cluster. Inoltre, ogni AllowlistSynchronizer deve contenere esclusivamente liste consentite approvate da GKE o esclusivamente liste consentite di proprietà del cliente.

  3. Se installi le liste consentite da un bucket Cloud Storage di proprietà del cliente, aggiungi i campi spec.projectNumber e spec.bucketName al tuo AllowlistSynchronizer. Per maggiori dettagli, consulta la AllowlistSynchronizer CustomResourceDefinition.

  4. Esegui il deployment del file YAML nel cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Sostituisci PATH_TO_YAML_FILE con il percorso del file YAML che hai creato nel passaggio precedente.

    Il controller AllowlistSynchronizer installa i file delle liste consentite dai percorsi specificati nel cluster.

  5. Attendi finché il sincronizzatore non segnala lo stato Ready:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

Puoi anche integrare l'installazione delle liste consentite e il deployment dei workload con privilegi nella pipeline di integrazione continua e deployment continuo (CI/CD). Configura il flusso di lavoro in modo che attenda l'installazione corretta della lista consentita prima di eseguire il deployment del workload corrispondente.

Aggiornare un AllowlistSynchronizer esistente

Puoi aggiornare un AllowlistSynchronizer esistente per aggiungere o rimuovere i file delle liste consentite. Potresti aggiornare i sincronizzatori esistenti in situazioni come le seguenti:

  • Il proprietario del workload aggiunge un nuovo file della lista consentita con un nome diverso.
  • Vuoi aggiungere una nuova lista consentita per i workload a un sincronizzatore esistente che raggruppa le liste consentite correlate.
  • Vuoi rimuovere una lista consentita da un sincronizzatore perché non vuoi più utilizzare il workload corrispondente.

Per aggiornare un oggetto AllowlistSynchronizer esistente:

  1. Elenca i sincronizzatori esistenti nel cluster:

    kubectl get allowlistsynchronizer
    
  2. Apri la specifica del sincronizzatore che vuoi aggiornare in un editor di testo.

  3. Aggiorna il campo spec.allowlistPaths per aggiungere, modificare o rimuovere i percorsi dei file delle liste consentite.

  4. Salva e chiudi l'editor di testo.

  5. Applica la configurazione aggiornata al cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Sostituisci PATH_TO_YAML_FILE con il percorso del file YAML che hai aggiornato nel passaggio precedente.

Quando esegui il deployment di una configurazione del sincronizzatore aggiornata, il campo managedAllowlistStatus.generation nello stato dell'oggetto AllowlistSynchronizer aumenta di uno. Il controller AllowlistSynchronizer applica quindi le modifiche.

Monitorare lo stato della sincronizzazione delle liste consentite

Dopo aver installato un AllowlistSynchronizer o aggiornato un sincronizzatore esistente, puoi monitorare lo stato di sincronizzazione. Lo stato ti aiuta a monitorare l'installazione, la rimozione o le modifiche dei file delle liste consentite, nonché eventuali errori che potrebbero verificarsi.

Per monitorare lo stato generale della sincronizzazione, esegui il seguente comando:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

L'output è simile al seguente:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

In questo output di esempio, la sincronizzazione della lista consentita example-allowlist-1.yaml non è riuscita, mentre la lista consentita example-allowlist-2.yaml è stata installata correttamente. Per una descrizione di questi campi, consulta Stato di AllowlistSynchronizer.

Verificare l'esistenza di una lista consentita nel cluster

Per verificare l'esistenza di una lista consentita nel cluster, esegui il seguente comando:

kubectl get workloadallowlist

L'output è un elenco delle liste consentite installate nel cluster. Verifica che l'output includa la lista consentita che vuoi utilizzare.

Eseguire il deployment del workload con privilegi

Dopo aver installato correttamente una lista consentita, puoi eseguire il deployment del workload corrispondente nel cluster. Il proprietario del workload deve anche fornirti le istruzioni di installazione per il workload. Per un elenco dei partner di Autopilot e dei link alla relativa documentazione, consulta Partner di Autopilot.

Utilizzare i repository di mirror di immagini private

Puoi eseguire il mirroring delle immagini container dei workload con privilegi nei repository privati di tua proprietà. Per eseguire queste immagini con mirroring in un workload, devi soddisfare tutti i seguenti requisiti:

  • Il digest SHA-256 dell'immagine con mirroring deve corrispondere al digest dell'immagine del workload disponibile pubblicamente.
  • Il digest dell'immagine SHA-256 specificato deve esistere nell'oggetto WorkloadAllowlist sincronizzato con il cluster.

Se il workload supporta le immagini con mirroring, la specifica della lista consentita per quel workload contiene un elenco di digest delle immagini nel campo containers.imageDigests nella specifica della lista consentita per quel workload. In genere, questo campo ha un digest separato per ogni versione disponibile dell'immagine container. Per visualizzare questo elenco di digest delle immagini:

  1. Verifica che la lista consentita esista nel cluster.
  2. Recupera la specifica della lista consentita installata:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Sostituisci ALLOWLIST_NAME con il nome della lista consentita installata. Ad esempio, company-name-solution-v1.0.0.

    Per i workload che supportano questa funzionalità, l'output è simile al seguente. Il campo imageDigests contiene un elenco di digest consentiti.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Se l'output non include un campo imageDigests o se il digest per la release che vuoi utilizzare non è presente nell'elenco, contatta direttamente il proprietario del workload e chiedigli di aggiornare la lista consentita. Dopo che il proprietario del workload aggiunge i digest delle immagini alla lista consentita, il sincronizzatore della lista consentita nel cluster installa automaticamente la lista consentita aggiornata.

  3. Aggiungi uno dei digest delle immagini supportati al manifest del workload.

Ad esempio, considera la seguente immagine nella specifica del pod disponibile pubblicamente di un partner:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Puoi utilizzare un'immagine con mirroring se il digest corrisponde al digest disponibile pubblicamente, come nel seguente esempio:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Devi includere il digest SHA-256 nel campo dell'immagine, in modo simile all'esempio precedente. Se i digest non corrispondono, l'immagine con mirroring non verrà eseguita. Per conservare i digest delle immagini quando esegui il mirroring delle immagini dei partner, valuta la possibilità di utilizzare un o strumento come crane, ORAS, o skopeo.

Eliminare un workload con privilegi

Per impedire l'esecuzione di un workload con privilegi nei cluster, rimuovi il percorso della lista consentita corrispondente da AllowlistSynchronizer. Il sincronizzatore disinstalla la lista consentita.

Se elimini un oggetto WorkloadAllowlist dal cluster anziché aggiornare il sincronizzatore, il sincronizzatore reinstalla la lista consentita. Assicurati di rimuovere il percorso da AllowlistSynchronizer.

Per disinstallare una lista consentita:

  1. Nel manifest YAML per AllowlistSynchronizer che gestisce la lista consentita, rimuovi il percorso della lista consentita che vuoi disinstallare. Per istruzioni, consulta la sezione Aggiornare un AllowlistSynchronizer esistente.
  2. Per verificare che la lista consentita sia stata disinstallata, recupera un elenco di oggetti WorkloadAllowlist nel cluster:

    kubectl get workloadallowlist
    

    Nell'output, assicurati che la lista consentita che volevi rimuovere non venga visualizzata.

  3. Elimina il workload dal cluster. Per istruzioni, consulta la documentazione del fornitore del workload.

Impedire l'installazione delle liste consentite nei cluster

Per impedire l'installazione delle liste consentite per i workload con privilegi in cluster specifici, specifica una stringa vuota ("") nel --autopilot-privileged-admission flag quando crei o aggiorni un cluster.

  • Per disattivare percorsi specifici delle liste consentite per un cluster, ometti i percorsi di queste liste consentite quando crei o aggiorni un cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Sostituisci ALLOWLIST1_PATH,ALLOWLIST2_PATH,... con un elenco di percorsi separati da virgole per le origini delle liste consentite. Ometti i percorsi che vuoi disattivare.

  • Per disattivare tutte le liste consentite in un cluster esistente, specifica una stringa vuota come percorso approvato:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

Risoluzione dei problemi

Se la sincronizzazione o il deployment del workload non riescono, consulta Risolvere i problemi di deployment dei workload con privilegi di Autopilot.

Passaggi successivi