Questa pagina mostra come utilizzare il controllo della directory attendibile per la convalida continua dell'Autorizzazione binaria per verificare che il deployment delle immagini associate ai pod in esecuzione sui cluster Google Kubernetes Engine (GKE) abilitati per CV sia stato eseguito da directory attendibili.
Costi
Questa guida utilizza i seguenti servizi Google Cloud:
- Autorizzazione binaria, ma il curriculum è 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
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Binary Authorization, Google Kubernetes Engine.
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com container.googleapis.com - Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Binary Authorization, Google Kubernetes Engine.
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com container.googleapis.com - Assicurati che lgcloud CLI sia aggiornata all'ultima versione.
- Installa lo strumento a riga di comando "kubectl".
- Se i criteri di Autorizzazione binaria e i cluster GKE sono in progetti diversi, assicurati che Autorizzazione binaria sia abilitata in entrambi i progetti.
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 è necessario impostare alcuna autorizzazione. Autorizzazione binaria configura correttamente i ruoli quando vengono attivati. Se esegui i prodotti in progetti diversi, devi impostare il ruolo come descritto in questa sezione.
Per assicurarti che l'agente di servizio Autorizzazione binaria del progetto del cluster abbia le autorizzazioni necessarie per valutare il controllo della directory attendibile del CV, chiedi all'amministratore di concedere all'agente di servizio di Autorizzazione binaria del progetto del cluster i seguenti ruoli IAM sul progetto:
-
Se il progetto del cluster è diverso da quello del criterio:
Binary Authorization Policy Evaluator (
roles/binaryauthorization.policyEvaluator
), il progetto del cluster del servizio di Autorizzazione binaria, per consentire l'accesso al progetto del criterio
Per saperne di più sulla concessione dei ruoli, vedi Gestire l'accesso.
L'amministratore potrebbe anche essere in grado di concedere all'agente di servizio Autorizzazione binaria del progetto del cluster le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
Concedi i 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 Autorizzazione binaria del progetto del cluster l'accesso al criterio nel progetto di criteri.
Ottieni l'agente di servizio 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.Consenti al CV di valutare il criterio 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 il tuo criterio.
Crea le norme della piattaforma
Per creare il criterio della piattaforma CV con un controllo della directory attendibile, procedi nel seguente modo:
Crea il file del criterio della 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 dell'elenco con un pattern della directoryPATTERN2
: un elemento dell'elenco con un pattern della directoryCHECK_DISPLAY_NAME
: un nome visualizzato facoltativo per il controllo della directory attendibileCHECK_SET_DISPLAY_NAME
: un nome visualizzato facoltativo per il controllo della directory attendibile
Di seguito sono riportati esempi di pattern:
asia-east1-docker.pkg.dev/my-project/my-repo
: considera attendibile solo questo repositoryeurope-central1-docker.pkg.dev/my-project/my-repo/test*
: considera attendibili solo questo repository e i repository immediatamente successivi che iniziano contest
us-central1-docker.pkg.dev/my-project/my-repo/**
: considera attendibile solo questo repository e tutti i repository al suo interno
Crea le norme della piattaforma:
Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, apporta 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 del progetto di criteri.
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
- 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:
Abilita CV
Puoi creare un nuovo cluster o aggiornare un cluster esistente per utilizzare il monitoraggio del CV con i criteri della piattaforma basati su controlli.
Crea un cluster che utilizza il monitoraggio dei CV
In questa sezione, creerai un cluster che utilizza solo il monitoraggio CV con criteri a piattaforma basati su controlli.
Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, apporta le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un clusterLOCATION
: la posizione, ad esempio:us-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID del 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 forzata e il monitoraggio del CV
In questa sezione creerai un cluster che utilizza sia l'applicazione dei criteri project-Singleton sia il monitoraggio dei CV con criteri della piattaforma basati su controlli:
Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, apporta le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un clusterLOCATION
: la posizione, ad esempio:us-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID del 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 del CV
In questa sezione aggiorni il cluster per utilizzare il monitoraggio del CV solo con i criteri della piattaforma basati su controlli. Se nel cluster è già abilitata l'applicazione dei criteri single-project, l'esecuzione di questo comando lo disabilita. Considera invece di aggiornare il cluster con l'applicazione forzata e il monitoraggio dei CV abilitati.
Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, apporta le seguenti sostituzioni:
CLUSTER_NAME
: il nome del clusterLOCATION
: la posizione, ad esempio:us-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID del 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 forzata e il monitoraggio del CV
In questa sezione, aggiorni un cluster per utilizzare sia l'applicazione dei criteri single-project che il monitoraggio dei CV con i criteri della piattaforma basati su controlli.
Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, apporta le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un clusterLOCATION
: la posizione, ad esempio:us-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID del 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
Visualizza i log per le voci CV
Il CV registra le violazioni dei criteri della piattaforma in Cloud Logging entro 24 ore. In genere, puoi visualizzare le voci entro un paio d'ore.
Se nessuna immagine viola i criteri della piattaforma che hai abilitato, nei log non verranno visualizzate voci.
Per visualizzare le voci di log CV degli ultimi sette giorni, esegui il comando seguente:
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 controlli
I log CV verificano le informazioni sulle violazioni a checkResults
. Nella voce, il valore checkType
indica il controllo. I valori di ciascun controllo sono i seguenti:
ImageFreshnessCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
Log di esempio
L'esempio di voce di log CV di esempio 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
In questa sezione viene descritto come eseguire la pulizia del monitoraggio dei CV configurato in precedenza in questa guida.
Puoi disabilitare il monitoraggio dei CV o sia Autorizzazione binaria sia CV nel tuo cluster.
Disabilita Autorizzazione binaria in un cluster
Per disabilitare l'applicazione forzata di CV e Autorizzazione binaria nel 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 clusterLOCATION
: la località del clusterCLUSTER_PROJECT_ID
: l'ID del progetto del cluster
Disabilita il monitoraggio dei criteri basati su controlli in un cluster
Per disabilitare il CV con i criteri basati su controlli nel cluster e riattivare l'applicazione utilizzando il criterio di applicazione di Autorizzazione binaria, esegui il comando seguente:
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 clusterLOCATION
: la località del clusterCLUSTER_PROJECT_ID
: l'ID del progetto del cluster
Tieni presente che --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
equivale al flag meno recente --enable-binauthz
.
Elimina il criterio
Per eliminare il criterio, esegui questo comando. Non è necessario eliminare il criterio della piattaforma basato sui controlli per disattivare il controllo dei criteri basati sui controlli.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Sostituisci quanto segue:
POLICY_ID
: l'ID del criterioPOLICY_PROJECT_ID
: l'ID del progetto di criteri
Passaggi successivi
- Utilizzare il controllo di aggiornamento dell'immagine
- Usa il semplice controllo di attestazione della firma
- Utilizzare il controllo SLSA
- Utilizzare il controllo di directory attendibile
- Utilizzare il controllo delle vulnerabilità
- Visualizza i log CV