Questa pagina mostra come utilizzare il comando Google Cloud CLI per il servizio di valutazione delle norme per valutare rapidamente se un'immagine o una risorsa Kubernetes è conforme a un criterio della piattaforma basato su controlli di convalida continua.
Panoramica
Il servizio di valutazione dei criteri è una funzionalità di Autorizzazione binaria che puoi utilizzare con i criteri della piattaforma basati su controlli di convalida continua (CV). Il servizio di valutazione delle norme valuta su richiesta se un'immagine contenitore specificata è conforme a una norma della piattaforma CV. Il servizio di valutazione dei criteri è disponibile come comando dell'interfaccia a riga di comando gcloud e come metodo projects.platforms.gke.policies.evaluate.
CV controlla la presenza di violazioni delle norme almeno una volta ogni 24 ore. Di conseguenza, possono 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 genera voci di log quando rileva una violazione delle norme. CV non genera voci di log quando le risorse Kubernetes sono conformi alle norme.
Il servizio di valutazione delle norme genera un verdetto che indica se l'immagine è conforme alle norme o se la 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 specifichi anche il nome del criterio basato sul controllo CV di GKE.
In questo modo, il servizio di valutazione delle norme può aiutarti a sviluppare le norme e a eseguire il debug delle risorse Kubernetes non conformi prima di utilizzare il CV.
Questa funzionalità supporta solo i criteri basati su controlli GKE CV.
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 delle immagini nel formato
IMAGE_URL@IMAGE_DIGEST
.
Prima di iniziare
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare il servizio di valutazione delle norme,
chiedi all'amministratore di concederti il ruolo IAM Valutatore delle norme (roles/binaryauthorization.policyEvaluator
) nel progetto delle norme.
Per saperne di più sulla concessione dei ruoli, consulta Gestire 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 i controlli:
- Ruoli richiesti per il controllo di attestazione della firma semplice
- Ruoli richiesti per il controllo delle vulnerabilità
- Ruoli richiesti per il controllo dell'aggiornamento
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 un criterio con una risorsa Kubernetes utilizzando gcloud CLI, esegui il seguente comando:
Prima di utilizzare i dati dei comandi riportati 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 il 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 il seguente comando:
Prima di utilizzare i dati dei comandi riportati 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 il 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
Valutare i criteri della piattaforma basati su controlli con un URL immagine
Per valutare un criterio utilizzando l'URL di un'immagine, esegui il seguente comando:
Prima di utilizzare i dati dei comandi riportati 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 il 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 con ambito kubernetesNamespace
o
kubernetesServiceAccount
, i risultati restituiti potrebbero non essere accurati.
Controlla l'output del comando
L'output del comando contiene un verdetto 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 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 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 da una persona che descrive il motivo per cui l'immagine è consentita o meno.
Per semplificare 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 riportati di seguito mostrano due casi. Nel primo caso, la risorsa Kubernetes è conforme al criterio. Nel secondo caso, la risorsa non è conforme alle norme.
Visualizzare 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 verdetto CONFORMANT
per i seguenti tipi di
valutazione:
- Controllo: l'immagine è conforme per il 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 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 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 al controllo della directory attendibile e quindi all'insieme di tutti i controlli, il verdetto di primo livello è NON_CONFORMANT
e il comando restituisce un codice di uscita diverso da zero.
Testare il servizio di valutazione delle norme
Questa sezione descrive come puoi testare il servizio di valutazione delle norme. Puoi creare un criterio della piattaforma basato su controllo che contenga il controllo della directory attendibile. Nel primo test, puoi valutare una specifica del pod conforme alle norme. Nel secondo test, valuti una specifica del pod che non è conforme ai criteri.
Per creare un criterio che contenga un controllo della directory attendibile, esegui i seguenti comandi:
Crea un file di 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
Crea il criterio:
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- POLICY_ID: un ID norme della piattaforma scelto da te. 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 delle norme.
- POLICY_PROJECT_ID: l'ID del progetto di norme.
Esegui il 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
- POLICY_ID: un ID norme della piattaforma scelto da te. Se il criterio si trova in un altro progetto, puoi utilizzare il nome completo della risorsa:
Valutare un'immagine conforme
In questa sezione, valuti una specifica del pod conforme al criterio creato in precedenza in questa guida. La valutazione produce un verdetto che indica che la specifica del pod è CONFORMANT
, perché fa riferimento a un'immagine che si trova nella directory specificata in trustedDirPatterns
nel controllo della directory attendibile.
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
Utilizza il servizio di valutazione delle norme eseguendo il seguente comando:
Prima di utilizzare i dati dei comandi riportati 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 il 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
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 i seguenti comandi:
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
Utilizza il servizio di valutazione delle norme eseguendo il seguente comando:
Prima di utilizzare i dati dei comandi riportati 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 il 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