Questa guida descrive come verificare l'integrità dell'immagine della macchina virtuale (VM) Compute Engine utilizzata da Google Kubernetes Engine (GKE) per le VM del control plane. Questa guida è destinata a un team di sicurezza che monitora i log del control plane e vuole verificare quanto segue:
- La VM del control plane è stata avviata con firmware autentico e altro software di avvio verificato crittograficamente tramite l'avvio protetto e il monitoraggio dell'integrità.
- La VM del control plane è stata avviata da un'immagine GKE OS autentica.
Puoi anche eseguire questa verifica per le immagini del sistema operativo e l'integrità di avvio dei nodi worker.
Questa pagina descrive una parte di un insieme di funzionalità opzionali del control plane in GKE che ti consente di eseguire attività come la verifica del livello di sicurezza del control plane o la configurazione della crittografia e della firma delle credenziali nel control plane utilizzando chiavi che gestisci. Per maggiori dettagli, consulta l'articolo Informazioni sull'autorità del piano di controllo GKE.
Per impostazione predefinita, Trusted Cloud applica varie misure di sicurezza al piano di controllo gestito. Questa pagina descrive le funzionalità facoltative che offrono maggiore visibilità o controllo sul piano di controllo GKE.
Informazioni sulla verifica dell'integrità della VM
Per impostazione predefinita, tutte le istanze del control plane GKE sono Shielded VM, ovvero VM protette che utilizzano funzionalità di sicurezza come l'avvio protetto e con misurazioni, un Trusted Platform Module virtuale (vTPM) e il firmware UEFI. Tutti i nodi GKE abilitano anche il monitoraggio dell'integrità, che convalida la sequenza di avvio di ogni Shielded VM rispetto a una sequenza di avvio "buona" di base. Questa convalida restituisce risultati positivi o negativi per ogni fase della sequenza di avvio e aggiunge questi risultati a Cloud Logging. Il monitoraggio dell'integrità è abilitato per impostazione predefinita in tutti i cluster GKE e convalida le seguenti fasi:
- Sequenza di avvio iniziale: da quando inizia il firmware UEFI fino a quando il bootloader prende il controllo. Aggiunto ai log della VM come
earlyBootReportEvent
. - Sequenza di avvio finale: da quando il bootloader prende il controllo fino a quando
il kernel del sistema operativo prende il controllo. Aggiunto ai log della VM come
lateBootReportEvent
.
GKE aggiunge anche i log di creazione delle VM del control plane a Logging. Questi log contengono metadati che identificano la macchina e includono dettagli sull'immagine VM e sulla sequenza di avvio.Trusted Cloud pubblica un'attestazione di riepilogo della verifica (VSA) per ogni immagine VM del control plane GKE nel repository gke-vsa su GitHub. Il VSA utilizza il framework in toto per le attestazioni. Puoi convalidare i log delle VM del control plane per i tuoi cluster rispetto alle VSA corrispondenti per verificare che i nodi del control plane siano stati avviati come previsto.
L'esecuzione di queste convalide può aiutarti a raggiungere i seguenti obiettivi:
- Assicurati che il software sul control plane sia protetto dall'avvio protetto e dal monitoraggio dell'integrità, corrisponda al codice sorgente previsto e sia esattamente lo stesso dell'immagine utilizzata da altri Trusted Cloud clienti.
- Aumenta la tua fiducia nel modo in cui GKE protegge il control plane.
Prezzi
Questa funzionalità è offerta senza costi aggiuntivi in GKE.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione
eseguendo
gcloud components update
.
-
Enable the Cloud Logging API.
- Assicurati di avere già un cluster in modalità GKE Autopilot o in modalità Standard che esegue la versione 1.29 o successive.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per verificare l'integrità della VM del control plane, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea cluster e interagisci con loro:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin
) -
Accedi ed elabora i log:
Visualizzatore log (
roles/logging.viewer
)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Controllare le fasi della sequenza di avvio non riuscite
Il monitoraggio dell'integrità aggiunge un log a Logging se una VM del control plane non riesce a completare una fase della sequenza di avvio o la completa correttamente. Per visualizzare gli eventi di avvio non riusciti, esegui questi comandi:
Nella Trusted Cloud console, vai alla pagina Esplora log:
Nel campo Query, specifica la seguente query:
jsonPayload.@type="type.googleapis.com/cloud_integrity.IntegrityEvent" jsonPayload.earlyBootReportEvent.policyEvaluationPassed="false" OR jsonPayload.lateBootReportEvent.policyEvaluationPassed="false" jsonPayload.metadata.isKubernetesControlPlaneVM="true"
Puoi anche verificare la presenza di eventi di avvio riusciti sostituendo
false
contrue
in questa query.Fai clic su Esegui query. Se non vedi risultati, significa che le VM del control plane hanno superato tutti i controlli di monitoraggio dell'integrità. Se visualizzi un output, vai al passaggio successivo per identificare il cluster corrispondente.
Nel log di integrità dell'avvio non riuscito, copia il valore nel campo
resource.labels.instance_id
.Nel campo Query, specifica la seguente query:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.metadata.isKubernetesControlPlaneVM="true" resource.labels.instance_id="INSTANCE_ID" protoPayload.methodName="v1.compute.instances.insert"
Sostituisci
INSTANCE_ID
con il valore del campoinstance_id
del passaggio precedente.Fai clic su Esegui query. Il valore nel campo
protoPayload.metadata.parentResource.parentResourceId
è l'ID del cluster GKE.Trova il nome del cluster GKE:
gcloud asset query \ --organization=ORGANIZATION_ID \ --statement="SELECT name FROM container_googleapis_com_Cluster WHERE resource.data.id='CLUSTER_ID';"
Sostituisci quanto segue:
ORGANIZATION_ID
: l'ID numerico della tua organizzazioneTrusted Cloud .CLUSTER_ID
: il valore del campoprotoPayload.metadata.parentResource.parentResourceId
del passaggio precedente.
L'output è simile al seguente:
# lines omitted for clarity //container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME
Questo output include i seguenti campi:
PROJECT_ID
: il tuo ID progetto Trusted Cloud .LOCATION
: la posizione del cluster.CLUSTER_NAME
: il nome del cluster.
Trovare e ispezionare i log della VM del control plane
I log di creazione delle VM Compute Engine corrispondenti ai cluster GKE vengono archiviati nel bucket di log _Default
.
Per trovare i log di creazione delle VM del piano di controllo del cluster e recuperare questi
metadati, procedi nel seguente modo:
Nella Trusted Cloud console, vai alla pagina Esplora log:
Nel campo Query, specifica la seguente query:
resource.type="gce_instance" protoPayload.methodName="v1.compute.instances.insert" protoPayload.metadata.isKubernetesControlPlaneVM="true"
Fai clic su Esegui query. Se non vedi risultati, verifica di soddisfare tutti i requisiti della sezione Prima di iniziare.
Nei risultati della query, controlla il campo
metadata
. L'output è simile al seguente:# fields omitted for clarity "metadata": { "usedResources": { "attachedDisks": [ { "sourceImageId": "9046093115864736653", "sourceImage": "https://www.googleapis.com/compute/v1/projects/1234567890/global/images/gke-1302-gke1627000-cos-113-18244-85-49-c-pre", "isBootDisk": true } # fields omitted for clarity
Il campo
metadata
include le seguenti informazioni:usedResources
: l'elenco delle risorse utilizzate per creare la VM.attachedDisks
: il disco di avvio della VM.sourceImageId
: l'ID univoco dell'immagine VM.sourceImage
: l'URL dell'immagine VM di origine. La sintassi del valore in questo campo èhttps://www.googleapis.com/compute/v1/projects/PROJECT_NUMBER/global/images/IMAGE_NAME
, dovePROJECT_NUMBER
è il numero del progetto di proprietà diTrusted Cloudche ospita le VM del control plane eIMAGE_NAME
è il nome dell'immagine utilizzata per avviare la VM.isBootDisk
: un identificatore booleano che indica se questo disco è stato utilizzato come disco di avvio per la VM.
Trovare e verificare la VSA per le immagini VM del control plane
In questa sezione trovi il VSA corrispondente all'immagine VM del piano di controllo
nel repository gke-vsa su GitHub. Successivamente, utilizzi uno strumento denominato
slsa-verifier
fornito dal
framework Supply chain Levels for Software Artifacts (SLSA)
per verificare la VSA. Sono necessari i seguenti dati dal log di creazione della VM del control plane:
- L'ID immagine VM
- Il numero di progetto del progetto di proprietà di Trusted Cloudche ospita le VM
- Il nome dell'immagine del sistema operativo utilizzata per avviare la VM
Il file corrispondente alla VM del piano di controllo ha il seguente formato del nome file:
IMAGE_NAME:IMAGE_ID.intoto.jsonl
Sostituisci quanto segue:
IMAGE_NAME
: il nome dell'immagine VM, ovvero la stringa dopo/images/
nel campoattachedDisks.sourceImage
nel log di controllo VM della sezione precedente. Ad esempiogke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: l'ID immagine VM, ovvero il valore del campoattachedDisks.sourceImageId
nel log di controllo VM della sezione precedente. Ad esempio9046093115864736653
.
Per trovare e verificare il VSA quando conosci il nome del file VSA, segui questa procedura:
- Apri il
repository GitHub
gke-vsa
. - Nella directory "gke-master-images", individua il file corrispondente all'immagine VM. Ad esempio,
https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl
- Scarica il file VSA.
- Installa lo strumento
slsa-verifier
. Salva la chiave pubblica per la verifica della VSA in un file denominato
vsa_signing_public_key
:Verifica la VSA:
slsa-verifier verify-vsa \ --attestation-path=PATH_TO_VSA_FILE \ --resource-uri=gce_image://gke-master-images:IMAGE_NAME \ --subject-digest=gce_image_id:IMAGE_ID\ --verifier-id=https://bcid.corp.google.com/verifier/bcid_package_enforcer/v0.1 \ --verified-level=BCID_L1 \ --verified-level=SLSA_BUILD_LEVEL_2 \ --public-key-path=PATH_TO_PUBLIC_KEY_FILE \ --public-key-id=keystore://76574:prod:vsa_signing_public_key
Sostituisci quanto segue:
PATH_TO_VSA_FILE
: il percorso del file VSA che hai scaricato.IMAGE_NAME
: il nome dell'immagine VM, ad esempiogke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: l'ID immagine VM, ad esempio9046093115864736653
.
Se il VSA supera i controlli di verifica, l'output è il seguente:
Verifying VSA: PASSED PASSED: SLSA verification passed