Destrua e restaure versões de chaves

Esta página mostra-lhe como agendar uma versão de chave do Serviço de gestão de chaves na nuvem para destruição permanente. No Cloud KMS, o material da chave criptográfica que usa para encriptar, desencriptar, assinar e validar dados é armazenado numa versão da chave. Uma chave tem zero ou mais versões da chave. Quando roda uma chave, cria uma nova versão da chave.

A destruição de uma versão da chave significa que o material da chave é eliminado permanentemente. Quando destrói uma versão da chave, outros detalhes, como o nome da chave e o número da versão da chave, não são eliminados. Depois de uma chave ser destruída, não é possível desencriptar os dados que foram encriptados com a versão da chave.

A única exceção é a reimportação de chaves, que lhe permite restaurar uma chave importada anteriormente, fornecendo o mesmo material de chave original.

Uma vez que a destruição de chaves é geralmente irreversível, o Cloud KMS não permite destruir versões de chaves imediatamente. Em alternativa, agende uma versão da chave para destruição. A versão da chave permanece no estado agendada para destruição durante um período configurável. Durante o período agendado para destruição, pode restaurar uma versão de chave para cancelar a respetiva destruição.

A duração predefinida agendada para destruição é de 30 dias. Pode definir uma duração agendada para destruição personalizada para uma chave durante a criação da chave. A sua organização pode aplicar uma duração mínima agendada para destruição definindo a restrição Duração agendada mínima para destruição por chave nas políticas da sua organização.

Também pode gerir o acesso à chave através da gestão de identidade e de acesso (IAM). As operações de IAM são consistentes no espaço de segundos. Para mais informações, consulte Usar o IAM.

Também pode desativar temporariamente uma versão da chave. Recomendamos que desative as versões das chaves antes de agendar a respetiva destruição como parte dos seus procedimentos para garantir que a chave pode ser destruída em segurança. Consoante as políticas da sua organização, pode ter de desativar uma versão da chave antes de a poder agendar para destruição. Para mais informações sobre como controlar a destruição de versões de chaves através de políticas da organização, consulte o artigo Controle a destruição de versões de chaves.

No resto deste documento, o agendamento de uma chave para destruição é referido como destruição da chave, mesmo que a destruição não seja imediata.

Antes de começar

Compreenda os riscos

A destruição de uma versão de chave é uma operação permanente. A destruição de uma versão da chave que ainda é necessária tem riscos, incluindo os seguintes:

  • Interrupção do serviço: se destruir uma chave necessária para iniciar um contentor ou uma instância, os seus serviços ou aplicações podem ficar indisponíveis.

  • Perda de dados permanente: se destruir uma chave que foi usada para encriptar dados, esses dados ficam indisponíveis. Os dados encriptados com uma chave que foi destruída são considerados destruídos criptograficamente. Em alguns casos, a destruição de uma chave pode fazer com que os recursos encriptados sejam eliminados permanentemente.

  • Problemas regulamentares ou de conformidade: se destruir uma chave necessária para aceder a dados sujeitos a um período de retenção antes de esse período de retenção estar concluído, pode estar em violação de um requisito regulamentar ou de conformidade.

Funções necessárias

Para obter as autorizações de que precisa para destruir e restaurar versões de chaves, peça ao seu administrador para lhe conceder a função administrador do Cloud KMS (roles/cloudkms.admin) da IAM na chave. 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.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Verifique se a versão da chave está em utilização

Antes de destruir uma versão da chave, conclua os seguintes passos para ver se a versão da chave está em utilização:

  1. Veja os detalhes do acompanhamento da utilização de chaves para a chave. Se algum recurso estiver protegido pela versão da chave que quer destruir, encripte-o novamente com outra versão da chave.

  2. Ative os registos para qualquer serviço ou aplicação que possa estar a usar a versão da chave.

  3. Ative os registos no projeto do Cloud KMS que contém a chave.

  4. Desative a versão da chave. A desativação da versão da chave impede a utilização da versão da chave. Com a versão da chave desativada, todas as tentativas de usar a versão da chave falham.

  5. Monitorize os registos até ter a certeza de que nenhuma aplicação ou serviço continua a depender da versão da chave que desativou. Se existirem erros que indiquem falhas no acesso à versão da chave, configure a aplicação ou o recurso para usar outra versão da chave.

    O período de tempo que dedica à monitorização dos registos antes de destruir uma versão da chave depende do tipo de chave, do respetivo padrão de utilização e do respetivo nível de sensibilidade. Por exemplo, antes de destruir uma versão da chave usada num processo executado trimestralmente, mantenha a versão da chave desativada até que esse processo seja concluído com êxito.

  6. Verifique a utilização da chave em relação a quaisquer requisitos de conformidade aplicáveis. Por exemplo, a versão da chave e os dados encriptados com a mesma podem estar sujeitos a períodos de retenção de dados.

Estes passos ajudam a identificar se ainda é necessária uma chave. No entanto, não garantem que uma versão da chave já não seja necessária. A sua organização deve implementar procedimentos e diretrizes para garantir que a destruição da versão da chave não causa efeitos negativos.

Destrua uma versão de chave

Pode destruir uma versão da chave ativada ou desativada.

Consola

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

    Aceda à gestão de chaves

  2. Selecione a caixa junto à versão da chave que quer agendar para destruição.

  3. Clique em Destruir no cabeçalho.

  4. No comando de confirmação, introduza o nome da chave e, de seguida, clique em Agendar destruição.

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.

gcloud kms keys versions destroy KEY_VERSION \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION

Substitua o seguinte:

  • KEY_VERSION: o número da versão da versão principal que quer destruir.
  • KEY_NAME: o nome da chave para a qual quer destruir uma versão 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.

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 DestroyKeyVersionSample
{
    public CryptoKeyVersion DestroyKeyVersion(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key", string keyVersionId = "123")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key version name.
        CryptoKeyVersionName keyVersionName = new CryptoKeyVersionName(projectId, locationId, keyRingId, keyId, keyVersionId);

        // Call the API.
        CryptoKeyVersion result = client.DestroyCryptoKeyVersion(keyVersionName);

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

// destroyKeyVersion marks a specified key version for deletion. The key can be
// restored if requested within 24 hours.
func destroyKeyVersion(w io.Writer, name string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key/cryptoKeyVersions/123"

	// 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.DestroyCryptoKeyVersionRequest{
		Name: name,
	}

	// Call the API.
	result, err := client.DestroyCryptoKeyVersion(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to destroy key version: %w", err)
	}
	fmt.Fprintf(w, "Destroyed key version: %s\n", result)
	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.CryptoKeyVersion;
import com.google.cloud.kms.v1.CryptoKeyVersionName;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import java.io.IOException;

public class DestroyKeyVersion {

  public void destroyKeyVersion() 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 keyId = "my-key";
    String keyVersionId = "123";
    destroyKeyVersion(projectId, locationId, keyRingId, keyId, keyVersionId);
  }

  // Schedule destruction of the given key version.
  public void destroyKeyVersion(
      String projectId, String locationId, String keyRingId, String keyId, String keyVersionId)
      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 key version name from the project, location, key ring, key,
      // and key version.
      CryptoKeyVersionName keyVersionName =
          CryptoKeyVersionName.of(projectId, locationId, keyRingId, keyId, keyVersionId);

      // Destroy the key version.
      CryptoKeyVersion response = client.destroyCryptoKeyVersion(keyVersionName);
      System.out.printf("Destroyed key version: %s%n", response.getName());
    }
  }
}

Node.js

Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';
// const versionId = '123';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms'