Destruir y restaurar versiones de clave

En esta página se explica cómo programar la destrucción permanente de una versión de una clave de Cloud Key Management Service. En Cloud KMS, el material de clave criptográfica que usas para cifrar, descifrar, firmar y verificar datos se almacena en una versión de clave. Una clave tiene cero o más versiones de clave. Al rotar una clave, se crea una nueva versión.

Si destruyes una versión de clave, el material de la clave se eliminará de forma permanente. Cuando destruyes una versión de una clave, no se eliminan otros detalles, como el nombre de la clave y el número de versión de la clave. Una vez que se haya destruido una clave, los datos que se hayan encriptado con la versión de la clave no se podrán desencriptar.

La única excepción es la reimportación de claves, que te permite restaurar una clave importada anteriormente proporcionando el mismo material de clave original.

Como la eliminación de claves suele ser irreversible, Cloud KMS no te permite eliminar versiones de claves inmediatamente. En su lugar, programa la eliminación de una versión de clave. La versión de clave permanece en el estado "Programada para eliminarse" durante un periodo configurable. Durante el periodo programado para la eliminación, puedes restaurar una versión de clave para cancelar su eliminación.

La duración predeterminada de la programación para la destrucción es de 30 días. Puedes establecer una duración programada para la destrucción personalizada de una clave durante la creación de la clave. Tu organización puede implementar una duración mínima programada para la destrucción configurando la restricción Duración mínima programada para la destrucción por clave en sus políticas de organización.

También puedes gestionar el acceso a la clave mediante Gestión de Identidades y Accesos (IAM). Las operaciones de gestión de identidades y accesos son coherentes en cuestión de segundos. Para obtener más información, consulta Usar la gestión de identidades y accesos.

También puedes inhabilitar temporalmente una versión de clave. Te recomendamos que inhabilites las versiones de clave antes de programar su eliminación como parte de los procedimientos para asegurarte de que la clave se puede eliminar de forma segura. En función de las políticas de tu organización, es posible que tengas que inhabilitar una versión de una clave antes de poder programar su destrucción. Para obtener más información sobre cómo controlar la destrucción de versiones de clave mediante políticas de la organización, consulta Controlar la destrucción de versiones de clave.

En el resto de este documento, se hará referencia a la programación de la eliminación de una clave como "eliminar la clave", aunque la eliminación no sea inmediata.

Antes de empezar

Conocer los riesgos

La destrucción de una versión de clave es una operación permanente. Si destruyes una versión de clave que aún necesitas, corres riesgos como los siguientes:

  • Interrupción del servicio: si destruyes una clave necesaria para iniciar un contenedor o una instancia, tus servicios o aplicaciones pueden dejar de estar disponibles.

  • Pérdida de datos permanente: si destruyes una clave que se ha usado para cifrar datos, esos datos dejarán de estar disponibles. Los datos cifrados con una clave que se ha destruido se consideran destruidos mediante cifrado. En algunos casos, si se destruye una clave, los recursos cifrados se pueden eliminar permanentemente.

  • Problemas de cumplimiento o normativos: si destruyes una clave necesaria para acceder a datos sujetos a un periodo de conservación antes de que finalice dicho periodo, podrías incumplir un requisito normativo o de cumplimiento.

Roles obligatorios

Para obtener los permisos que necesitas para destruir y restaurar versiones de claves, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Administrador de Cloud KMS (roles/cloudkms.admin) en la clave. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Comprobar si se está usando la versión de la clave

Antes de eliminar una versión de clave, sigue estos pasos para comprobar si se está usando:

  1. Consulta los detalles del seguimiento del uso de la clave. Si hay recursos protegidos por la versión de la clave que quieres destruir, vuelve a cifrarlos con otra versión de la clave.

  2. Activa los registros de cualquier servicio o aplicación que pueda estar usando la versión de la clave.

  3. Activa los registros en el proyecto de Cloud KMS que contiene la clave.

  4. Inhabilita la versión de clave. Si inhabilita la versión de la clave, esta no se podrá usar. Si la versión de la clave está inhabilitada, no se podrá usar.

  5. Monitoriza los registros hasta que tengas la certeza de que ninguna aplicación o servicio sigue dependiendo de la versión de la clave que has inhabilitado. Si se indica algún error que muestre que no se ha podido acceder a la versión de la clave, configura la aplicación o el recurso para que use otra versión de la clave.

    El tiempo que dediques a monitorizar los registros antes de destruir una versión de una clave depende del tipo de clave, su patrón de uso y su nivel de sensibilidad. Por ejemplo, antes de destruir una versión de clave que se usa en un proceso que se ejecuta trimestralmente, mantén la versión de clave inhabilitada hasta que el proceso se complete correctamente.

  6. Comprueba el uso de la clave en relación con los requisitos de cumplimiento aplicables. Por ejemplo, la versión de la clave y los datos encriptados con ella pueden estar sujetos a periodos de conservación de datos.

Estos pasos te ayudan a identificar si aún se necesita una clave, pero no pueden garantizar que ya no se necesite una versión de la clave. Tu organización debe implementar procedimientos y directrices para asegurarse de que la destrucción de la versión de la clave no cause efectos negativos.

Eliminar una versión de clave

Puedes destruir una versión de clave habilitada o inhabilitada.

Consola

  1. En la consola de Google Cloud , ve a la página Gestión de claves.

    Ir a Administración de claves

  2. Marca la casilla situada junto a la versión de la clave que quieras programar para su destrucción.

  3. En el encabezado, haz clic en Destruir.

  4. En la petición de confirmación, introduce el nombre de la clave y haz clic en Programar destrucción.

gcloud

Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de la CLI de Google Cloud.

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

Haz los cambios siguientes:

  • KEY_VERSION: el número de versión de la versión de la clave que quieres destruir.
  • KEY_NAME: el nombre de la clave de la que quieres destruir una versión.
  • KEY_RING: el nombre del conjunto de claves que contiene la clave.
  • LOCATION: la ubicación de Cloud KMS del conjunto de claves.

Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.

C#

Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.


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 ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de 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 ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de 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 ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de 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');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the key version name
const versionName = client.cryptoKeyVersionPath(
  projectId,
  locationId,
  keyRingId,
  keyId,
  versionId
);

async function destroyKeyVersion() {
  const [version] = await client.destroyCryptoKeyVersion({
    name: versionName,
  });

  console.log(`Destroyed key version: ${version.name}`);
  return version;
}

return destroyKeyVersion();

PHP

Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\DestroyCryptoKeyVersionRequest;

function destroy_key_version(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key',
    string $versionId = '123'
) {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the key version name.
    $keyVersionName = $client->cryptoKeyVersionName($projectId, $locationId, $keyRingId, $keyId, $versionId);

    // Call the API.
    $destroyCryptoKeyVersionRequest = (new DestroyCryptoKeyVersionRequest())
        ->setName($keyVersionName);
    $destroyedVersion = $client->destroyCryptoKeyVersion($destroyCryptoKeyVersionRequest);
    printf('Destroyed key version: %s' . PHP_EOL, $destroyedVersion->getName());

    return $destroyedVersion;
}

Python

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.

from google.cloud import kms


def destroy_key_version(
    project_id: str, location_id: str, key_ring_id: str, key_id: str, version_id: str
) -> kms.CryptoKeyVersion:
    """
    Schedule destruction of the given key version.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to use (e.g. 'my-key').
        version_id (string): ID of the key version to destroy (e.g. '1').

    Returns:
        CryptoKeyVersion: The version.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key version name.
    key_version_name = client.crypto_key_version_path(
        project_id, location_id, key_ring_id, key_id, version_id
    )

    # Call the API.
    destroyed_version = client.destroy_crypto_key_version(
        request={"name": key_version_name}
    )
    print(f"Destroyed key version: {destroyed_version.name}")
    return destroyed_version

Ruby

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"
# version_id  = "123"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the key version name.
key_version_name = client.crypto_key_version_path project:            project_id,
                                                  location:           location_id,
                                                  key_ring:           key_ring_id,
                                                  crypto_key:         key_id,
                                                  crypto_key_version: version_id

# Call the API.
destroyed_version = client.destroy_crypto_key_version name: key_version_name
puts "Destroyed key version: #{destroyed_version.name}"

API

En estos ejemplos se usa curl como cliente HTTP para mostrar cómo se usa la API. Para obtener más información sobre el control de acceso, consulta el artículo sobre cómo acceder a la API Cloud KMS.

Para eliminar una versión de clave, llama al método CryptoKeyVersions.destroy.

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:destroy" \
    --request "POST" \
    --header "authorization: Bearer TOKEN"

Si no puedes destruir una versión de una clave, es posible que tu organización requiera que las versiones de las claves se inhabiliten antes de destruirlas. Prueba a inhabilitar la versión de la clave antes de eliminarla.

Cuando envías la solicitud de eliminación, el estado de la versión de clave pasa a ser "Programada para eliminación". Una vez que haya transcurrido el tiempo de eliminación programada de la clave, el estado de la versión de la clave será "Eliminada", lo que significa que se habrá iniciado la eliminación lógica del material de la clave de los sistemas activos y que el cliente no podrá recuperar el material de la clave. El material de claves puede permanecer en los sistemas de Google hasta 45 días a partir de la hora de destrucción programada.

Para recibir una alerta cuando se programe la destrucción de una versión de una clave, consulta Usar Cloud Monitoring con Cloud KMS.

Las versiones de claves destruidas no son recursos facturables.

Destruir claves externas

Para eliminar de forma permanente la asociación entre una clave de Cloud EKM y una clave externa, puedes destruir la versión de la clave. Una vez que haya transcurrido el periodo Programado para eliminación, la clave se eliminará. Una vez que se haya eliminado la versión de la clave, ya no podrás encriptar datos ni desencriptar los datos que se hayan encriptado con la versión de la clave de Cloud EKM.

Si destruyes una versión de una clave gestionada manualmente en Cloud KMS, no se modificará la clave en el gestor de claves externo. Te recomendamos que primero destruyas la clave o la versión de la clave en Google Cloud. Una vez que se haya destruido la versión de la clave de Cloud EKM, puedes destruir el material de la clave en el gestor de claves externo.

Si destruyes una versión de una clave externa coordinada en Cloud KMS, primero se destruirá la versión de la clave en Google Cloudy, a continuación, se enviará una solicitud de destrucción a EKM para destruir el material de la clave externa.

Restaurar una versión de clave

Durante el periodo en el que el estado de una versión de clave esté programado para eliminarse, puedes restaurarla enviando una solicitud de restauración.

Consola

  1. Ve a la página Gestión de claves de la Google Cloud consola.

    Ve a la página Gestión de claves.

  2. Haga clic en el nombre del conjunto de claves que contiene la clave cuya versión quiere restaurar.

  3. Haga clic en la clave cuya versión quiera restaurar.

  4. Marca la casilla situada junto a la versión de la clave que quieras restaurar.

  5. En el encabezado, haz clic en Restaurar.

  6. En la ventana de confirmación, haz clic en Restaurar.

gcloud

Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de la CLI de Google Cloud.

gcloud kms keys versions restore key-version \
    --key key \
    --keyring key-ring \
    --location location

Sustituye key-version por la versión de la clave que quieras restaurar. Sustituye key por el nombre de la clave. Sustituye key-ring por el nombre del conjunto de claves en el que se encuentra la clave. Sustituye location por la ubicación de Cloud KMS del conjunto de claves.

Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.

C#

Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.


using Google.Cloud.Kms.V1;

public class RestoreKeyVersionSample
{
    public CryptoKeyVersion RestoreKeyVersion(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 cryptoKeyVersionName = new CryptoKeyVersionName(projectId, locationId, keyRingId, keyId, keyVersionId);

        // Call the API.
        CryptoKeyVersion result = client.RestoreCryptoKeyVersion(cryptoKeyVersionName);

        // Return the result.
        return result;
    }
}

Go

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.

import (
	"context"
	"fmt"
	"io"

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

// restoreKeyVersion attempts to recover a key that has been marked for
// destruction in the past 24h.
func restoreKeyVersion(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.RestoreCryptoKeyVersionRequest{
		Name: name,
	}

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

Java

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de 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 RestoreKeyVersion {

  public void restoreKeyVersion() 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";
    restoreKeyVersion(projectId, locationId, keyRingId, keyId, keyVersionId);
  }

  // Schedule destruction of the given key version.
  public void restoreKeyVersion(
      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);

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

Node.js

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de 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');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the key version name
const versionName = client.cryptoKeyVersionPath(
  projectId,
  locationId,
  keyRingId,
  keyId,
  versionId
);

async function restoreKeyVersion() {
  const [version] = await client.restoreCryptoKeyVersion({
    name: versionName,
  });

  console.log(`Restored key version: ${version.name}`);
  return version;
}

return restoreKeyVersion();

PHP

Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\RestoreCryptoKeyVersionRequest;

function restore_key_version(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key',
    string $versionId = '123'
) {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the key version name.
    $keyVersionName = $client->cryptoKeyVersionName($projectId, $locationId, $keyRingId, $keyId, $versionId);

    // Call the API.
    $restoreCryptoKeyVersionRequest = (new RestoreCryptoKeyVersionRequest())
        ->setName($keyVersionName);
    $restoredVersion = $client->restoreCryptoKeyVersion($restoreCryptoKeyVersionRequest);
    printf('Restored key version: %s' . PHP_EOL, $restoredVersion->getName());

    return $restoredVersion;
}

Python

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.

from google.cloud import kms


def restore_key_version(
    project_id: str, location_id: str, key_ring_id: str, key_id: str, version_id: str
) -> kms.CryptoKeyVersion:
    """
    Restore a key version scheduled for destruction.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to use (e.g. 'my-key').
        version_id (string): ID of the version to use (e.g. '1').

    Returns:
        CryptoKeyVersion: Restored Cloud KMS key version.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key version name.
    key_version_name = client.crypto_key_version_path(
        project_id, location_id, key_ring_id, key_id, version_id
    )

    # Call the API.
    restored_version = client.restore_crypto_key_version(
        request={"name": key_version_name}
    )
    print(f"Restored key version: {restored_version.name}")
    return restored_version

Ruby

Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"
# version_id  = "123"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the key version name.
key_version_name = client.crypto_key_version_path project:            project_id,
                                                  location:           location_id,
                                                  key_ring:           key_ring_id,
                                                  crypto_key:         key_id,
                                                  crypto_key_version: version_id

# Call the API.
restored_version = client.restore_crypto_key_version name: key_version_name
puts "Restored key version: #{restored_version.name}"

API

En estos ejemplos se usa curl como cliente HTTP para mostrar cómo se usa la API. Para obtener más información sobre el control de acceso, consulta el artículo sobre cómo acceder a la API Cloud KMS.

Para restaurar una versión de clave, llama al método CryptoKeyVersions.restore.

curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location-id/keyRings/key-ring-id/cryptoKeys/crypto-key-id/cryptoKeyVersions/version-id:restore" \
    --request "POST" \
    --header "authorization: Bearer token"

Una vez completada la solicitud de restauración, el estado de la versión de la clave será inhabilitado. Debes habilitar la llave para poder usarla.

Permisos de gestión de identidades y accesos necesarios

Para destruir una versión de una clave, el llamante necesita el permiso de gestión de identidades y accesos cloudkms.cryptoKeyVersions.destroy en la clave, el conjunto de claves, el proyecto, la carpeta o la organización.

Para restaurar una versión de una clave, el llamante necesita el permiso cloudkms.cryptoKeyVersions.restore.

Ambos permisos se conceden al rol Administrador de Cloud KMS (roles/cloudkms.admin).

Cronología de la eliminación

Cloud KMS se compromete a eliminar el material de las claves de los clientes de toda la infraestructura de Google en un plazo de 45 días a partir de la hora de destrucción programada. Esto incluye la eliminación de datos tanto de los sistemas activos como de las copias de seguridad de los centros de datos. El resto de los datos de los clientes están sujetos al plazo de eliminación de Google Cloud estándar de 180 días.