Utilizzare il controllo della directory attendibile

Questa pagina mostra come utilizzare la verifica della directory attendibile della convalida continua (CV) dell'autorizzazione binaria per verificare che le immagini associate ai pod in esecuzione su cluster Google Kubernetes Engine (GKE) abilitati per la convalida continua siano state sottoposte a deployment da directory attendibili.

Costi

Questa guida utilizza i seguenti servizi Google Cloud :

  • Autorizzazione binaria, ma CV è disponibile senza costi durante la fase di anteprima
  • GKE

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 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 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 il ruolo come descritto in questa sezione.

    Per assicurarti che l'agente di servizio di Autorizzazione binaria del progetto cluster disponga delle autorizzazioni necessarie per valutare il controllo della directory attendibile CV, chiedi all'amministratore di concedere all'agente di servizio di Autorizzazione binaria del progetto cluster i seguenti ruoli IAM nel progetto:

    • Se il progetto del cluster è diverso dal progetto del criterio: Valutatore criterio di autorizzazione binaria (roles/binaryauthorization.policyEvaluator) - l'agente di servizio di autorizzazione binaria del progetto del cluster, per accedere al progetto del criterio

    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 Autorizzazione binaria del progetto cluster le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

    Concedi ruoli utilizzando gcloud CLI

    Se il progetto in cui esegui il cluster è diverso da quello in cui si trova il criterio, procedi nel seguente modo per concedere all'agente di servizio di Autorizzazione binaria del progetto cluster l'accesso al criterio nel progetto criterio.

    1. Recupera l'agente di servizio di Autorizzazione binaria del progetto del cluster:

      PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      Sostituisci CLUSTER_PROJECT_ID con l'ID progetto del cluster.

    2. Consenti a CV di valutare la policy sul cluster:

      gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
          --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \
          --role='roles/binaryauthorization.policyEvaluator'
      

      Sostituisci POLICY_PROJECT_ID con l'ID del progetto che contiene la tua policy.

    Crea una policy della piattaforma

    Per creare una policy della piattaforma CV con un controllo della directory attendibile:

    1. Crea il file YAML dei criteri per la directory attendibile:

      cat > /tmp/my-policy.yaml <<EOF
      gkePolicy:
        checkSets:
          checks:
            trustedDirectoryCheck:
              trustedDirPatterns:
              - PATTERN1
              - PATTERN2
            displayName: CHECK_DISPLAY_NAME
          displayName: CHECK_SET_DISPLAY_NAME
      EOF
      

      Sostituisci quanto segue:

      • PATTERN1: un elemento di elenco con un pattern di directory
      • PATTERN2: un elemento di elenco con un pattern di directory
      • CHECK_DISPLAY_NAME: un nome visualizzato facoltativo per il controllo della directory attendibile
      • CHECK_SET_DISPLAY_NAME: un nome visualizzato facoltativo per il controllo della directory attendibile

      Di seguito sono riportati alcuni esempi di pattern:

      • asia-east1-docker.pkg.dev/my-project/my-repo: considera attendibile solo questo repository
      • europe-central1-docker.pkg.dev/my-project/my-repo/test*: considera attendibili solo questo repository e i repository immediatamente sottostanti che iniziano con test
      • us-central1-docker.pkg.dev/my-project/my-repo/**: considera attendibile solo questo repository e tutti i repository al suo interno
    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