Questo argomento fornisce una panoramica di Cloud HSM e mostra come creare e utilizzare chiavi di crittografia protette tramite HSM in Cloud Key Management Service.
Che cos'è Cloud HSM?
Cloud HSM è un servizio per moduli di sicurezza hardware (HSM) ospitato nel cloud che consente di ospitare chiavi di crittografia ed eseguire operazioni crittografiche in un cluster di HSM certificati FIPS 140-2 di livello 3. Google gestisce per te il cluster HSM, quindi non devi preoccuparti di clustering, scalabilità o applicazione di patch. Poiché Cloud HSM utilizza Cloud KMS come front-end, puoi sfruttare tutte le funzionalità offerte da Cloud KMS.
Creazione di un keyring
Quando crei una chiave, la aggiungi a un mazzo di chiavi in una determinata località di Google Cloud. Puoi creare un nuovo portachiavi o utilizzarne uno esistente. In questo argomento, crei un nuovo portachiavi e aggiungi una nuova chiave.
Crea un keyring in una località Google Cloud che supporta Cloud HSM.
Console
Vai alla pagina Gestione delle chiavi nella console Google Cloud.
Fai clic su Crea keyring.
In Nome portachiavi, inserisci un nome per il portachiavi.
In Posizione del mazzo di chiavi, seleziona una località come
"us-east1"
.Fai clic su Crea.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
Nel tuo ambiente, esegui il comando
gcloud kms keyrings create
:gcloud kms keyrings create KEY_RING \ --location LOCATION
Sostituisci quanto segue:
KEY_RING
: il nome della chiave automatizzata che contiene la chiave.LOCATION
: la posizione di Cloud KMS della raccolta di chiavi.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag
--help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere all'API Cloud KMS.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene la chiave automatizzata.KEY_RING
: il nome della chiave automatizzata che contiene la chiave.LOCATION
: la posizione di Cloud KMS della raccolta di chiavi.
Per ulteriori informazioni, consulta la documentazione dell'API KeyRing.create
.
Crea una chiave
Segui questi passaggi per creare una chiave Cloud HSM nel keyring e nella posizione specificati.
Console
Vai alla pagina Gestione delle chiavi nella console Google Cloud.
Fai clic sul nome del keyring per cui vuoi creare una chiave.
Fai clic su Crea chiave.
In Che tipo di chiave vuoi creare?, scegli Chiave generata.
Nel campo Nome chiave, inserisci il nome della chiave.
Fai clic sul menu a discesa Livello di protezione e seleziona HSM.
Fai clic sul menu a discesa Finalità e seleziona Crittografia simmetrica/decriptata.
Accetta i valori predefiniti per Periodo di rotazione e A partire dal giorno.
Fai clic su Crea.
gcloud
Per utilizzare Cloud KMS sulla riga di comando, innanzitutto esegui l'installazione o l'upgrade alla versione più recente di Google Cloud CLI.
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
Sostituisci key con un nome per la nuova chiave. Sostituisci key-ring con il nome del mazzo di chiavi esistente in cui si troverà la chiave. Sostituisci location con la posizione di Cloud KMS per la raccolta di chiavi.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag --help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
Criptare i dati
Ora che hai una chiave, puoi utilizzarla per criptare contenuti di testo o binari.
gcloud
Per utilizzare Cloud KMS sulla riga di comando, esegui l'installazione o l'upgrade alla versione più recente di Google Cloud CLI.
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
Sostituisci quanto segue:
KEY_NAME
: il nome della chiave che vuoi utilizzare per la crittografia.KEY_RING
: il nome della chiave automatizzata che contiene la chiave.LOCATION
: la posizione Cloud KMS che contiene il portachiavi.FILE_TO_ENCRYPT
: il percorso del file da criptare.ENCRYPTED_OUTPUT
: il percorso in cui vuoi salvare l'output criptato.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag --help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere all'API Cloud KMS.
Quando utilizzi JSON e l'API REST, i contenuti devono essere codificati in base64 prima di poter essere criptati da Cloud KMS.
Per criptare i dati, effettua una richiesta POST
e fornisci le informazioni appropriate sul progetto e sulla chiave, nonché specifica il testo con codifica base64 da criptare nel campo plaintext
del corpo della richiesta.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene il portachiavi e la chiave che vuoi utilizzare per la crittografia.LOCATION
: la posizione Cloud KMS che contiene il portachiavi.KEY_RING
: il mazzo di chiavi che contiene la chiave che vuoi utilizzare per la crittografia.KEY_NAME
: il nome della chiave che vuoi utilizzare per la crittografia.PLAINTEXT_TO_ENCRYPT
: i dati in testo non cifrato che vuoi cifrare. Il testo non cifrato deve essere codificato in base64 prima di chiamare il metodoencrypt
.
Ecco un esempio di payload con dati codificati in base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Decripta il testo criptato
Per decriptare i contenuti criptati, devi utilizzare la stessa chiave utilizzata per criptarli.
gcloud
Per utilizzare Cloud KMS sulla riga di comando, innanzitutto esegui l'installazione o l'upgrade alla versione più recente di Google Cloud CLI.
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
Sostituisci quanto segue:
KEY_NAME
: il nome della chiave che vuoi utilizzare per la decrittografia.KEY_RING
: il nome della chiave automatizzata che contiene la chiave.LOCATION
: la posizione Cloud KMS che contiene il portachiavi.FILE_TO_DECRYPT
: il percorso del file da decriptare.DECRYPTED_OUTPUT
: il percorso in cui vuoi salvare l'output decriptato.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag --help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere all'API Cloud KMS.
Il testo decriptato restituito nel JSON da Cloud KMS è codificato in base64.
Per decriptare i dati criptati, effettua una richiesta POST
e fornisci le informazioni appropriate sul progetto e sulle chiavi e specifica il testo criptato (noto anche come codice cifrato) da decriptare nel campo ciphertext
del corpo della richiesta.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene il portachiavi e la chiave che vuoi utilizzare per la decrittografia.LOCATION
: la posizione Cloud KMS che contiene il portachiavi.KEY_RING
: il mazzo di chiavi che contiene la chiave che vuoi utilizzare per la decrittografia.KEY_NAME
: il nome della chiave che vuoi utilizzare per la decrittografia.ENCRYPTED_DATA
: i dati criptati che vuoi decriptare.
Ecco un esempio di payload con dati codificati in base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Passaggi successivi
L'esempio di crittografia in questo argomento utilizzava una chiave simmetrica con il livello di protezione HSM. Per criptare utilizzando una chiave asimmetrica con il livello di protezione HSM, segui i passaggi descritti in Crittografia e decriptazione dei dati con una chiave asimmetrica con le seguenti modifiche:
- Crea il keyring in una delle regioni supportate per Cloud HSM.
- Crea la chiave con il livello di protezione HSM.
Per utilizzare una chiave asimmetrica con il livello di protezione HSM per la firma con curve ellittiche o la firma RSA, segui i passaggi descritti in Creare e convalidare le firme con le seguenti modifiche:
- Crea il keyring in una delle regioni supportate per Cloud HSM.
- Crea la chiave con il livello di protezione HSM.
Inizia a utilizzare l'API.
Consulta il riferimento all'API Cloud KMS.
Leggi le guide pratiche per iniziare a creare, ruotare e impostare le autorizzazioni per le chiavi.
Leggi la sezione Concetti per comprendere meglio la gerarchia degli oggetti, gli stati delle chiavi e rotazione della chiave.
Scopri di più su Logging in Cloud KMS. Tieni presente che la registrazione si basa sulle operazioni e si applica alle chiavi con livelli di protezione sia hardware sia software.
Scopri di più su come Cloud HSM protegge i tuoi dati nel white paper sull'architettura di Cloud HSM.
Limitazioni note
Le dimensioni del messaggio sono limitate a 8 KiB (rispetto ai 64 KiB per le chiavi software Cloud KMS) per il testo in chiaro e il testo cifrato forniti dall'utente, inclusi i dati autenticati aggiuntivi.
Cloud HSM potrebbe non essere disponibile in alcune regioni multi o dual. Per maggiori dettagli, vedi Regioni supportate per Cloud HSM.
Se utilizzi chiavi Cloud HSM con integrazioni di chiavi di crittografia gestite dal cliente (CMEK) in altri servizi Google Cloud, le posizioni che utilizzi per i servizi devono corrispondere esattamente alle posizioni delle chiavi Cloud HSM. Ciò vale per le località regionali, con due regioni e con più regioni.
Per ulteriori informazioni sulle integrazioni CMEK, consulta la sezione pertinente di Crittografia a riposo.
Al momento, le operazioni sulle chiavi per le chiavi asimmetriche archiviate in Cloud HSM possono comportare una latenza notevolmente maggiore rispetto all'utilizzo delle chiavi software Cloud KMS.
Bare Metal Rack HSM
Google Cloud offre opzioni HSM aggiuntive, come la proprietà monoutente. Bare Metal Rack HSM è disponibile per i clienti per ospitare i propri HSM nello spazio fornito da Google. Per ulteriori informazioni, rivolgiti al rappresentante del tuo account.