Verifica l'integrità della VM del control plane GKE


Questa guida descrive come verificare l'integrità di Compute Engine immagine della macchina virtuale (VM) utilizzata da Google Kubernetes Engine (GKE) per il controllo del piano di controllo. Questa guida è destinata a un team di sicurezza che monitora il controllo log del piano 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 avviata da un'immagine del sistema operativo GKE autentica.

Puoi anche eseguire questa verifica per le immagini del sistema operativo e l'integrità di avvio dai nodi worker.

In questa pagina viene descritta una parte di un insieme di funzionalità facoltative del piano di controllo in GKE, che consente di eseguire attività come la verifica della security posture del piano di controllo o configurando la crittografia e la firma delle credenziali nel piano di controllo utilizzando le chiavi che gestisci tu. Per maggiori dettagli, vedi Informazioni sull'autorità per il piano di controllo.

Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al control plane gestito. In questa pagina vengono descritte le funzionalità facoltative che offrono maggiore visibilità o controllo sulle il piano di controllo.

Informazioni sulla verifica dell'integrità della 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 VM schermata 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 anticipato: dall'avvio del firmware UEFI fino all'avvio il bootloader prende il controllo. Aggiunto ai log della VM come earlyBootReportEvent.
  • Sequenza di avvio finale: da quando il bootloader prende il controllo fino alla fase 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 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 un attestazione di riepilogo della verifica (VSA) per ogni immagine VM del piano di controllo GKE 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 attività:

  • Attiva l'API Google Kubernetes Engine.
  • Abilita 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, scarica la versione più recente eseguendo gcloud components update.
  • Enable the Cloud Logging API.

    Enable the 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:

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 la ruoli o altri ruoli predefiniti ruoli.

Verifica la presenza di fasi della sequenza di avvio non riuscite

Il monitoraggio dell'integrità aggiunge un log a Logging se un piano di controllo La VM non va a buon fine o completa una fase della sequenza di avvio. Per visualizzare gli eventi di avvio non riusciti, esegui i seguenti comandi:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Nel campo Query, specifica la seguente query:

    jsonPayload.@type="type.googleapis.com/cloud_integrity.IntegrityEvent"
    jsonPayload.earlyBootReportEvent.policyEvaluationPassed="false" OR jsonPayload.lateBootReportEvent.policyEvaluationPassed="false"
    metadata.isKubernetesControlPlaneVM = true
    

    Puoi anche controllare la presenza di eventi di avvio riusciti sostituendo false con true in questa query.

  3. 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.

  4. Nel log di integrità di avvio non riuscito, copia il valore nel campo Campo resource.labels.instance_id.

  5. 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 campo instance_id del passaggio precedente.

  6. Fai clic su Esegui query. Il valore nel protoPayload.metadata.parentResource.parentResourceId campo è l'ID del cluster GKE.

  7. 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 del tuo dell'organizzazione Google Cloud.
    • CLUSTER_ID: il valore del campo protoPayload.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: l'ID del tuo progetto Google Cloud.
    • LOCATION: la località del cluster.
    • CLUSTER_NAME: il nome del cluster.

Trova e ispeziona i log delle VM del piano di controllo

I log di creazione delle VM di Compute Engine che corrispondono I cluster GKE vengono archiviati _Default bucket di log. Per trovare i log di creazione per le VM del piano di controllo del cluster e recuperare questo procedi nel seguente modo:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Nel campo Query specifica la seguente query:

    resource.type="gce_instance"
    protoPayload.methodName="v1.compute.instances.insert"
    jsonPayload.metadata.isKubernetesControlPlaneVM="true"
    
  3. Fai clic su Esegui query. Se non vedi risultati, verifica di soddisfare tutti i requisiti i requisiti della sezione Prima di iniziare.

  4. Nei risultati della query, controlla il campo metadata. L'output è simile a le seguenti:

    # 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 per la 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, dove PROJECT_NUMBER è il numero del progetto di proprietà di Google Cloud che ospita le VM del piano di controllo e IMAGE_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 la VSA per le immagini VM del piano di controllo

In questa sezione troverai il VSA corrispondente al tuo gruppo di controllo nel repository gke-vsa su GitHub. Poi userai uno strumento denominato slsa-verifier fornito da Framework Supply chain Levels for Software Artifacts (SLSA) per verificare il 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 utilizzato per avviare la VM

Il file corrispondente alla VM del piano di controllo ha il seguente nome file formato:

IMAGE_NAME:IMAGE_ID.intoto.jsonl

Sostituisci quanto segue:

  • IMAGE_NAME: il nome dell'immagine VM, ovvero la stringa dopo /images/ nel campo attachedDisks.sourceImage dell'audit log della VM dalla sezione precedente. Ad esempio: gke-1302-gke1627000-cos-113-18244-85-49-c-pre.
  • IMAGE_ID: l'ID immagine VM, ovvero il valore dell'attributo Campo attachedDisks.sourceImageId nell'audit log delle VM dalla precedente . Ad esempio: 9046093115864736653.

Per trovare e verificare il VSA quando conosci il nome del file VSA, svolgi i seguenti passaggi:

  1. Apri il gke-vsa repository GitHub.
  2. Nel file "gke-master-images" individua il file che corrisponde alla tua directory di directory, un'immagine VM. Ad esempio: https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl
  3. Scarica il file VSA.
  4. Installa lo strumento slsa-verifier.
  5. Salva la chiave pubblica per la verifica della VSA in un file denominato vsa_signing_public_key:

    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeGa6ZCZn0q6WpaUwJrSk+PPYEsca
    3Xkk3UrxvbQtoZzTmq0zIYq+4QQl0YBedSyy+XcwAMaUWTouTrB05WhYtg==
    -----END PUBLIC KEY-----
    

  6. 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 che hai scaricato.
    • IMAGE_NAME: il nome dell'immagine VM, ad esempio gke-1302-gke1627000-cos-113-18244-85-49-c-pre.
    • IMAGE_ID: l'ID immagine VM, ad esempio 9046093115864736653.

    Se la VSA supera i controlli di verifica, l'output è seguenti:

    Verifying VSA: PASSED
    PASSED: SLSA verification passed
    

Passaggi successivi