Creazione di immagini schermate personalizzate

Questo argomento descrive come preparare il disco, generare certificati di sicurezza e abilitare le funzionalità del sistema operativo necessarie per creare un'immagine schermata personalizzata.

Per impostazione predefinita, Shielded VM supporta Container-Optimized OS, diverse distribuzioni di Linux e più versioni di Windows Server. Tuttavia, se richiedi immagini personalizzate per la tua applicazione, puoi comunque sfruttare la Shielded VM.

Preparazione del disco

La Shielded VM si basa su Unified Extensible Firmware Interface (UEFI) per supportare funzionalità come Avvio protetto. La Shielded VM richiede uno schema TAB (Partition Partition); il record di avvio master (MBR) non è supportato.

Il disco deve avere almeno due partizioni:

  • EFI System Partition (ESP): 100 megabyte (MB) sono sufficienti per questa partizione ed è solo un suggerimento. Se necessario, puoi creare una partizione più grande. L'unico requisito per l'ESP è che deve essere formattato con un file system FAT (File allocazioni Table).
  • Partizione sistema operativo:il resto del disco. Questa partizione contiene il sistema operativo di avvio (Linux o Windows). Non sono previste limitazioni per le dimensioni di questa partizione.

Se necessario, puoi creare altre partizioni di dati.

Copia del sistema operativo nella partizione del sistema operativo

Dopo aver formattato e partizionato correttamente il disco, copia i file del sistema operativo nella partizione del sistema operativo. Il sistema operativo dispone di un bootloader che deve trovarsi in un percorso valido sull'ESP, come specificato nella specifica UEFI: \EFI\Boot\bootx64.efi. Tieni presente che potrebbe essere necessario copiare il bootloader del sistema operativo nella posizione specificata.

Per Windows esiste un comando chiamato bcdboot che può essere utilizzato per copiare il bootloader del sistema operativo nella posizione corretta, oltre ad altre azioni richieste da Windows (ad esempio, la copia dell'archivio BCD). Per ulteriori informazioni, consulta BCDBoot Command-Line Options (Opzioni riga di comando BCDBoot) su Microsoft Hardware Dev Center.

Quando utilizzi immagini Shielded VM, puoi anche sfruttare due funzionalità di sicurezza aggiuntive: il Virtual Trusted Platform Module (vTPM) e il monitoraggio dell'integrità. Le seguenti sezioni descrivono i vantaggi di queste funzionalità e i requisiti del sistema operativo.

Virtual Trusted Platform Module (vTPM)

Un modulo Trusted Platform è un dispositivo specializzato che protegge oggetti, come chiavi e certificati, che utilizzi per autenticare l'accesso al sistema. Nelle immagini Shielded VM, vengono utilizzate versioni virtualizzate dei dispositivi TPM per abilitare l'avvio con misurazioni. In breve, l'avvio con misurazioni garantisce l'integrità del percorso di carico critico dei driver di avvio e del kernel. Gli elementi vTPM e Avvio misurato sono trattati in modo più dettagliato nella documentazione relativa alle Shielded VM.

Per usufruire del vTPM e dell'avvio con misurazioni, è necessario un driver. Le versioni minime del sistema operativo con supporto TPM 2.0 sono:

  • Windows Server 2012
  • Linux versione 3.20
  • Red Hat Enterprise Linux 7.3

Monitoraggio dell'integrità

Il monitoraggio dell'integrità consente di comprendere e prendere decisioni sullo stato delle istanze VM. Monitoring utilizza i dati generati dall'avvio misurato per generare rapporti sull'istanza VM. La documentazione di Shielded VM contiene ulteriori informazioni sul monitoraggio dell'integrità e sull'automazione di risposte agli errori di convalida dell'integrità.

Per supportare la funzionalità di monitoraggio dell'integrità della Shielded VM, l'immagine deve produrre indicatori di integrità:

  • Windows genera indicatori di integrità per impostazione predefinita.
  • Linux deve avere installato e abilitato il modulo Integrity Measurement Architecture (IMA). Il modulo deve avere CONFIG_IMA_MEASURE_PCR_IDX impostato su 10. Si tratta del valore predefinito per il modulo IMA.

Importazione dell'immagine disco in Compute Engine

Dopo aver preparato l'immagine, devi caricarla in Compute Engine. Per i passaggi necessari per caricare l'immagine su Google Cloud, consulta la pagina relativa all'importazione delle immagini del disco di avvio in Compute Engine.

Configurazione dei certificati per Avvio protetto

Quando aggiungi un'immagine Shielded VM, a Compute Engine viene passato un insieme di certificati pubblici e database di avvio protetto. Questi file vengono archiviati nelle variabili UEFI corrispondenti e utilizzati per stabilire relazioni di trust tra la piattaforma, il firmware e il sistema operativo. I certificati sono certificati X.509 con codifica DER (Distinguished Encoding Rules). I database possono essere un certificato o un programma binario raw. I valori totali sono quattro:

  • Chiave della piattaforma (pk): una chiave utilizzata per stabilire la relazione di trust tra il proprietario della piattaforma e il firmware. Puoi specificare solo una chiave di piattaforma e deve essere un certificato X.509 valido.
  • Key Exchange Key (kek): una chiave utilizzata per stabilire una relazione di trust tra il firmware e il sistema operativo. Puoi specificare più chiavi per questo valore.
  • Database di chiavi vietate (dbx): un database di certificati che sono stati revocati e comporterà l'interruzione dell'avvio del sistema se viene firmato un file di avvio con uno di questi. Puoi specificare uno o più valori per questo valore.
  • Database di chiavi (db): un database di certificati attendibili che può essere utilizzato per firmare file di avvio. Puoi specificare uno o più valori per questo valore.

La specifica UEFI contiene ulteriori informazioni su questi valori e sul loro funzionamento.

Nell'esempio seguente, OpenSSL viene utilizzato per creare le chiavi e i certificati di avvio protetto.

  • Generare una coppia di chiavi RSA a 2048 bit

      $ openssl genrsa -out secure-boot-key.rsa 2048
    
  • Genera un certificato X.509 autofirmato dalla chiave in formato DER

      $ openssl req -new -x509 -sha256 -subj '/CN=secure-boot' -key secure-boot-key.rsa
      -outform DER -out secure-boot-cert.pem
    

Aggiunta dell'immagine schermata a Google Cloud

Utilizzando l'immagine e i certificati caricati, puoi aggiungere l'immagine a Compute Engine. L'immagine può essere aggiunta utilizzando l'interfaccia a riga di comando di Google Cloud o l'API Compute Engine.

gcloud

Aggiungi l'immagine personalizzata a Compute Engine:

gcloud compute images create [IMAGE_NAME] \
--source-disk [SOURCE_DISK] \
--source-disk-zone [ZONE] \
--platform-key-file=<file.der> \
--key-exchange-key-file=<file.der> \
--signature-database-file=<file.bin>,<file.der> \
--forbidden-database-file=<file.bin> \
--guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"

dove:

  • [IMAGE_NAME] è il nome della nuova immagine.
  • [SOURCE_DISK] è il disco da cui vuoi creare la nuova immagine.
  • [ZONE] è la zona in cui si trova il disco.

L'opzione WINDOWS per guest-os-features è obbligatoria solo se utilizzi un'immagine di Windows. Per ulteriori informazioni sulla creazione di un'immagine, consulta la pagina di riferimento di gcloud create.

API

Segui le istruzioni per creare un'immagine da un disco permanente ma specifica il initial_state_config nel corpo della richiesta.

...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",

"initial_state_config": {
    "pk": {
        "content": [KEY],
        "fileType": [BIN,X509]
    },
    "keks": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbxs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ]
}

Certificati predefiniti

Tieni presente che pk, keks, dbxs e dbs sono campi facoltativi. Se fornisci una configurazione dello stato iniziale, alcuni o tutti questi campi potrebbero non essere impostati. Quando viene creata una nuova istanza dall'immagine, Google Cloud fornisce un valore predefinito per PK, KEK, db e dbx, a meno che non sia stato impostato un valore personalizzato su un campo non impostato. Se non fornisci una configurazione dello stato iniziale (ovvero, la configurazione non è presente, non solo vuota), l'immagine avrà la configurazione dello stato iniziale dell'immagine di origine.

Questi valori predefiniti sono:

  • PK: il certificato associato alla chiave privata predefinita creata da Google.
  • KEK: certificato Microsoft KEK predefinito. Scarica da Microsoft: MicCorKEKCA2011_2011-06-24.crt.
  • dbx: elenco di revoca Microsoft DBX predefinito. Scarica dal forum Unified Extensible Firmware Interface Forum: file di elenco di revoca UEFI
  • db: i seguenti due certificati:
    • Microsoft Windows Production PCA 2011 con un certificato SHA-1 Cert di 58 0a 6f 4c c4 e4 b6 69 b9 eb dc 1b 2b 3e 08 7b 80 d0 67 8d. Scarica da Microsoft: MicWinProPCA2011_2011-10-19.crt.
    • Microsoft Corporation UEFI CA 2011 con un hash di certificato SHA-1 di 46 de f6 3b 5c e6 1c f8 ba 0d e2 e6 63 9c 10 19 d0 ed 14 f3. Scarica da Microsoft: MicCorUEFCA2011_2011-06-27.crt.

Fai attenzione, poiché l'aggiunta di certificati personali sovrascriverà quelli predefiniti anziché unirli a quelli da te forniti.