Questo documento spiega come attivare l'avvio protetto o un Virtual Trusted Platform Module (vTPM) su un'istanza di macchina virtuale (VM) in Google Distributed Cloud (GDC) con air gap.
Questo documento è rivolto agli sviluppatori dei gruppi di amministratori della piattaforma o di operatori di applicazioni che configurano l'avvio protetto e i vTPM sulle VM in un ambiente GDC. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC con air gap.
Informazioni su Avvio protetto
L'avvio protetto è una funzionalità che garantisce che il sistema esegua solo software autentici verificando la firma digitale di tutti i componenti di avvio e interrompendo il processo se la verifica non va a buon fine. Utilizza il firmware Unified Extensible Firmware Interface (UEFI) per gestire i certificati e le chiavi utilizzati dai produttori per firmare il firmware di sistema, i boot loader e i file binari caricati.
A ogni avvio, il firmware UEFI verifica la firma digitale di ogni componente
confrontandola con le chiavi approvate archiviate e blocca i componenti non firmati o firmati in modo errato.
Per attivare l'avvio protetto nell'istanza VM, devi impostare il campo shieldConfig.bootType della VM su uefi e shieldConfig.enableSecureBoot su true.
Per visualizzare la documentazione ufficiale di UEFI, consulta https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf.
Informazioni sui Virtual Trusted Platform Module
Un vTPM è un chip di computer virtuale specializzato che protegge le chiavi e i certificati utilizzati per autenticare l'accesso al sistema. Per saperne di più sui vTPM, consulta https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/.
Puoi anche utilizzare un vTPM per proteggere i secret tramite schermatura o sigillatura. Per saperne di più sullo spazio di archiviazione protetto, consulta https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE. Consulta il progetto Go-TPM su GitHub (https://github.com/google/go-tpm) per esempi di linguaggio Go che illustrano come utilizzare un vTPM a questo scopo.
Prima di iniziare
Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato e configurato l'interfaccia a riga di comando gdcloud.
Tutti i comandi per Distributed Cloud utilizzano l'interfaccia a riga di comando gdcloud o kubectl e richiedono un ambiente del sistema operativo (OS).
Ottieni il percorso del file kubeconfig
Per eseguire i comandi sul server dell'API di gestione, assicurati di disporre delle seguenti risorse:
Accedi e genera il file kubeconfig per il server API di gestione, se non ne hai uno.
Utilizza il percorso del file kubeconfig del server API di gestione per sostituire
MANAGEMENT_API_SERVERin queste istruzioni.
Richiedi ruoli IAM
Per ottenere le autorizzazioni necessarie per abilitare l'avvio protetto o vTPM sulla tua VM, chiedi all'amministratore del progetto IAM di concederti il ruolo Amministratore progetto macchina virtuale (project-vm-admin).
Tutti i ruoli delle VM devono essere associati allo spazio dei nomi del progetto in cui si trova la VM. Segui i passaggi per verificare il tuo accesso.
Abilita avvio protetto
Abilita l'avvio protetto per una VM. Segui queste istruzioni per una VM denominata
VM_NAME nello spazio dei nomi del progetto
(PROJECT_NAMESPACE).
Arresta la VM se è in esecuzione prima di applicare la patch. Se provi ad applicare la patch a
shieldConfigmentre la VM è in esecuzione, l'API restituisce un erroreForbidden:Changes to shieldConfig are not allowed while the VM is running. Per istruzioni, vedi Arresta una VM.Aggiorna la risorsa personalizzata della VM per attivare l'avvio protetto:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ patch virtualmachines.virtualmachine.gdc.goog VM_NAME \ --type merge --patch $' spec: shieldConfig: bootType: uefi enableSecureBoot: true 'Sostituisci le seguenti variabili:
MANAGEMENT_API_SERVER: il file kubeconfig per il server API di gestione.PROJECT_NAMESPACE: lo spazio dei nomi del progetto in cui si trova la VM.VM_NAME: il nome della VM.
Dopo aver applicato la patch, avvia la VM seguendo le istruzioni per avviare una VM.
Verifica di aver attivato l'avvio protetto. Stabilisci una connessione SSH alla VM ed esegui questo comando:
mokutil --sb-stateSe hai attivato correttamente l'avvio protetto, il comando restituisce
SecureBoot enabled.Se lo strumento
mokutilsegnala che non hai attivato l'avvio protetto, segui i passaggi descritti nella sezione Risolvi i problemi di configurazione dell'avvio protetto.
Risolvi i problemi di configurazione di Avvio protetto
Apri la risorsa personalizzata della VM in un editor:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAMESostituisci le seguenti variabili:
MANAGEMENT_API_SERVER: il file kubeconfig per il server API di gestione.PROJECT_NAMESPACE: lo spazio dei nomi del progetto in cui si trova la VM.VM_NAME: il nome della VM.
Cerca i campi o i valori mancanti, come mostrato nel campo
specin Abilita l'avvio protetto. Questi sono obbligatori.Se mancano o sono errati, modifica
specper aggiungere i campi mancanti e correggere i valori errati.Salva il file.
Segui i passaggi descritti in Riavvia la VM.
Se i passaggi precedenti non risolvono il problema, consulta la documentazione corrispondente al sistema operativo (OS) della VM per verificare che la versione del sistema operativo supporti l'avvio protetto.
Abilita vTPM
Abilita vTPM per una VM. Segui queste istruzioni per una VM denominata
VM_NAME nello spazio dei nomi
del progetto (PROJECT_NAMESPACE).
Arresta la VM se è in esecuzione prima di applicare la patch. Se provi ad applicare la patch a
shieldConfigmentre la VM è in esecuzione, l'API restituisce un erroreForbidden:Changes to shieldConfig are not allowed while the VM is running. Per istruzioni, vedi Arresta una VM.Aggiorna la risorsa personalizzata della VM per attivare vTPM:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ patch virtualmachines.virtualmachine.gdc.goog VM_NAME \ --type merge --patch $' spec: shieldConfig: enableVtpm: true 'Sostituisci le seguenti variabili:
MANAGEMENT_API_SERVER: il file kubeconfig per il server API di gestione.PROJECT_NAMESPACE: lo spazio dei nomi del progetto in cui si trova la VM.VM_NAME: il nome della VM.
Dopo aver applicato la patch, avvia la VM seguendo le istruzioni per avviare una VM.
Verifica di aver attivato vTPM. Stabilisci una connessione SSH alla VM ed esegui questo comando:
dmesg | grep -i tpmSe hai attivato correttamente vTPM, il comando restituisce il modulo TPM come parte delle tabelle ACPI. L'output è simile al seguente:
[ 7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)Se
ACPI tablesnon mostra il modulo TPM, segui i passaggi nella sezione Risolvi i problemi di configurazione di vTPM.
Risolvi i problemi di configurazione di vTPM
Apri la risorsa personalizzata della VM in un editor:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAMESostituisci le seguenti variabili:
MANAGEMENT_API_SERVER: il file kubeconfig per il server API di gestione.PROJECT_NAMESPACE: lo spazio dei nomi del progetto in cui si trova la VM.VM_NAME: il nome della VM.
Cerca i campi o i valori mancanti, come mostrato nel campo
specin Attiva vTPM. Questi sono obbligatori.Se mancano o sono errati, modifica
specper aggiungere i campi mancanti e correggere i valori errati.Salva il file.
Segui i passaggi descritti in Riavvia la VM.
Se i passaggi precedenti non risolvono il problema, consulta la documentazione corrispondente al sistema operativo (OS) della VM per verificare che la versione del sistema operativo supporti vTPM.