Utilizzare il servizio di valutazione dei criteri

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

Panoramica

Il servizio di valutazione dei criteri è una funzionalità di Autorizzazione binaria che puoi utilizzare con i criteri della piattaforma basati sui controlli per la convalida continua (CV). Il servizio di valutazione dei criteri valuta on demand se un'immagine container specificata è conforme a un criterio della piattaforma CV. Il servizio di valutazione dei criteri è disponibile come comando gcloud CLI e come metodo projects.platforms.gke.policies.evaluate.

CV verifica la presenza di violazioni delle norme almeno una volta ogni 24 ore. Di conseguenza, possono trascorrere fino a 24 ore prima che gli eventi CV vengano visualizzati in Logging dopo l'abilitazione di CV o il deployment di una risorsa Kubernetes. Inoltre, CV produce voci di log quando rileva una violazione dei criteri. CV non produce voci di log quando le risorse Kubernetes sono conformi al criterio.

Il servizio di valutazione dei criteri restituisce un esito che indica se l'immagine è conforme o se viola le norme.

Utilizzando il servizio di valutazione dei criteri, puoi determinare rapidamente se la tua immagine è conforme a un criterio.

Quando utilizzi il servizio, specifichi l'URL dell'immagine direttamente o all'interno di una risorsa Kubernetes e specifichi anche il nome del criterio basato sui controlli di GKE in CV.

In questo modo, il servizio di valutazione dei criteri può aiutarti a sviluppare criteri ed eseguire il debug di risorse Kubernetes non conformi prima di utilizzare CV.

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

Le immagini devono inoltre specificare un digest immagine nel formato IMAGE_URL@IMAGE_DIGEST, ad eccezione dei seguenti casi:

  • Controllo della directory attendibile: il controllo viene superato se l'immagine si trova in una directory da te specificata.
  • Liste consentite di immagini esenti: tutti gli altri controlli richiedono un digest delle immagini nel modulo IMAGE_URL@IMAGE_DIGEST.

Prima di iniziare

  1. Installa Google Cloud CLI.
  2. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare il servizio di valutazione dei criteri, chiedi all'amministratore di concederti il ruolo IAM Valutazione dei criteri (roles/binaryauthorization.policyEvaluator) nel progetto del criterio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Se il criterio utilizza determinati controlli, potrebbe essere necessario chiedere all'amministratore di concedere i seguenti ruoli richiesti specifici per il controllo:

Valuta i criteri della piattaforma basati su controlli

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

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

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

Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

  • POLICY_ID: l'ID del criterio della piattaforma. Se il criterio 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 del pod.

Esegui questo seguente 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 un criterio che specifica la piattaforma, che deve essere impostata su gke, esegui questo comando:

Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

  • POLICY_ID: l'ID del criterio della piattaforma. Se il criterio 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 del pod.

Esegui questo seguente 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

Valuta i criteri della piattaforma basati su controlli con un URL immagine

Per valutare un criterio utilizzando un URL immagine, esegui questo comando:

Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

  • POLICY_ID: l'ID del criterio della piattaforma. Se il criterio 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 del pod.

Esegui questo seguente 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 l'account di servizio siano vuoti. Se il criterio che stai valutando utilizza set di controllo che hanno come ambito kubernetesNamespace o kubernetesServiceAccount, i risultati restituiti potrebbero non essere accurati.

Rivedi output comando

L'output comando contiene un esito di primo livello che indica lo stato di conformità del pod. È possibile restituire i seguenti stati di conformità:

  • CONFORMANT: la risorsa Kubernetes è conforme ai criteri relativi alla piattaforma.
  • NON_CONFORMANT: la risorsa Kubernetes non è conforme al criterio relativo alla piattaforma.
  • ERROR: la valutazione è terminata per errore.

La risposta contiene anche risultati nidificati contenenti 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 perché l'immagine potrebbe essere consentita o non consentita.

Per facilitare lo scripting, il comando restituisce un codice di uscita diverso da zero quando la specifica del pod non è conforme al criterio o la valutazione ha esito negativo.

I seguenti esempi di output dimostrano due casi. Nel primo caso, la risorsa Kubernetes è conforme ai criteri. Nel secondo caso, la risorsa non è conforme al criterio.

Visualizza un risultato conforme

Questa sezione descrive l'output di un controllo del servizio di valutazione dei criteri in cui il pod è conforme ai criteri 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, viene restituito un esito CONFORMANT per i seguenti tipi di valutazione:

  • Controllo: l'immagine è conforme al singolo controllo, 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 al criterio, il comando restituisce un codice di uscita pari a zero.

Visualizza un risultato non conforme

Questa sezione descrive l'output di un controllo del servizio di valutazione dei criteri in cui il pod non è conforme ai criteri 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 singolo controllo, in questo caso il controllo della directory attendibile (e quindi l'insieme di tutti i controlli), l'esito di primo livello è NON_CONFORMANT e il comando restituisce un codice di uscita diverso da zero.

testa il servizio di valutazione dei criteri

Questa sezione descrive come testare il servizio di valutazione dei criteri. Creerai un criterio della piattaforma basato su controlli che contiene il controllo della directory attendibile. Nel primo test, puoi quindi valutare una specifica del pod conforme al criterio. Nel secondo test, valuti una specifica di un pod non conforme al criterio.

Per creare un criterio che contiene un controllo della directory attendibile, esegui questi comandi:

  1. Crea un file dei criteri 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 qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

    • POLICY_ID: un ID criterio della piattaforma a tua scelta. Se il criterio 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 al file del criterio.
    • POLICY_PROJECT_ID: l'ID progetto del criterio.

    Esegui questo seguente 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
    

Valuta un'immagine conforme

In questa sezione valuterai una specifica del pod conforme al criterio creato in precedenza in questa guida. La valutazione produce un esito che indica che la specifica del pod è CONFORMANT, perché la specifica del pod fa riferimento a un'immagine che risiede 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 dei criteri eseguendo questo comando:

    Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

    • POLICY_ID: l'ID del criterio della piattaforma. Se il criterio 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 del pod.

    Esegui questo seguente 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

Valuta un'immagine non conforme

In questa sezione, valuterai una specifica del pod 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é la specifica del pod fa riferimento a un'immagine che risiede all'esterno 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 dei criteri eseguendo questo comando:

    Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:

    • POLICY_ID: l'ID del criterio della piattaforma. Se il criterio 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 del pod.

    Esegui questo seguente 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