Questa pagina mostra come utilizzare il controllo della directory attendibile della convalida continua (CV) di Autorizzazione binaria per controllare che il deployment delle immagini associate ai pod in esecuzione su cluster Google Kubernetes Engine (GKE) sia stato eseguito 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
- 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 initialize gcloud CLI, esegui questo comando:
gcloud init
-
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.
-
-
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 initialize gcloud CLI, esegui questo comando:
gcloud init
-
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.
-
-
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 gcloud CLI sia aggiornato all'ultima versione.
- Installa lo strumento a riga di comando
kubectl
. - 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.
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 i ruoli correttamente quando viene abilitata. 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 cluster disponga delle autorizzazioni necessarie per valutare il controllo della directory attendibile CV, chiedi all'amministratore di concedere all'agente di servizio Autorizzazione binaria del progetto cluster i seguenti ruoli IAM nel progetto:
-
Se il progetto del cluster è diverso dal progetto dei criteri:
Valutatore dei criteri di autorizzazione binaria (
roles/binaryauthorization.policyEvaluator
): l'agente di servizio del progetto di cluster Autorizzazione binaria per l'accesso al progetto dei criteri
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
L'amministratore potrebbe anche essere in grado di concedere all'agente di servizio Autorizzazione binaria del progetto cluster le autorizzazioni richieste mediante 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, segui questi passaggi per concedere l'autorizzazione all'agente di servizio di Autorizzazione binaria del progetto cluster di accedere al criterio nel progetto del criterio.
Ottieni l'agente di servizio di Autorizzazione binaria del progetto 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 a 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 criterio.
Crea un criterio relativo alla piattaforma
Per creare un criterio della piattaforma CV con un controllo delle directory attendibili, segui questi passaggi:
Crea il file YAML 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 di directoryPATTERN2
: un elemento dell'elenco con un pattern di 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 alcuni 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 attendibile solo questo repository e i repository subito al di sotto 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 il criterio della piattaforma:
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
- 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 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 sui controlli.
Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un cluster.LOCATION
: la località, ad esempious-central1
oasia-south1
.POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterio.POLICY_ID
: l'ID del criterio.CLUSTER_PROJECT_ID
: l'ID progetto del cluster.
Esegui questo seguente 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 delle conversioni
In questa sezione creerai un cluster che utilizza sia l'applicazione dei criteri project-singleton sia il monitoraggio delle conversioni avanzate con criteri della piattaforma basati sui controlli:
Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un cluster.LOCATION
: la località, ad esempious-central1
oasia-south1
.POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterio.POLICY_ID
: l'ID del criterio.CLUSTER_PROJECT_ID
: l'ID progetto del cluster.
Esegui questo seguente 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 aggiorni un cluster in modo che utilizzi il monitoraggio CV solo con criteri della piattaforma basati su controlli. Se nel cluster è già abilitata l'applicazione dei criteri per singoli progetti, questo comando la disabilita. Valuta invece la possibilità di aggiornare il cluster con l'applicazione forzata e il monitoraggio delle conversioni avanzate abilitati.
Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:
CLUSTER_NAME
: il nome del clusterLOCATION
: la località, ad esempious-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID progetto del cluster
Esegui questo seguente 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 delle conversioni
In questa sezione aggiorni un cluster in modo che utilizzi sia l'applicazione forzata dei criteri dei singoli progetti sia il monitoraggio delle conversioni avanzate con criteri della piattaforma basati sui controlli.
Prima di utilizzare qualsiasi dato di comando riportato di seguito, effettua le seguenti sostituzioni:
CLUSTER_NAME
: il nome di un clusterLOCATION
: la località, ad esempious-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviato il criterioPOLICY_ID
: l'ID del criterioCLUSTER_PROJECT_ID
: l'ID progetto del cluster
Esegui questo seguente 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
Puoi cercare nelle voci di Cloud Logging per trovare gli errori di configurazione CV e le violazioni della convalida dei criteri della piattaforma CV.
CV registra errori e violazioni in Cloud Logging entro 24 ore. In genere, puoi visualizzare le voci entro poche ore.
Visualizza i log degli errori di configurazione CV
Per visualizzare i log degli errori di configurazione 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 è stato 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"
}
Visualizza le violazioni dei criteri della piattaforma CV
Se nessuna immagine viola i criteri della piattaforma che hai abilitato, non viene visualizzata alcuna voce nei log.
Per visualizzare le voci di log CV relative agli 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 controlli
I log CV controllano le informazioni sulle violazioni per checkResults
. Nella voce, il valore checkType
indica la verifica. I valori di ogni controllo sono i seguenti:
ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
Log di esempio
L'esempio di voce di CV Logging di seguito 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 ripulire il monitoraggio CV che hai configurato in precedenza in questa guida.
Puoi disabilitare il monitoraggio degli errori di conversione o sia Autorizzazione binaria sia CV nel tuo cluster.
Disabilita Autorizzazione binaria in un cluster
Per disabilitare l'applicazione forzata di CV e di 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 clusterLOCATION
: la località del clusterCLUSTER_PROJECT_ID
: l'ID progetto del cluster
Disabilita il monitoraggio dei criteri basato su controlli in un cluster
Per disabilitare la CV con criteri basati su controllo nel cluster e riabilitare l'applicazione mediante 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 clusterLOCATION
: la località del clusterCLUSTER_PROJECT_ID
: l'ID progetto del cluster
Tieni presente che --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
è
equivalente al flag precedente --enable-binauthz
.
Elimina il criterio
Per eliminare il criterio, esegui questo comando. Non è necessario eliminare il criterio della piattaforma basato sui controlli per disabilitare questo tipo di controllo.
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 progetto del criterio
Passaggi successivi
- Utilizzare il controllo di aggiornamento delle immagini
- Utilizzare il semplice controllo dell'attestazione della firma
- Utilizzare il controllo della firma di Sigstore
- Utilizzare il controllo SLSA
- Utilizzare il controllo della directory attendibile
- Utilizza il controllo delle vulnerabilità
- Visualizza log CV