Crea una chiave

Questa pagina mostra come creare una chiave in Cloud KMS. Una chiave può essere una chiave di crittografia simmetrica o asimmetrica, una chiave di firma asimmetrica o una chiave di firma MAC.

Quando crei una chiave, la aggiungi a un keyring in una specifica posizione Cloud KMS. Puoi creare un nuovo portachiavi o utilizzarne uno esistente. In questa pagina, genera una nuova chiave Cloud KMS o Cloud HSM e aggiungila a un keyring esistente. Per creare una chiave Cloud EKM, consulta Crea una chiave esterna. Per importare una chiave Cloud KMS o Cloud HSM, consulta Importare una chiave.

Prima di iniziare

Prima di completare le attività in questa pagina, devi disporre di quanto segue:

  1. Una risorsa di progetto per contenere le tue risorse Cloud KMS. Google Cloud Ti consigliamo di utilizzare un progetto separato per le tue risorse Cloud KMS che non contenga altre risorse Google Cloud .
  2. Il nome e la posizione del keyring in cui vuoi creare la chiave. Scegli un portachiavi in una posizione vicina alle altre risorse e che supporti il livello di protezione che hai scelto. Per visualizzare le località disponibili e i livelli di protezione che supportano, consulta Località Cloud KMS. Per creare un keyring, vedi Creare un keyring.
  3. (Facoltativo) Per utilizzare gcloud CLI, prepara l'ambiente.

    Nella console Google Cloud , attiva Cloud Shell.

    Attiva Cloud Shell

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare chiavi, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto o su una risorsa padre:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per creare chiavi. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare chiavi sono necessarie le seguenti autorizzazioni:

  • cloudkms.cryptoKeys.create
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.list
  • cloudkms.cryptoKeyVersions.create
  • cloudkms.cryptoKeyVersions.get
  • cloudkms.cryptoKeyVersions.list
  • cloudkms.keyRings.get
  • cloudkms.keyRings.list
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • Per recuperare una chiave pubblica: cloudkms.cryptoKeyVersions.viewPublicKey
  • Per creare chiavi HSM single-tenant:
    • cloudkms.singleTenantHsmInstances.get
    • cloudkms.singleTenantHsmInstances.use

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Crea una chiave di crittografia simmetrica

Console

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

    Vai a Gestione delle chiavi

  2. Fai clic sul nome del keyring per cui creerai una chiave.

  3. Fai clic su Crea chiave.

  4. In Nome chiave, inserisci un nome per la chiave.

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

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

  7. In Materiale della chiave, seleziona Chiave generata.

  8. Per Finalità, seleziona Crittografia/decrittografia simmetrica.

  9. Accetta i valori predefiniti per Periodo di rotazione e A partire dal giorno.

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

Per creare una chiave software o Multi-tenant Cloud HSM, utilizza il comando kms keys create:

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --protection-level "PROTECTION_LEVEL"

Sostituisci quanto segue:

  • KEY_NAME: il nome della chiave.
  • KEY_RING: il nome delle chiavi automatizzate che contengono la chiave.
  • LOCATION: la posizione di Cloud KMS delle chiavi automatizzate.
  • PROTECTION_LEVEL: il livello di protezione da utilizzare per la chiave, ad esempio software o hsm. Puoi omettere il flag --protection-level per le chiavi software.

Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag --help.

Per creare una chiave Cloud HSM single-tenant, aggiungi il flag --crypto-key-backend al comando kms keys create:

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --protection-level "hsm-single-tenant" \
    --crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"

Sostituisci quanto segue:

  • INSTANCE_PROJECT: l'identificatore del progetto in cui esiste l'istanza Single-tenant Cloud HSM.
  • INSTANCE_NAME: il nome dell'istanza Single-tenant Cloud HSM in cui vuoi creare la chiave. Per saperne di più sulle istanze HSM a tenant singolo, consulta Crea e gestisci un'istanza HSM a tenant singolo.

Per informazioni su tutti i flag e i valori possibili, 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.


using Google.Cloud.Kms.V1;

public class CreateKeySymmetricEncryptDecryptSample
{
    public CryptoKey CreateKeySymmetricEncryptDecrypt(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring",
      string id = "my-symmetric-encryption-key")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the parent key ring name.
        KeyRingName keyRingName = new KeyRingName(projectId, locationId, keyRingId);

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            Purpose = CryptoKey.Types.CryptoKeyPurpose.EncryptDecrypt,
            VersionTemplate = new CryptoKeyVersionTemplate
            {
                Algorithm = CryptoKeyVersion.Types.CryptoKeyVersionAlgorithm.GoogleSymmetricEncryption,
            }
        };

        // Call the API.
        CryptoKey result = client.CreateCryptoKey(keyRingName, id, key);

        // Return the result.
        return result;
    }
}

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"
)

// createKeySymmetricEncryptDecrypt creates a new symmetric encrypt/decrypt key
// on Cloud KMS.
func createKeySymmetricEncryptDecrypt(w io.Writer, parent, id string) error {
	// parent := "projects/my-project/locations/us-east1/keyRings/my-key-ring"
	// id := "my-symmetric-encryption-key"

	// Create the client.
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("failed to create kms client: %w", err)
	}
	defer client.Close()

	// Build the request.
	req := &kmspb.CreateCryptoKeyRequest{
		Parent:      parent,
		CryptoKeyId: id,
		CryptoKey: &kmspb.CryptoKey{
			Purpose: kmspb.CryptoKey_ENCRYPT_DECRYPT,
			VersionTemplate: &kmspb.CryptoKeyVersionTemplate{
				Algorithm: kmspb.CryptoKeyVersion_GOOGLE_SYMMETRIC_ENCRYPTION,
			},
		},
	}

	// Call the API.
	result, err := client.CreateCryptoKey(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to create key: %w", err)
	}
	fmt.Fprintf(w, "Created key: %s\n", result.Name)
	return nil
}

Java

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

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose;
import com.google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm;
import com.google.cloud.kms.v1.CryptoKeyVersionTemplate;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.cloud.kms.v1.KeyRingName;
import java.io.IOException;

public class CreateKeySymmetricEncryptDecrypt {

  public void createKeySymmetricEncryptDecrypt() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String id = "my-key";
    createKeySymmetricEncryptDecrypt(projectId, locationId, keyRingId, id);
  }

  // Create a new key that is used for symmetric encryption and decryption.
  public void createKeySymmetricEncryptDecrypt(
      String projectId, String locationId, String keyRingId, String id) throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the parent name from the project, location, and key ring.
      KeyRingName keyRingName = KeyRingName.of(projectId, locationId, keyRingId);

      // Build the symmetric key to create.
      CryptoKey key =
          CryptoKey.newBuilder()
              .setPurpose(CryptoKeyPurpose.ENCRYPT_DECRYPT)
              .setVersionTemplate(
                  CryptoKeyVersionTemplate.newBuilder()
                      .setAlgorithm(