Questa pagina mostra come utilizzare il controllo della freschezza delle immagini della convalida continua (CV) di Autorizzazione binaria per controllare la freschezza delle immagini associate ai pod in esecuzione sui cluster Google Kubernetes Engine (GKE) in cui è abilitata la convalida continua. Per farlo, CV controlla quando l'immagine è stata caricata nel registro delle immagini.
Questo controllo supporta solo i repository Artifact Registry e Container Registry.
Costi
Questa guida utilizza i seguenti servizi Google Cloud :
- Autorizzazione binaria, ma CV è disponibile senza costi durante la fase di anteprima
- Google Kubernetes Engine
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.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.
-
Se il progetto del cluster è diverso dal progetto dei criteri:
Valutatore criterio di autorizzazione binaria (
roles/binaryauthorization.policyEvaluator
) nell'agente di servizio di autorizzazione binaria del progetto del cluster, per accedere al progetto dei criteri -
Se il progetto Artifact Registry, ovvero il progetto che archivia le immagini, è diverso dal progetto dei criteri:
Lettore di Artifact Registry (
roles/artifactregistry.reader
) sull'agente di servizio autorizzazione binaria del progetto dei criteri, per accedere al progetto di attestazione -
Se il progetto Artifact Registry è diverso dal progetto cluster:
Lettore di Artifact Registry (
roles/artifactregistry.reader
) nell'agente di servizio Binary Authorization del progetto cluster, per accedere ai metadati delle immagini nel progetto Artifact Registry POLICY_PROJECT_ID
: l'ID del progetto che contiene la tua policy.CLUSTER_PROJECT_ID
: l'ID progetto del cluster.ARTIFACT_PROJECT_ID
: l'ID del progetto che contiene il repository Artifact Registry.CLUSTER_PROJECT_ID
: l'ID progetto che esegue i cluster GKE.Crea il file YAML dei criteri della piattaforma:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - imageFreshnessCheck: maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS displayName: CHECK_DISPLAY_NAME displayName: CHECK_SET_DISPLAY_NAME EOF
Sostituisci quanto segue:
MAX_UPLOAD_AGE_DAYS
: il tempo massimo trascorso dall'upload dell'immagine nel registro, in giorni.CHECK_SET_DISPLAY_NAME
: un nome visualizzato facoltativo a tua scelta per il set di controlliCHECK_DISPLAY_NAME
: un nome visualizzato facoltativo a tua scelta per il controllo
Crea la policy della piattaforma:
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 di criteri.
- 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
- 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:
CLUSTER_NAME
: un nome del cluster.LOCATION
: la posizione, ad esempious-central1
oasia-south1
.POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviata la policy.POLICY_ID
: l'ID policy.CLUSTER_PROJECT_ID
: l'ID progetto del cluster.CLUSTER_NAME
: un nome del cluster.LOCATION
: la posizione, ad esempious-central1
oasia-south1
.POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviata la policy.POLICY_ID
: l'ID policy.CLUSTER_PROJECT_ID
: l'ID progetto del cluster.CLUSTER_NAME
: il nome del clusterLOCATION
: la posizione, ad esempious-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviata la policyPOLICY_ID
: l'ID criterioCLUSTER_PROJECT_ID
: l'ID progetto del clusterCLUSTER_NAME
: un nome del clusterLOCATION
: la posizione, ad esempious-central1
oasia-south1
POLICY_PROJECT_ID
: l'ID del progetto in cui è archiviata la policyPOLICY_ID
: l'ID criterioCLUSTER_PROJECT_ID
: l'ID progetto del clusterImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
CLUSTER_NAME
: il nome del clusterLOCATION
: la posizione del clusterCLUSTER_PROJECT_ID
: l'ID progetto del clusterCLUSTER_NAME
: il nome del clusterLOCATION
: la posizione del clusterCLUSTER_PROJECT_ID
: l'ID progetto del clusterPOLICY_ID
: l'ID della policyPOLICY_PROJECT_ID
: l'ID progetto della policy- Utilizzare il controllo dell'aggiornamento delle immagini
- Utilizzare il semplice controllo dell'attestazione della firma
- Utilizzare il controllo della firma Sigstore
- Utilizzare il controllo SLSA
- Utilizzare il controllo della directory attendibile
- Utilizzare il controllo delle vulnerabilità
- Visualizza i log delle conversioni
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 correttamente i ruoli quando lo attivi. Se esegui i prodotti in progetti diversi, devi impostare i ruoli come descritto in questa sezione.
Per garantire che l'agente di servizio di autorizzazione binaria del progetto di policy disponga delle autorizzazioni necessarie per valutare il controllo della freschezza dell'immagine CV, chiedi all'amministratore di concedere all'agente di servizio di autorizzazione binaria del progetto di policy i seguenti ruoli IAM:
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
L'amministratore potrebbe anche essere in grado di concedere all'agente di servizio di Binary Authorization del progetto delle norme le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
Concedi ruoli utilizzando gcloud CLI
Per assicurarti che l'agente di servizio di Binary Authorization in ogni progetto disponga delle autorizzazioni necessarie per valutare questo controllo, concedi all'agente di servizio di Autorizzazione binaria in ogni progetto i seguenti ruoli IAM.
Il progetto del cluster è diverso dal progetto del criterio
Concedi al service agent di Autorizzazione binaria nel progetto cluster il ruolo
Binary Authorization Policy Evaluator
(roles/binaryauthorization.policyEvaluator
)
nel progetto policy.
gcloud projects add-iam-policy-bindingPOLICY_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/binaryauthorization.policyEvaluator
Sostituisci quanto segue:
Progetto delle norme diverso dal progetto dell'artefatto
Concedi all'agente di servizio Autorizzazione binaria nel progetto delle policy il ruolo
Lettore Artifact Registry
(roles/artifactregistry.reader
) nel progetto degli artefatti.
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describePOLICY_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
Sostituisci ARTIFACT_PROJECT_ID
con l'ID del progetto che contiene il tuo repository Artifact Registry.
Progetto cluster diverso dal progetto artefatto
Concedi all'agente di servizio Autorizzazione binaria nel progetto cluster il ruolo
Lettore Artifact Registry
(roles/artifactregistry.reader
) nel progetto artefatto.
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
Sostituisci quanto segue:
Crea una policy della piattaforma
Per creare una policy della piattaforma CV con il controllo della freschezza delle immagini, segui questi passaggi:
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 su controlli.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
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 e il monitoraggio CV
In questa sezione, creerai un cluster che utilizza sia l'applicazione dei criteri project-singleton sia il monitoraggio CV con criteri della piattaforma basati su controlli:
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
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 CV
In questa sezione, aggiornerai un cluster in modo che utilizzi il monitoraggio CV solo con i criteri della piattaforma basati su controlli. Se il cluster ha già l'applicazione dei criteri project-singleton abilitata, l'esecuzione di questo comando la disabilita. Ti consigliamo invece di aggiornare il cluster con l'applicazione e il monitoraggio delle vulnerabilità e delle esposizioni comuni abilitati.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
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 e il monitoraggio CV
In questa sezione, aggiornerai un cluster in modo che utilizzi sia l'applicazione dei criteri singleton del progetto sia il monitoraggio delle vulnerabilità comuni con criteri della piattaforma basati su controlli.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
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
Visualizzare i log per le voci CV
Puoi cercare le voci di Cloud Logging per trovare errori di configurazione di CV e violazioni della convalida delle norme della piattaforma CV.
CV registra errori e violazioni in Cloud Logging entro 24 ore. Di solito puoi visualizzare le voci entro poche ore.
Visualizzare i log degli errori di configurazione di CV
Per visualizzare i log degli errori di configurazione di 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 viene 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"
}
Visualizzare le violazioni della convalida delle norme della piattaforma CV
Se nessuna immagine viola le norme della piattaforma che hai attivato, nei log non vengono visualizzate voci.
Per visualizzare le voci di log CV degli 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 controllo
I log di CV controllano le informazioni sulle violazioni per checkResults
. Nella voce, il valore checkType
indica il controllo. I valori per ogni controllo sono
i seguenti:
Log di esempio
La seguente voce di log CV Logging 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 eseguire la pulizia del monitoraggio delle conversioni che hai configurato in precedenza in questa guida.
Puoi disattivare il monitoraggio CV o sia Autorizzazione binaria che CV nel tuo cluster.
Disabilita Autorizzazione binaria in un cluster
Per disattivare l'applicazione di CV e 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:
Disabilita il monitoraggio delle policy basato sui controlli in un cluster
Per disabilitare CV con criteri basati su controlli nel cluster e riattivare l'applicazione utilizzando 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:
Tieni presente che --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
è
equivalente al flag precedente --enable-binauthz
.
Elimina la policy
Per eliminare la policy, esegui questo comando. Non è necessario eliminare la policy della piattaforma basata su controlli per disattivare il controllo delle policy basato su controlli.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Sostituisci quanto segue: