Crie uma chave

Esta página mostra como criar uma chave no Cloud KMS. Uma chave pode ser uma chave de encriptação simétrica ou assimétrica, uma chave de assinatura assimétrica ou uma chave de assinatura MAC.

Quando cria uma chave, adiciona-a a um conjunto de chaves numa localização do Cloud KMS específica. Pode criar um novo conjunto de chaves ou usar um existente. Nesta página, gera uma nova chave do Cloud KMS ou do Cloud HSM e adiciona-a a um conjunto de chaves existente. Para criar uma chave do Cloud EKM, consulte o artigo Crie uma chave externa. Para importar uma chave do Cloud KMS ou do Cloud HSM, consulte o artigo Importe uma chave.

Antes de começar

Antes de concluir as tarefas nesta página, precisa do seguinte:

  1. Um recurso de projeto para conter os seus recursos do Cloud KMS. Google Cloud Recomendamos que use um projeto separado para os seus recursos do Cloud KMS que não contenha outros recursos. Google Cloud
  2. O nome e a localização do conjunto de chaves onde quer criar a sua chave. Escolha um porta-chaves numa localização próxima dos seus outros recursos e que suporte o nível de proteção escolhido. Para ver as localizações disponíveis e os níveis de proteção que suportam, consulte Localizações do Cloud KMS. Para criar um conjunto de chaves, consulte o artigo Crie um conjunto de chaves.
  3. Opcional: para usar a CLI gcloud, prepare o seu ambiente.

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    Funções necessárias

    Para receber as autorizações necessárias para criar chaves, peça ao seu administrador para lhe conceder as seguintes funções de IAM no projeto ou num recurso principal:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Estas funções predefinidas contêm as autorizações necessárias para criar chaves. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

    Autorizações necessárias

    São necessárias as seguintes autorizações para criar chaves:

    • 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
    • Para obter uma chave pública: cloudkms.cryptoKeyVersions.viewPublicKey
    • Para criar chaves de HSM de inquilino único:
      • cloudkms.singleTenantHsmInstances.get
      • cloudkms.singleTenantHsmInstances.use

    Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

    Crie uma chave de encriptação simétrica

    Consola

    1. Na Google Cloud consola, aceda à página Gestão de chaves.

      Aceda à gestão de chaves

    2. Clique no nome do conjunto de chaves para o qual vai criar uma chave.

    3. Clique em Criar chave.

    4. Em Nome da chave, introduza um nome para a chave.

    5. Para o Nível de proteção, selecione Software, HSM ou HSM de inquilino único.

    6. Se selecionou HSM de inquilino único, selecione a instância do HSM de inquilino único onde quer criar a chave.

    7. Para Material da chave, selecione Chave gerada.

    8. Em Finalidade, selecione Encriptar/desencriptar simetricamente.

    9. Aceite os valores predefinidos para Período de rotação e Início a.

    10. Clique em Criar.

    gcloud

    Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.

    Para criar uma chave de software ou do Cloud HSM multiinquilino, use o comando kms keys create:

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

    Substitua o seguinte:

    • KEY_NAME: o nome da chave.
    • KEY_RING: o nome do conjunto de chaves que contém a chave.
    • LOCATION: a localização do Cloud KMS do conjunto de chaves.
    • PROTECTION_LEVEL: o nível de proteção a usar para a chave, por exemplo, software ou hsm. Pode omitir a flag --protection-level para chaves software.

    Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help.

    Para criar uma chave do HSM na nuvem de inquilino único, adicione a flag --crypto-key-backend ao 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"
    

    Substitua o seguinte:

    • INSTANCE_PROJECT: o identificador do projeto onde a sua instância do Cloud HSM de inquilino único existe.
    • INSTANCE_NAME: o nome da instância do HSM na nuvem de inquilino único onde quer criar a chave. Para mais informações sobre instâncias do Cloud HSM de inquilino único, consulte o artigo Crie e faça a gestão de uma instância do Cloud HSM de inquilino único.

    Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help.

    C#

    Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do 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

    Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do 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

    Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do 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.