Utilizzare il servizio di valutazione dei criteri

Questa pagina mostra come utilizzare il comando Google Cloud CLI del servizio di valutazione delle policy per valutare rapidamente se un'immagine o una risorsa Kubernetes è conforme a una policy della piattaforma basata sul controllo di convalida continua.

Panoramica

Il servizio di valutazione dei criteri è una funzionalità di Autorizzazione binaria che puoi utilizzare con le policy della piattaforma basate su controlli di convalida continua (CV). Il servizio di valutazione delle policy valuta su richiesta se un'immagine container specificata è conforme a una policy della piattaforma CV. Il servizio di valutazione dei criteri è disponibile come comando gcloud CLI e come metodo projects.platforms.gke.policies.evaluate.

Il controllo delle creatività video viene eseguito almeno una volta ogni 24 ore. Di conseguenza, potrebbero essere necessarie fino a 24 ore prima che gli eventi CV vengano visualizzati in Logging dopo l'attivazione di CV o il deployment di una risorsa Kubernetes. Inoltre, CV produce voci di log quando rileva una violazione delle norme. CV non produce voci di log quando le risorse Kubernetes sono conformi alla policy.

Il servizio di valutazione delle norme restituisce un verdetto che indica se l'immagine è conforme alle norme o se le viola.

Utilizzando il servizio di valutazione delle norme, puoi determinare rapidamente se la tua immagine è conforme a una norma.

Quando utilizzi il servizio, specifichi l'URL dell'immagine, direttamente o all'interno di una risorsa Kubernetes, e anche il nome del criterio basato sul controllo delle vulnerabilità comuni di GKE.

In questo modo, il servizio di valutazione delle policy può aiutarti a sviluppare policy e a eseguire il debug delle risorse Kubernetes non conformi prima di utilizzare CV.

Questa funzionalità supporta solo i criteri basati sul controllo CV di GKE.

Le immagini devono anche specificare un digest dell'immagine nel formato IMAGE_URL@IMAGE_DIGEST, tranne nei seguenti casi:

  • Controllo della directory attendibile: il controllo viene superato se l'immagine si trova in una directory specificata.
  • Elenchi consentiti di immagini esenti: tutti gli altri controlli richiedono un digest dell'immagine nel formato IMAGE_URL@IMAGE_DIGEST.

Prima di iniziare

  1. Install the Google Cloud CLI.

  2. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  3. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare il servizio di valutazione delle policy, chiedi all'amministratore di concederti il ruolo IAM Policy Evaluator (roles/binaryauthorization.policyEvaluator) sul progetto delle policy. 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.

Se il tuo criterio utilizza determinati controlli, potresti dover chiedere all'amministratore di concedere i seguenti ruoli obbligatori specifici per il controllo:

Valutare le norme della piattaforma basate su controlli

Il servizio di valutazione delle norme può valutare un singolo URL immagine o un'immagine specificata in una risorsa Kubernetes in formato JSON o YAML.

Valutare i criteri della piattaforma basati su controlli con una risorsa Kubernetes

Per valutare una policy con una risorsa Kubernetes utilizzando gcloud CLI, esegui questo comando:

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

  • POLICY_ID: l'ID della norma della piattaforma. 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.
  • POD_SPECIFICATION_PATH: il percorso della specifica pod.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --resource=POD_SPECIFICATION_PATH

Per valutare una policy che specifica la piattaforma, che deve essere impostata su gke, esegui questo comando:

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

  • POLICY_ID: l'ID della norma della piattaforma. 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.
  • POD_SPECIFICATION_PATH: il percorso della specifica pod.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --platform=gke \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --platform=gke `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --platform=gke ^
    --resource=POD_SPECIFICATION_PATH

Valutare le norme della piattaforma basate su controlli con un URL immagine

Per valutare una policy utilizzando un URL immagine, esegui questo comando:

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

  • POLICY_ID: l'ID della norma della piattaforma. 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.
  • IMAGE_URL: il percorso della specifica pod.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --image=IMAGE_URL

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --image=IMAGE_URL

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --image=IMAGE_URL

Quando utilizzi il flag --image, si presume implicitamente che lo spazio dei nomi e il account di servizio siano vuoti. Se il criterio che stai valutando utilizza checkset con ambito kubernetesNamespace o kubernetesServiceAccount, i risultati restituiti potrebbero non essere accurati.

Esaminare l'output comando

L'output del comando contiene un verdetto di primo livello che indica lo stato di conformità del pod. Possono essere restituiti i seguenti stati di conformità:

  • CONFORMANT: La risorsa Kubernetes è conforme alle norme della piattaforma.
  • NON_CONFORMANT: La risorsa Kubernetes non è conforme alle norme della piattaforma.
  • ERROR: La valutazione è terminata con un errore.

La risposta contiene anche risultati nidificati con informazioni dettagliate sullo stato di conformità di tutti i controlli valutati per ogni immagine contenuta nella risorsa Kubernetes.

Ogni blocco ImageResults contiene un campo explanation leggibile che descrive il motivo per cui l'immagine sarebbe consentita o non consentita.

Per facilitare la creazione di script, il comando restituisce un codice di uscita diverso da zero quando la specifica del pod non è conforme alle norme o la valutazione non va a buon fine.

Gli esempi di output seguenti mostrano due casi. Nel primo caso, la risorsa Kubernetes è conforme alla policy. Nel secondo caso, la risorsa non è conforme al criterio.

Visualizzare un risultato conforme

Questa sezione descrive l'output di un controllo del servizio di valutazione delle policy in cui il pod è conforme alla policy della piattaforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: CONFORMANT
          explanation: Image is in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    verdict: CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: CONFORMANT
verdict: CONFORMANT

Nell'output, per i seguenti tipi di valutazione viene restituito un risultato di CONFORMANT:

  • Controlla: l'immagine è conforme al controllo individuale, in questo caso il controllo della directory attendibile.
  • CheckSet: l'immagine è conforme a ciascuno dei controlli nel CheckSet.
  • Norme: l'immagine è conforme alle norme.

Poiché l'immagine è conforme alle norme, il comando restituisce un codice di uscita pari a zero.

Visualizzare un risultato non conforme

Questa sezione descrive l'output di un controllo del servizio di valutazione delle norme in cui il pod non è conforme alle norme della piattaforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: NON_CONFORMANT
          explanation: Image isn't in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
    verdict: NON_CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: NON_CONFORMANT
verdict: NON_CONFORMANT

Nell'output, poiché l'immagine non è conforme al controllo individuale, in questo caso il controllo della directory attendibile e quindi l'insieme di tutti i controlli, il verdetto di primo livello è NON_CONFORMANT e il comando restituisce un codice di uscita diverso da zero.

Testa il servizio di valutazione delle policy

Questa sezione descrive come testare il servizio di valutazione delle norme. Crea una policy della piattaforma basata su controlli che contenga il controllo della directory attendibile. Nel primo test, puoi quindi valutare una specifica del pod conforme alla norma. Nel secondo test, valuti una specifica del pod che non è conforme al criterio.

Per creare una policy che contenga un controllo della directory attendibile, esegui i seguenti comandi:

  1. Crea un file di policy della piattaforma:

    cat << EOF > my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - displayName: "My trusted directory check"
          trustedDirectoryCheck:
            trustedDirPatterns:
            - "us-docker.pkg.dev/google-samples/containers/gke/"
        displayName: "My default check set"
    EOF
    
  2. Crea il criterio:

    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 delle norme.
    • 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

    gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=my-policy.yaml
    

Valutare un'immagine conforme

In questa sezione, valuti una specifica del pod conforme alla policy che hai creato in precedenza in questa guida. La valutazione produce un verdetto che indica che la specifica del pod è CONFORMANT, perché la specifica del pod fa riferimento a un'immagine che si trova nella directory specificata in trustedDirPatterns nel controllo della directory attendibile.

  1. Crea la specifica del pod:

    cat << EOF > my-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
          ]
      }
    }
    EOF
    
  2. Utilizza il servizio di valutazione delle policy eseguendo questo comando:

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

    • POLICY_ID: l'ID della norma della piattaforma. 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.
    • my-conforming-pod.json: il percorso della specifica pod.

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-conforming-pod.json

Valutare un'immagine non conforme

In questa sezione, valuti una specifica del pod che non è conforme al criterio creato in precedenza in questa guida. La valutazione produce un verdetto che indica che la specifica del pod è NON_CONFORMANT, perché fa riferimento a un'immagine che si trova al di fuori della directory specificata in trustedDirPatterns nel controllo della directory attendibile.

Per valutare un'immagine non conforme, esegui questi comandi:

  1. Crea la specifica del pod:

    cat << EOF > my-non-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0"
          }
        ]
      }
    }
    EOF
    
  2. Utilizza il servizio di valutazione delle policy eseguendo questo comando:

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

    • POLICY_ID: l'ID della norma della piattaforma. 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.
    • my-non-conforming-pod.json: il percorso della specifica pod.

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-non-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-non-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-non-conforming-pod.json

Passaggi successivi