Utilizzare il controllo dell'aggiornamento delle immagini

Questa pagina mostra come utilizzare il controllo della freschezza delle immagini della convalida continua (CV) di Autorizzazione binaria per controllare la freschezza delle immagini associate ai pod in esecuzione sui cluster Google Kubernetes Engine (GKE) in cui è abilitata la convalida continua. Per farlo, CV controlla quando l'immagine è stata caricata nel registro delle immagini.

Questo controllo supporta solo i repository Artifact Registry e Container Registry.

Costi

Questa guida utilizza i seguenti servizi Google Cloud :

  • Autorizzazione binaria, ma CV è disponibile senza costi durante la fase di anteprima
  • Google Kubernetes Engine

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com
  14. Assicurati che gcloud CLI sia aggiornato all'ultima versione.
  15. Installa lo strumento a riga di comando kubectl.
  16. Se i criteri di Autorizzazione binaria e i cluster GKE si trovano in progetti diversi, assicurati che Autorizzazione binaria sia abilitata in entrambi i progetti.
  17. Ruoli obbligatori

    Questa sezione mostra come impostare i ruoli per questo controllo.

    Panoramica

    Se esegui tutti i prodotti menzionati in questa guida nello stesso progetto, non devi impostare alcuna autorizzazione. Autorizzazione binaria configura correttamente i ruoli quando lo attivi. Se esegui i prodotti in progetti diversi, devi impostare i ruoli come descritto in questa sezione.

    Per garantire che l'agente di servizio di autorizzazione binaria del progetto di policy disponga delle autorizzazioni necessarie per valutare il controllo della freschezza dell'immagine CV, chiedi all'amministratore di concedere all'agente di servizio di autorizzazione binaria del progetto di policy i seguenti ruoli IAM:

    • Se il progetto del cluster è diverso dal progetto dei criteri: Valutatore criterio di autorizzazione binaria (roles/binaryauthorization.policyEvaluator) nell'agente di servizio di autorizzazione binaria del progetto del cluster, per accedere al progetto dei criteri
    • Se il progetto Artifact Registry, ovvero il progetto che archivia le immagini, è diverso dal progetto dei criteri: Lettore di Artifact Registry (roles/artifactregistry.reader) sull'agente di servizio autorizzazione binaria del progetto dei criteri, per accedere al progetto di attestazione
    • Se il progetto Artifact Registry è diverso dal progetto cluster: Lettore di Artifact Registry (roles/artifactregistry.reader) nell'agente di servizio Binary Authorization del progetto cluster, per accedere ai metadati delle immagini nel progetto Artifact Registry

    Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

    L'amministratore potrebbe anche essere in grado di concedere all'agente di servizio di Binary Authorization del progetto delle norme le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.

    Concedi ruoli utilizzando gcloud CLI

    Per assicurarti che l'agente di servizio di Binary Authorization in ogni progetto disponga delle autorizzazioni necessarie per valutare questo controllo, concedi all'agente di servizio di Autorizzazione binaria in ogni progetto i seguenti ruoli IAM.

    Il progetto del cluster è diverso dal progetto del criterio

    Concedi al service agent di Autorizzazione binaria nel progetto cluster il ruolo Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) nel progetto policy.

    gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
      --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
      --role=roles/binaryauthorization.policyEvaluator

    Sostituisci quanto segue:

    • POLICY_PROJECT_ID: l'ID del progetto che contiene la tua policy.
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster.

    Progetto delle norme diverso dal progetto dell'artefatto

    Concedi all'agente di servizio Autorizzazione binaria nel progetto delle policy il ruolo Lettore Artifact Registry (roles/artifactregistry.reader) nel progetto degli artefatti.

    gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
        --member="serviceAccount:service-$(gcloud projects describe POLICY_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
        --role=roles/artifactregistry.reader

    Sostituisci ARTIFACT_PROJECT_ID con l'ID del progetto che contiene il tuo repository Artifact Registry.

    Progetto cluster diverso dal progetto artefatto

    Concedi all'agente di servizio Autorizzazione binaria nel progetto cluster il ruolo Lettore Artifact Registry (roles/artifactregistry.reader) nel progetto artefatto.

    gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
        --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
        --role=roles/artifactregistry.reader

    Sostituisci quanto segue:

    • ARTIFACT_PROJECT_ID: l'ID del progetto che contiene il repository Artifact Registry.
    • CLUSTER_PROJECT_ID: l'ID progetto che esegue i cluster GKE.

    Crea una policy della piattaforma

    Per creare una policy della piattaforma CV con il controllo della freschezza delle immagini, segui questi passaggi:

    1. Crea il file YAML dei criteri della piattaforma:

      cat << EOF > /tmp/my-policy.yaml
      gkePolicy:
        checkSets:
        - checks:
          - imageFreshnessCheck:
              maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS
            displayName: CHECK_DISPLAY_NAME
          displayName: CHECK_SET_DISPLAY_NAME
      EOF
      

      Sostituisci quanto segue:

      • MAX_UPLOAD_AGE_DAYS: il tempo massimo trascorso dall'upload dell'immagine nel registro, in giorni.
      • CHECK_SET_DISPLAY_NAME: un nome visualizzato facoltativo a tua scelta per il set di controlli
      • CHECK_DISPLAY_NAME: un nome visualizzato facoltativo a tua scelta per il controllo
    2. Crea la policy della piattaforma:

      Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

      • POLICY_ID: Un ID policy della piattaforma a tua scelta. Se la norma si trova in un altro progetto, puoi utilizzare il nome completo della risorsa: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
      • POLICY_PATH: un percorso del file di criteri.
      • POLICY_PROJECT_ID: L'ID progetto della policy.

      Esegui questo comando:

      Linux, macOS o Cloud Shell

      gcloud beta container binauthz policy create POLICY_ID \
          --platform=gke \
          --policy-file=POLICY_PATH \
          --project=POLICY_PROJECT_ID

      Windows (PowerShell)

      gcloud beta container binauthz policy create POLICY_ID `
          --platform=gke `
          --policy-file=POLICY_PATH `
          --project=POLICY_PROJECT_ID

      Windows (cmd.exe)

      gcloud beta container binauthz policy create POLICY_ID ^
          --platform=gke ^
          --policy-file=POLICY_PATH ^
          --project=POLICY_PROJECT_ID

    Abilita CV

    Puoi creare un nuovo cluster o aggiornarne uno esistente per utilizzare il monitoraggio CV con criteri della piattaforma basati su controlli.

    Crea un cluster che utilizza il monitoraggio CV

    In questa sezione, creerai un cluster che utilizza solo il monitoraggio CV con criteri della piattaforma basati su controlli.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • CLUSTER_NAME: un nome del cluster.
    • LOCATION: la posizione, ad esempio us-central1 o asia-south1.
    • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviata la policy.
    • POLICY_ID: l'ID policy.
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster.

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container clusters create CLUSTER_NAME `
        --location=LOCATION `
        --binauthz-evaluation-mode=POLICY_BINDINGS `
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
        --project=CLUSTER_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container clusters create CLUSTER_NAME ^
        --location=LOCATION ^
        --binauthz-evaluation-mode=POLICY_BINDINGS ^
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
        --project=CLUSTER_PROJECT_ID

    Crea un cluster che utilizza l'applicazione e il monitoraggio CV

    In questa sezione, creerai un cluster che utilizza sia l'applicazione dei criteri project-singleton sia il monitoraggio CV con criteri della piattaforma basati su controlli:

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • CLUSTER_NAME: un nome del cluster.
    • LOCATION: la posizione, ad esempio us-central1 o asia-south1.
    • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviata la policy.
    • POLICY_ID: l'ID policy.
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster.

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container clusters create CLUSTER_NAME `
        --location=LOCATION `
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
        --project=CLUSTER_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container clusters create CLUSTER_NAME ^
        --location=LOCATION ^
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
        --project=CLUSTER_PROJECT_ID

    Aggiorna un cluster per utilizzare il monitoraggio CV

    In questa sezione, aggiornerai un cluster in modo che utilizzi il monitoraggio CV solo con i criteri della piattaforma basati su controlli. Se il cluster ha già l'applicazione dei criteri project-singleton abilitata, l'esecuzione di questo comando la disabilita. Ti consigliamo invece di aggiornare il cluster con l'applicazione e il monitoraggio delle vulnerabilità e delle esposizioni comuni abilitati.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • CLUSTER_NAME: il nome del cluster
    • LOCATION: la posizione, ad esempio us-central1 o asia-south1
    • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviata la policy
    • POLICY_ID: l'ID criterio
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container clusters update CLUSTER_NAME `
        --location=LOCATION `
        --binauthz-evaluation-mode=POLICY_BINDINGS `
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
        --project=CLUSTER_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container clusters update CLUSTER_NAME ^
        --location=LOCATION ^
        --binauthz-evaluation-mode=POLICY_BINDINGS ^
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
        --project=CLUSTER_PROJECT_ID

    Aggiorna un cluster per utilizzare l'applicazione e il monitoraggio CV

    In questa sezione, aggiornerai un cluster in modo che utilizzi sia l'applicazione dei criteri singleton del progetto sia il monitoraggio delle vulnerabilità comuni con criteri della piattaforma basati su controlli.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • CLUSTER_NAME: un nome del cluster
    • LOCATION: la posizione, ad esempio us-central1 o asia-south1
    • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviata la policy
    • POLICY_ID: l'ID criterio
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container clusters update CLUSTER_NAME `
        --location=LOCATION `
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
        --project=CLUSTER_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container clusters update CLUSTER_NAME ^
        --location=LOCATION ^
        --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
        --project=CLUSTER_PROJECT_ID

    Visualizzare i log per le voci CV

    Puoi cercare le voci di Cloud Logging per trovare errori di configurazione di CV e violazioni della convalida delle norme della piattaforma CV.

    CV registra errori e violazioni in Cloud Logging entro 24 ore. Di solito puoi visualizzare le voci entro poche ore.

    Visualizzare i log degli errori di configurazione di CV

    Per visualizzare i log degli errori di configurazione di CV, esegui questo comando:

    gcloud logging read \
         --order="desc" \
         --freshness=7d \
         --project=CLUSTER_PROJECT_ID \
        'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
    

    L'output seguente mostra un errore di configurazione in cui non viene trovato un criterio della piattaforma CV:

    {
      "insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
      "jsonPayload": {
        "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
        "configErrorEvent": {
          "description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
        }
      },
      "resource": {
        "type": "k8s_cluster",
        "labels": {
          "cluster_name": "my-cluster",
          "location": "us-central1-c",
          "project_id": "my-project"
        }
      },
      "timestamp": "2024-05-28T15:31:03.999566Z",
      "severity": "WARNING",
      "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
      "receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
    }
    

    Visualizzare le violazioni della convalida delle norme della piattaforma CV

    Se nessuna immagine viola le norme della piattaforma che hai attivato, nei log non vengono visualizzate voci.

    Per visualizzare le voci di log CV degli ultimi sette giorni, esegui questo comando:

    gcloud logging read \
         --order="desc" \
         --freshness=7d \
         --project=CLUSTER_PROJECT_ID \
        'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
    

    Sostituisci CLUSTER_PROJECT_ID con l'ID progetto del cluster.

    Tipi di controllo

    I log di CV controllano le informazioni sulle violazioni per checkResults. Nella voce, il valore checkType indica il controllo. I valori per ogni controllo sono i seguenti:

    • ImageFreshnessCheck
    • SigstoreSignatureCheck
    • SimpleSigningAttestationCheck
    • SlsaCheck
    • TrustedDirectoryCheck
    • VulnerabilityCheck

    Log di esempio

    La seguente voce di log CV Logging descrive un'immagine non conforme che viola un controllo della directory attendibile:

    {
      "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
      "jsonPayload": {
        "podEvent": {
          "endTime": "2022-11-22T01:14:30.430151Z",
          "policyName": "projects/123456789/platforms/gke/policies/my-policy",
          "images": [
            {
              "result": "DENY",
              "checkResults": [
                {
                  "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
                  "checkSetName": "My check set",
                  "checkSetIndex": "0",
                  "checkName": "My trusted directory check",
                  "verdict": "NON_CONFORMANT",
                  "checkType": "TrustedDirectoryCheck",
                  "checkIndex": "0"
                }
              ],
              "image": "gcr.io/my-project/hello-app:latest"
            }
          ],
          "verdict": "VIOLATES_POLICY",
          "podNamespace": "default",
          "deployTime": "2022-11-22T01:06:53Z",
          "pod": "hello-app"
        },
        "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
      },
      "resource": {
        "type": "k8s_cluster",
        "labels": {
          "project_id": "my-project",
          "location": "us-central1-a",
          "cluster_name": "my-test-cluster"
        }
      },
      "timestamp": "2022-11-22T01:44:28.729881832Z",
      "severity": "WARNING",
      "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
      "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
    }
    

    Esegui la pulizia

    Questa sezione descrive come eseguire la pulizia del monitoraggio delle conversioni che hai configurato in precedenza in questa guida.

    Puoi disattivare il monitoraggio CV o sia Autorizzazione binaria che CV nel tuo cluster.

    Disabilita Autorizzazione binaria in un cluster

    Per disattivare l'applicazione di CV e Autorizzazione binaria nel tuo cluster, esegui questo comando:

    gcloud beta container clusters update CLUSTER_NAME \
        --binauthz-evaluation-mode=DISABLED \
        --location=LOCATION \
        --project=CLUSTER_PROJECT_ID
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster
    • LOCATION: la posizione del cluster
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Disabilita il monitoraggio delle policy basato sui controlli in un cluster

    Per disabilitare CV con criteri basati su controlli nel cluster e riattivare l'applicazione utilizzando il criterio di applicazione di Autorizzazione binaria, esegui questo comando:

    gcloud beta container clusters update CLUSTER_NAME  \
        --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
        --location=LOCATION \
        --project="CLUSTER_PROJECT_ID"
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster
    • LOCATION: la posizione del cluster
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Tieni presente che --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE è equivalente al flag precedente --enable-binauthz.

    Elimina la policy

    Per eliminare la policy, esegui questo comando. Non è necessario eliminare la policy della piattaforma basata su controlli per disattivare il controllo delle policy basato su controlli.

    gcloud beta container binauthz policy delete POLICY_ID \
        --platform=gke \
        --project="POLICY_PROJECT_ID"
    

    Sostituisci quanto segue:

    • POLICY_ID: l'ID della policy
    • POLICY_PROJECT_ID: l'ID progetto della policy

    Passaggi successivi