Importa una versione della chiave in Cloud KMS

Questa guida mostra come importare una chiave di crittografia in Cloud HSM o Cloud Key Management Service come nuova versione della chiave.

Per maggiori dettagli sull'importazione delle chiavi, inclusi limiti e restrizioni, vedi Importazione delle chiavi.

Puoi completare i passaggi di questa guida in 5-10 minuti, esclusi i passaggi della sezione Prima di iniziare. Il wrapping manuale della chiave aggiunge complessità all'attività.

Prima di iniziare

Ti consigliamo di creare un nuovo progetto per testare questa funzionalità, per semplificare la pulizia dopo il test e per assicurarti di disporre di autorizzazioni Identity and Access Management (IAM) adeguate per importare una chiave.

Prima di poter importare una chiave, devi preparare il progetto, il sistema locale e la chiave stessa.

Preparazione del progetto

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  14. L'utente che esegue l'importazione deve disporre delle seguenti autorizzazioni IAM per creare chiavi automatizzate, chiavi e job di importazione. Se l'utente non è il proprietario del progetto, puoi assegnargli entrambi i seguenti due ruoli predefiniti:

    • roles/editor
    • roles/cloudkms.importer

    Per saperne di più sui ruoli e sulle autorizzazioni IAM disponibili per Cloud KMS, consulta Autorizzazioni e ruoli.

Preparazione del sistema locale

Prepara il sistema locale scegliendo una delle seguenti opzioni. Il wrapping automatico delle chiavi è consigliato per la maggior parte degli utenti.

Preparazione della chiave

Verifica che l'algoritmo e la lunghezza della chiave siano supportati. Gli algoritmi consentiti per una chiave dipendono dal fatto che la chiave venga utilizzata per la crittografia simmetrica, la crittografia asimmetrica o la firma asimmetrica, nonché dal fatto che la chiave sia archiviata in un software o in un HSM. Specifichi l'algoritmo della chiave come parte della richiesta di importazione.

Separatamente, devi anche verificare la codifica della chiave e apportare modifiche, se necessario.

Dopo la creazione o l'importazione di una versione della chiave, non è possibile modificare quanto segue:

  • Il livello di protezione indica se la chiave persiste nel software, in un HSM multi-tenant, in un HSM single-tenant o in un sistema di gestione delle chiavi esterno. Il materiale della chiave non può essere spostato da uno di questi ambienti di archiviazione a un altro. Tutte le versioni di una chiave hanno lo stesso livello di protezione.

  • Lo scopo indica se le versioni della chiave vengono utilizzate per la crittografia simmetrica, la crittografia asimmetrica o la firma asimmetrica. Lo scopo della chiave limita gli algoritmi possibili che possono essere utilizzati per creare versioni della chiave. Tutte le versioni di una chiave hanno lo stesso scopo.

Se non hai una chiave da importare, ma vuoi convalidare la procedura di importazione delle chiavi, puoi creare una chiave simmetrica sul sistema locale utilizzando il seguente comando:

openssl rand 32 > ${HOME}/test.bin

Utilizza questa chiave solo per i test. Una chiave creata in questo modo potrebbe non essere adatta all'utilizzo in produzione.

Se devi eseguire il wrapping della chiave manualmente, fallo prima di continuare con le procedure descritte in questa guida.

Crea la chiave di destinazione e le chiavi automatizzate

Una chiave Cloud KMS è un oggetto contenitore che contiene zero o più versioni della chiave. Ogni versione della chiave contiene una chiave di crittografia.

Quando importi una chiave in Cloud KMS o Cloud HSM, la chiave importata diventa una nuova versione di una chiave Cloud KMS o Cloud HSM esistente. Nel resto di questa guida, questa chiave è chiamata chiave di destinazione. La chiave di destinazione deve esistere prima di poter importare il materiale della chiave.

L'importazione di una versione della chiave non ha alcun effetto sulle versioni esistenti della chiave. Tuttavia, è consigliabile creare una chiave vuota durante il test dell'importazione delle chiavi. Una chiave vuota non ha una versione, non è attiva e non può essere utilizzata.

Se vuoi, puoi specificare che la chiave appena creata può contenere solo versioni importate, il che impedisce la generazione accidentale di nuove versioni in Cloud KMS.

Esiste una chiave in un keyring; in questa guida, questo keyring è chiamato keyring di destinazione. La posizione del keyring di destinazione determina la posizione in cui il materiale della chiave è disponibile dopo l'importazione. Le chiavi Cloud HSM non possono essere create o importate in alcune località. Una volta creata, una chiave non può essere spostata in un portachiavi o in una posizione diversa.

Segui questi passaggi per creare una chiave vuota in un nuovo portachiavi utilizzando Google Cloud CLI o la console Google Cloud .

Console

  1. Nella console Google Cloud , vai alla pagina Key Management.

    Vai a Gestione delle chiavi

  2. Fai clic su Crea keyring.

  3. Nel campo Nome della chiave automatizzata, inserisci il nome della chiave automatizzata.

  4. In Tipo di località, seleziona un tipo di località e una località.

  5. Fai clic su Crea. Viene visualizzata la pagina Crea chiave.

  6. Nel campo Nome chiave, inserisci il nome della chiave.

  7. Per Livello di protezione, seleziona Software, HSM o HSM single-tenant.

  8. Se hai selezionato HSM single-tenant, seleziona l'istanza HSM single-tenant in cui vuoi creare la chiave.

  9. In Materiale chiave, seleziona Chiave importata e poi fai clic su Continua. In questo modo, non viene creata una versione iniziale della chiave.

  10. Imposta Scopo e Algoritmo per la chiave, poi fai clic su Continua.

  11. (Facoltativo) Se vuoi che questa chiave contenga solo le versioni della chiave importate, seleziona Limita le versioni della chiave solo per importazione. In questo modo, eviti di creare accidentalmente nuove versioni della chiave in Cloud KMS.

  12. (Facoltativo) Per le chiavi importate, la rotazione automatica è disattivata per impostazione predefinita. Per attivare la rotazione automatica, seleziona un valore dal campo Periodo di rotazione della chiave.

    Se attivi la rotazione automatica, le nuove versioni della chiave verranno generate in Cloud KMS e la versione della chiave importata non sarà più la versione predefinita dopo una rotazione.

  13. Fai clic su Crea.

gcloud

Per utilizzare Cloud KMS dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.

  1. Crea il keyring di destinazione. Scegli una posizione compatibile con il livello di protezione che vuoi utilizzare. Per ulteriori informazioni sulle località supportate, consulta Località Cloud KMS.

    gcloud kms keyrings create KEY_RING \
      --location LOCATION
    

    Puoi scoprire di più sulla creazione di chiavi automatizzate.

  2. Crea la chiave di destinazione utilizzando il comando kms keys create con il flag --skip-initial-version-creation. In questo modo viene creata una chiave senza versione iniziale, in modo che il materiale della chiave importato sia la versione 1. Utilizza il flag --import-only per impedire a Cloud KMS di generare materiale della chiave per le nuove versioni della chiave. Se questo flag è impostato, è necessario importare le nuove versioni della chiave. Le chiavi create come --import-only devono essere ruotate manualmente.

    gcloud kms keys create KEY_NAME \
      --location LOCATION \
      --keyring KEY_RING \
      --purpose PURPOSE \
      --protection-level PROTECTION_LEVEL \
      --skip-initial-version-creation \
      --import-only
    

    Sostituisci quanto segue:

    • KEY_NAME: il nome che vuoi utilizzare per la chiave.
    • LOCATION: la posizione delle chiavi automatizzate.
    • KEY_RING: le chiavi automatizzate in cui vuoi creare la chiave.
    • PURPOSE: lo scopo che vuoi utilizzare per la chiave.
    • PROTECTION_LEVEL: il livello di protezione che vuoi utilizzare per la chiave, ad esempio HSM.

    Per creare una chiave Single-tenant Cloud HSM, aggiungi il flag --cryptoKeyBackend a questo comando e aggiungi l'identificatore di risorsa dell'istanza Single-tenant Cloud HSM in cui vuoi importare la chiave:

    --crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"

Go

Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go di Cloud KMS.

import (
	"context"
	"fmt"
	"io"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
)

// createKeyForImport creates a new asymmetric signing key in Cloud HSM.
func createKeyForImport(w io.Writer, parent, id string) error {
	// parent := "projects/my-project/locations/us-east1/keyRings/my-key-ring"
	// id := "my-imported-key"

	// Create the client.
	ctx := context.Background()
	client, err