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 piano di controllo. Questa guida è rivolta a un team di sicurezza che monitora i log del piano di controllo e vuole verificare quanto segue:
- La VM del piano di controllo è stata avviata con firmware autentico e altro software di avvio che è stato verificato tramite crittografia dall'avvio protetto e dal monitoraggio dell'integrità.
- La VM del piano di controllo è stata avviata da un'immagine del sistema operativo GKE autentica.
Puoi anche eseguire questa verifica per le immagini del sistema operativo e l'integrità dell'avvio dei tuoi nodi worker.
Questa pagina descrive una parte di un insieme di funzionalità facoltative del piano di controllo in GKE che ti consente di eseguire attività come verificare la posizione di sicurezza del piano di controllo o configurare la crittografia e la firma delle credenziali nel piano di controllo utilizzando le chiavi che gestisci. Per maggiori dettagli, consulta Informazioni sull'autorità del piano di controllo GKE.
Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al control plane gestito. Questa pagina descrive funzionalità facoltative che ti offrono maggiore visibilità o controllo sul piano di controllo di GKE.
Informazioni sulla verifica dell'integrità delle VM
Per impostazione predefinita, tutte le istanze del piano di controllo GKE sono VM schermate, ovvero VM rinforzate 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 attivano inoltre il monitoraggio dell'integrità, che convalida la sequenza di avvio di ogni Shielded VM rispetto a una sequenza di avvio "corretta" di riferimento. Questa convalida restituisce risultati di passaggio o fallimento per ogni fase della sequenza di avvio e li aggiunge 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: dal momento dell'avvio del firmware UEFI fino a quando il bootloader non prende il controllo. Aggiunto ai log della VM come
earlyBootReportEvent
. - Sequenza di avvio tardiva: dal momento in cui il bootloader prende il controllo fino al momento in cui lo assume il kernel del sistema operativo. Aggiunto ai log della VM come
lateBootReportEvent
.
GKE aggiunge anche i log di creazione delle VM del piano di controllo al logging. Questi log contengono metadati che identificano la macchina e includono dettagli sull'immagine VM e sulla sequenza di avvio. Google Cloud pubblica una attestazione di riepilogo della verifica (VSA) per ogni immagine VM del piano di controllo GKE nel repository gke-vsa su GitHub. La VSA utilizza il framework in-toto per le attestazioni. Puoi convalidare i log delle VM del piano di controllo per i tuoi cluster in base alle VSA corrispondenti per verificare che i nodi del piano di controllo siano stati avviati come previsto.
L'esecuzione di queste convalide può aiutarti a raggiungere i seguenti obiettivi:
- Assicurati che il software nel piano di controllo sia protetto dall'avvio protetto e dal monitoraggio dell'integrità, corrisponda al codice sorgente previsto e sia esattamente uguale all'immagine utilizzata da altri clienti Google Cloud.
- Aumenta la tua fiducia in come GKE protegge il piano di controllo.
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à,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
-
Enable the Cloud Logging API.
- Assicurati di avere già un cluster GKE in modalità 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 piano di controllo, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea e interagisci con i cluster:
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 Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Controlla se ci sono fasi della sequenza di avvio non riuscite
Il monitoraggio dell'integrità aggiunge un log a Logging se una VM del piano di controllo non va a buon fine o completa correttamente una fase della sequenza di avvio. Per visualizzare gli eventi di avvio non riusciti, esegui i seguenti comandi:
Nella console Google Cloud, 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 controllare la presenza di eventi di avvio riusciti sostituendo
false
contrue
in questa query.Fai clic su Esegui query. Se non visualizzi risultati, le VM del piano di controllo hanno superato tutti i controlli di monitoraggio dell'integrità. Se viene visualizzato un output, vai al passaggio successivo per identificare il cluster corrispondente.
Nel log dell'integrità del boot non riuscito, copia il valore nel
resource.labels.instance_id
campo.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 delinstance_id
campo del passaggio precedente.Fai clic su Esegui query. Il valore nel
protoPayload.metadata.parentResource.parentResourceId
campo è 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 organizzazione Google 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 contiene i seguenti campi:
PROJECT_ID
: il tuo ID progetto Google Cloud.LOCATION
: la posizione del cluster.CLUSTER_NAME
: il nome del cluster.
Trova e ispeziona i log della VM del control plane
I log di creazione delle VM Compute Engine corrispondenti ai cluster GKE vengono archiviati nel _Default
bucket dei log.
Per trovare i log di creazione delle VM del piano di controllo del cluster e recuperare questi metadati:
Nella console Google Cloud, 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 riportati nella 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 della 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à di Google Cloud che ospita le VM del piano di controllo 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 della VM.
Trova e verifica il VSA per le immagini VM del piano di controllo
In questa sezione troverai il VSA corrispondente all'immagine VM del tuo piano di controllo nel repository gke-vsa su GitHub. Poi 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 piano di controllo:
- L'ID immagine VM
- Il numero del progetto di proprietà di Google Cloud che 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 della VM della sezione precedente. Ad esempio,gke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: l'ID immagine VM, ovvero il valore del campoattachedDisks.sourceImageId
nell'audit log della VM della sezione precedente. Ad esempio,9046093115864736653
.
Per trovare e verificare il VSA quando conosci il nome del file VSA, svolgi i seguenti passaggi:
- Apri il
gke-vsa
repository GitHub. - 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 il 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