Schlüsselversionen löschen und wiederherstellen

Eine Schlüsselversion hat einen Status, der bestimmt, ob ihr Schlüsselmaterial vorhanden ist.

Eine aktivierte oder deaktivierte Schlüsselversion kann mithilfe von DestroyCryptoKeyVersion, Clientbibliotheksmethoden, die DestroyCryptoKeyVersion zugeordnet sind, gcloud kms keys versions destroy oder der Google Cloud Console zum Löschen vorgemerkt werden. Eine zum Löschen vorgemerkte Schlüsselversion kann mithilfe von RestoreCryptoKeyVersion, Clientbibliotheksmethoden, die RestoreCryptoKeyVersion zugeordnet sind, gcloud kms keys versions restore oder der Google Cloud Console in den deaktivierten Status versetzt werden.

Zum Ändern des Status einer Schlüsselversion benötigt ein Nutzer die entsprechende Rolle oder Berechtigung für Cloud Identity and Access Management.

  • Mit den vordefinierten Rollen roles/cloudkms.admin und roles/owner können Nutzer eine Schlüsselversion zum Löschen vormerken und Schlüsselversionen, die zum Löschen vorgemerkt wurden, wiederherstellen.

  • Mit benutzerdefinierten Rollen, die die Berechtigung cloudkms.cryptoKeyVersions.destroy enthalten, können Nutzer eine Schlüsselversion zum Löschen vormerken.

  • Mit benutzerdefinierten Rollen, die die Berechtigung cloudkms.cryptoKeyVersions.restore enthalten, können Nutzer eine Schlüsselversion wiederherstellen, die zum Löschen vorgemerkt wurde.

Schlüsselversion zum Löschen vormerken (Schlüsselversion löschen)

Nur eine Schlüsselversion, die aktiviert oder deaktiviert ist, kann zum Löschen vorgemerkt werden.

Das Schlüsselmaterial wird NICHT sofort gelöscht, um Probleme und Schäden durch böswillige Nutzer von DestroyCryptoKeyVersion zu verhindern. Die Schlüsselversion wird für 24 Stunden zum Löschen vorgemerkt und danach automatisch gelöscht. Es gibt keine Möglichkeit, diese Sicherheitsmaßnahme zu umgehen.

Durch das Löschen wird das Schlüsselmaterial vernichtet. Eine Aufzeichnung der Version ist aber weiterhin vorhanden (z. B. kann die Versionsnummer nicht noch einmal verwendet werden). Dieser Vorgang ist NICHT umkehrbar – mit dieser Version verschlüsselte Daten können nicht wiederhergestellt werden.

Console

  1. Rufen Sie in der Cloud Console die Seite Cryptographic Keys (Kryptografische Schlüssel) auf.
    Zur Seite "Cryptographic Keys" ("Kryptografische Schlüssel")

  2. Klicken Sie auf den Namen des Schlüsselrings, der den Schlüssel enthält, dessen Schlüsselversion zum Löschen vorgemerkt werden soll.

  3. Klicken Sie auf den Schlüssel, dessen Schlüsselversion Sie zum Löschen vormerken möchten.

  4. Klicken Sie auf die Schlüsselversion, die Sie zum Löschen vormerken möchten.

  5. Klicken Sie auf Löschen.

  6. Wenn Sie aufgefordert werden, das Vormerken der Schlüsselversion zum Löschen zu bestätigen, geben Sie den Schlüsselnamen ein und klicken Sie auf Zum Löschen vormerken.

Befehlszeile

Wenn Sie eine Schlüsselversion zum Löschen vormerken möchten, geben Sie die key-version, den key-name, den keyring-name und die location an.

gcloud kms keys versions destroy key-version \
  --location location \
  --keyring keyring-name \
  --key key-name

C#

      public static void DestroyCryptoKeyVersion(string projectId, string locationId, string keyRingId, string cryptoKeyId, string versionId)
      {
          KeyManagementServiceClient client = KeyManagementServiceClient.Create();

          // The CryptoKeyVersion to destroy.
          CryptoKeyVersionName versionName =
              new CryptoKeyVersionName(projectId, locationId, keyRingId, cryptoKeyId, versionId);

          CryptoKeyVersion result = client.DestroyCryptoKeyVersion(versionName);

          Console.Write($"Destroyed Crypto Key Version: {result.Name}");
      }

Go

import (
	"context"
	"fmt"
	"io"

	cloudkms "cloud.google.com/go/kms/apiv1"
	kmspb "google.golang.org/genproto/googleapis/cloud/kms/v1"
)

// destroyCryptoKeyVersion marks a specified key version for deletion.
// The key can be restored if requested within 24 hours.
func destroyCryptoKeyVersion(w io.Writer, name string) error {
	// name := "projects/PROJECT_ID/locations/global/keyRings/RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1"
	ctx := context.Background()
	client, err := cloudkms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("cloudkms.NewKeyManagementClient: %v", err)
	}
	// Build the request.
	req := &kmspb.DestroyCryptoKeyVersionRequest{
		Name: name,
	}
	// Call the API.
	result, err := client.DestroyCryptoKeyVersion(ctx, req)
	if err != nil {
		return fmt.Errorf("DestroyCryptoKeyVersion: %v", err)
	}
	fmt.Fprintf(w, "Destroyed crypto key version: %s", result)
	return nil
}

Java


/**
 * Marks the given version of a crypto key to be destroyed at a scheduled future point.
 */
public static CryptoKeyVersion destroyCryptoKeyVersion(
    String projectId, String locationId, String keyRingId, String cryptoKeyId, String version)
    throws IOException {

  // Create the Cloud KMS client.
  try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {

    // The resource name of the cryptoKey version
    String versionName = CryptoKeyVersionName.format(
        projectId, locationId, keyRingId, cryptoKeyId, version);

    // Destroy the cryptoKey version
    CryptoKeyVersion destroyed = client.destroyCryptoKeyVersion(versionName);

    return destroyed;
  }
}

Node.js

async function destroyCryptoKeyVersion(
  projectId = 'your-project-id', // Your GCP projectId
  keyRingId = 'my-key-ring', // Name of the crypto key version's key ring
  cryptoKeyId = 'my-key', // Name of the version's crypto key
  version = 1234 // The version's id
) {
  // Import the library and create a client
  const kms = require('@google-cloud/kms');
  const client = new kms.KeyManagementServiceClient();

  // The location of the crypto key versions's key ring, e.g. "global"
  const locationId = 'global';

  // Get the full path to the crypto key version
  const name = client.cryptoKeyVersionPath(
    projectId,
    locationId,
    keyRingId,
    cryptoKeyId,
    version
  );

  // destroys a crypto key version
  const [result] = await client.destroyCryptoKeyVersion({name});
  console.log(`Crypto key version ${result.name} destroyed.`);
}

PHP

use Google\Cloud\Kms\V1\KeyManagementServiceClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $locationId = 'The location ID of the crypto key. Can be "global", "us-west1", etc.';
// $keyRingId = 'The KMS key ring ID';
// $cryptoKeyId = 'The KMS key ID';
// $version = 'The KMS key version number';

$kms = new KeyManagementServiceClient();

// The resource name of the Crypto Key version.
$cryptoKeyVersionName = $kms->cryptoKeyVersionName($projectId, $locationId, $keyRingId, $cryptoKeyId, $version);

// Get the CryptoKey.
$cryptoKeyVersion = $kms->destroyCryptoKeyVersion($cryptoKeyVersionName);

printf('Destroyed version %s for cryptoKey %s in keyRing %s' . PHP_EOL, $version, $cryptoKeyId, $keyRingId);

Python

def destroy_crypto_key_version(
        project_id, location_id, key_ring_id, crypto_key_id, version_id):
    """Schedules a CryptoKeyVersion associated with a given CryptoKey and
    KeyRing for destruction 24 hours in the future."""

    from google.cloud import kms_v1

    # Creates an API client for the KMS API.
    client = kms_v1.KeyManagementServiceClient()

    # Construct the resource name of the CryptoKeyVersion.
    name = client.crypto_key_version_path(project_id, location_id, key_ring_id,
                                          crypto_key_id, version_id)

    # Use the KMS API to mark the CryptoKeyVersion for destruction.
    response = client.destroy_crypto_key_version(name)

    # Print results
    print('CryptoKeyVersion {}\'s state has been set to {}.'.format(
        name, response.state))

Ruby

# project_id    = "Your Google Cloud project ID"
# location_id   = "The location of the key ring"
# key_ring_id   = "The ID of the key ring"
# crypto_key_id = "The ID of the crypto key"
# version_id    = "Version of the crypto key"

require "google/cloud/kms/v1"
CloudKMS = Google::Cloud::Kms::V1

# Initialize the client
client = CloudKMS::KeyManagementServiceClient.new

# The crypto key version to destroy
version = CloudKMS::KeyManagementServiceClient.crypto_key_version_path(
  project_id, location_id, key_ring_id, crypto_key_id, version_id
)

# Destroy the crypto key version
destroyed = client.destroy_crypto_key_version version

puts "Destroyed version #{version_id} of #{crypto_key_id}"

Ein Beispiel dafür, wie Sie darüber benachrichtigt werden können, wenn eine Schlüsselversion zum Löschen vorgesehen ist, finden Sie unter Stackdriver Monitoring mit Cloud KMS verwenden.

Schlüsselversion wiederherstellen

Eine Schlüsselversion, die zum Löschen vorgemerkt wurde, kann wiederhergestellt werden, damit sie nicht automatisch gelöscht wird. Dadurch erhält die Schlüsselversion, die zum Löschen vorgemerkt wurde, den Status "deaktiviert".

Console

  1. Rufen Sie in der Cloud Console die Seite Cryptographic Keys (Kryptografische Schlüssel) auf.
    Zur Seite "Cryptographic Keys" ("Kryptografische Schlüssel")

  2. Klicken Sie auf den Namen des Schlüsselbunds, der den Schlüssel enthält, dessen Schlüsselversion Sie wiederherstellen möchten.

  3. Klicken Sie auf den Schlüssel, dessen Schlüsselversion Sie wiederherstellen möchten.

  4. Klicken Sie auf die Schlüsselversion, die Sie wiederherstellen möchten.

  5. Klicken Sie auf Wiederherstellen.

  6. Wenn Sie aufgefordert werden, die Wiederherstellung der Schlüsselversion zu bestätigen, klicken Sie auf Wiederherstellen.

Befehlszeile

Wenn Sie eine Schlüsselversion wiederherstellen möchten, die zum Löschen vorgemerkt, aber noch nicht gelöscht wurde, geben Sie die key-version, den key-name, den keyring-name und die location an.

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

C#

      public static void RestoreCryptoKeyVersion(string projectId, string locationId, string keyRingId, string cryptoKeyId, string versionId)
      {
          KeyManagementServiceClient client = KeyManagementServiceClient.Create();

          // The CryptoKeyVersion to restore.
          CryptoKeyVersionName versionName =
              new CryptoKeyVersionName(projectId, locationId, keyRingId, cryptoKeyId, versionId);

          CryptoKeyVersion result = client.RestoreCryptoKeyVersion(versionName);

          Console.Write($"Restored Crypto Key Version: {result.Name}");
      }

Go

import (
	"context"
	"fmt"
	"io"

	cloudkms "cloud.google.com/go/kms/apiv1"
	kmspb "google.golang.org/genproto/googleapis/cloud/kms/v1"
)

// restoreCryptoKeyVersion attempts to recover a key that has been marked for destruction within the last 24 hours.
func restoreCryptoKeyVersion(w io.Writer, keyVersionName string) error {
	// keyVersionName := "projects/PROJECT_ID/locations/global/keyRings/RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1"
	ctx := context.Background()
	client, err := cloudkms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("cloudkms.NewKeyManagementClient: %v", err)
	}
	// Build the request.
	req := &kmspb.RestoreCryptoKeyVersionRequest{
		Name: keyVersionName,
	}
	// Call the API.
	result, err := client.RestoreCryptoKeyVersion(ctx, req)
	if err != nil {
		return fmt.Errorf("RestoreCryptoKeyVersion: %v", err)
	}
	fmt.Fprintf(w, "Restored crypto key version: %s", result)
	return nil
}

Java


/**
 * Restores the given version of a crypto key that is currently scheduled for destruction.
 */
public static CryptoKeyVersion restoreCryptoKeyVersion(
    String projectId, String locationId, String keyRingId, String cryptoKeyId, String version)
    throws IOException {

  // Create the Cloud KMS client.
  try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {

    // The resource name of the cryptoKey version
    String versionName = CryptoKeyVersionName.format(
        projectId, locationId, keyRingId, cryptoKeyId, version);

    CryptoKeyVersion restored = client.restoreCryptoKeyVersion(versionName);

    return restored;
  }
}

Node.js

async function restoreCryptoKeyVersion(
  projectId = 'your-project-id', // Your GCP projectId
  keyRingId = 'my-key-ring', // Name of the crypto key version's key ring
  cryptoKeyId = 'my-key', // Name of the version's crypto key
  version = 1234 // The version's id
) {
  // Import the library and create a client
  const kms = require('@google-cloud/kms');
  const client = new kms.KeyManagementServiceClient();

  // The location of the crypto key versions's key ring, e.g. "global"
  const locationId = 'global';

  // Get the full path to the crypto key version
  const name = client.cryptoKeyVersionPath(
    projectId,
    locationId,
    keyRingId,
    cryptoKeyId,
    version
  );

  // restores a crypto key version
  const [result] = await client.restoreCryptoKeyVersion({name});
  console.log(`Crypto key version ${result.name} restored.`);
}

PHP

use Google\Cloud\Kms\V1\KeyManagementServiceClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $locationId = 'The location ID of the crypto key. Can be "global", "us-west1", etc.';
// $keyRingId = 'The KMS key ring ID';
// $cryptoKeyId = 'The KMS key ID';
// $version = 'The KMS key version number';

$kms = new KeyManagementServiceClient();

// The resource name of the Crypto Key version.
$cryptoKeyVersionName = $kms->cryptoKeyVersionName($projectId, $locationId, $keyRingId, $cryptoKeyId, $version);

// Get the CryptoKey.
$cryptoKeyVersion = $kms->restoreCryptoKeyVersion($cryptoKeyVersionName);

printf('Restored version %s for cryptoKey %s in keyRing %s' . PHP_EOL, $version, $cryptoKeyId, $keyRingId);

Python

def restore_crypto_key_version(
        project_id, location_id, key_ring_id, crypto_key_id, version_id):
    """Restores a CryptoKeyVersion that is scheduled for destruction."""

    from google.cloud import kms_v1

    # Creates an API client for the KMS API.
    client = kms_v1.KeyManagementServiceClient()

    # Construct the resource name of the CryptoKeyVersion.
    name = client.crypto_key_version_path(project_id, location_id, key_ring_id,
                                          crypto_key_id, version_id)

    # Use the KMS API to restore the CryptoKeyVersion.
    response = client.restore_crypto_key_version(name)

    # Print results
    print('CryptoKeyVersion {}\'s state has been set to {}.'.format(
        name, response.state))

Ruby

# project_id    = "Your Google Cloud project ID"
# location_id   = "The location of the key ring"
# key_ring_id   = "The ID of the key ring"
# crypto_key_id = "The ID of the crypto key"
# version_id    = "Version of the crypto key"

require "google/cloud/kms/v1"
CloudKMS = Google::Cloud::Kms::V1

# Initialize the client
client = CloudKMS::KeyManagementServiceClient.new

# The crypto key version to restore
version = CloudKMS::KeyManagementServiceClient.crypto_key_version_path(
  project_id, location_id, key_ring_id, crypto_key_id, version_id
)

# Restore the crypto key version
restored = client.restore_crypto_key_version version

puts "Restored version #{version_id} of #{crypto_key_id}"