Menghancurkan dan memulihkan versi kunci

Halaman ini menunjukkan cara menjadwalkan versi kunci Cloud Key Management Service untuk dihancurkan secara permanen. Di Cloud KMS, materi kunci kriptografi yang Anda gunakan untuk mengenkripsi, mendekripsi, menandatangani, dan memverifikasi data disimpan dalam versi kunci. Kunci memiliki nol atau beberapa versi kunci. Saat Anda merotasi kunci, Anda akan membuat versi kunci baru.

Menghancurkan versi kunci berarti materi kunci akan dihapus secara permanen. Saat Anda menghancurkan versi kunci, detail lainnya seperti nama kunci dan nomor versi kunci tidak akan dihapus. Setelah kunci dihancurkan, data yang dienkripsi dengan versi kunci tidak dapat didekripsi.

Satu-satunya pengecualian adalah impor ulang kunci, yang memungkinkan Anda memulihkan kunci yang sebelumnya diimpor dengan memberikan materi kunci asli yang sama.

Karena penghancuran kunci umumnya tidak dapat diurungkan, Cloud KMS tidak mengizinkan Anda menghancurkan versi kunci secara langsung. Sebagai gantinya, Anda menjadwalkan versi kunci untuk dihancurkan. Versi kunci tetap dalam status dijadwalkan untuk dihancurkan state selama waktu yang dapat dikonfigurasi. Selama durasi dijadwalkan untuk dihancurkan, Anda dapat memulihkan versi kunci untuk membatalkan penghancurannya.

Durasi dijadwalkan untuk dihancurkan default adalah 30 hari. Anda dapat menetapkan durasi dijadwalkan untuk dihancurkan kustom untuk kunci selama pembuatan kunci. Organisasi Anda dapat menerapkan durasi dijadwalkan untuk dihancurkan minimum dengan menetapkan batasan Durasi dijadwalkan untuk dihancurkan minimum per kunci dalam kebijakan organisasi Anda.

Anda juga dapat mengelola akses ke kunci menggunakan Identity and Access Management (IAM). Operasi IAM konsisten dalam hitungan detik. Untuk mengetahui informasi selengkapnya, lihat Menggunakan IAM.

Anda juga dapat menonaktifkan versi kunci untuk sementara. Sebaiknya nonaktifkan versi kunci sebelum menjadwalkannya untuk dihancurkan sebagai bagian dari prosedur Anda untuk memastikan kunci dapat dihancurkan dengan aman. Bergantung pada kebijakan organisasi Anda, Anda mungkin harus menonaktifkan versi kunci sebelum dapat menjadwalkannya untuk dihancurkan. Untuk mengetahui informasi selengkapnya tentang cara mengontrol penghancuran versi kunci menggunakan kebijakan organisasi, lihat Mengontrol penghancuran versi kunci.

Di bagian lain dokumen ini, menjadwalkan kunci untuk dihancurkan disebut sebagai menghancurkan kunci, meskipun penghancuran tidak langsung terjadi.

Sebelum memulai

Memahami risiko

Menghancurkan versi kunci adalah operasi permanen. Menghancurkan versi kunci yang masih diperlukan memiliki risiko, termasuk hal berikut:

  • Gangguan layanan: Jika Anda menghancurkan kunci yang diperlukan untuk memulai container atau instance, layanan atau aplikasi Anda dapat menjadi tidak tersedia.

  • Kehilangan data permanen: Jika Anda menghancurkan kunci yang digunakan untuk mengenkripsi data, data tersebut akan menjadi tidak tersedia. Data yang dienkripsi dengan kunci yang telah dihancurkan dianggap crypto-shredded. Dalam beberapa kasus, menghancurkan kunci dapat menyebabkan resource terenkripsi dihapus secara permanen.

  • Masalah peraturan atau kepatuhan: Jika Anda menghancurkan kunci yang diperlukan untuk mengakses data yang tunduk pada periode retensi sebelum periode retensi tersebut selesai, Anda mungkin melanggar persyaratan peraturan atau kepatuhan.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menghancurkan dan memulihkan versi kunci, minta administrator untuk memberi Anda peran IAM Admin Cloud KMS (roles/cloudkms.admin) pada kunci. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Memeriksa apakah versi kunci sedang digunakan

Sebelum menghancurkan versi kunci, selesaikan langkah-langkah berikut untuk melihat apakah versi kunci sedang digunakan:

  1. Lihat detail pelacakan penggunaan kunci untuk kunci tersebut. Jika ada resource yang dilindungi oleh versi kunci yang ingin Anda hancurkan, enkripsi ulang resource tersebut dengan versi kunci lain.

  2. Aktifkan log untuk layanan atau aplikasi apa pun yang dapat menggunakan versi kunci.

  3. Aktifkan log di project Cloud KMS yang berisi kunci.

  4. Nonaktifkan versi kunci. Menonaktifkan versi kunci akan mencegah versi kunci digunakan. Dengan versi kunci dinonaktifkan, setiap upaya untuk menggunakan versi kunci akan gagal.

  5. Pantau log hingga Anda yakin bahwa tidak ada aplikasi atau layanan yang masih mengandalkan versi kunci yang Anda nonaktifkan. Jika ada error yang menunjukkan akses ke versi kunci gagal, konfigurasi aplikasi atau resource untuk menggunakan versi kunci lain.

    Lamanya waktu yang Anda habiskan untuk memantau log sebelum menghancurkan versi kunci bergantung pada jenis kunci, pola penggunaannya, dan tingkat sensitivitasnya. Misalnya, sebelum menghancurkan versi kunci yang digunakan dalam proses yang berjalan setiap tiga bulan, pertahankan versi kunci dinonaktifkan hingga proses tersebut berhasil diselesaikan.

  6. Periksa penggunaan kunci terhadap persyaratan kepatuhan yang berlaku. Misalnya, versi kunci dan data yang dienkripsi dengannya mungkin tunduk pada periode retensi data.

Langkah-langkah ini membantu Anda mengidentifikasi apakah kunci mungkin masih diperlukan; namun, langkah-langkah ini tidak dapat menjamin bahwa versi kunci tidak lagi diperlukan. Organisasi Anda harus menerapkan prosedur dan panduan untuk memastikan bahwa penghancuran versi kunci tidak akan menyebabkan efek negatif.

Menghancurkan versi kunci

Anda dapat menghancurkan versi kunci yang diaktifkan atau dinonaktifkan.

Konsol

  1. Di Google Cloud konsol, buka halaman Key Management.

    Buka Key Management

  2. Centang kotak di samping versi kunci yang ingin Anda jadwalkan untuk dihancurkan.

  3. Klik Destroy di header.

  4. Di perintah konfirmasi, masukkan nama kunci, lalu klik Schedule Destruction.

gcloud

Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke versi terbaru Google Cloud CLI.

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

Ganti kode berikut:

  • KEY_VERSION: nomor versi kunci yang ingin Anda hancurkan.
  • KEY_NAME: nama kunci yang berisi versi kunci yang ingin Anda hancurkan.
  • KEY_RING: nama key ring yang berisi versi kunci yang ingin Anda hancurkan.
  • LOCATION: lokasi key ring yang berisi versi kunci yang ingin Anda hancurkan.

Untuk mengetahui informasi tentang semua flag dan nilai yang mungkin, jalankan perintah dengan flag --help.

C#

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan C# dan instal Cloud KMS C# SDK.


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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Go dan instal Cloud KMS Go SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Java dan instal Cloud KMS Java SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Node.js dan instal Cloud KMS Node.js SDK.

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

Untuk menjalankan kode ini, pertama-tama pelajari cara menggunakan PHP di Google Cloud dan instal Cloud KMS PHP SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Python dan instal Cloud KMS Python SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Ruby dan instal Cloud KMS Ruby SDK.

# 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

Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan cara menggunakan API. Untuk mengetahui informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.

Hancurkan versi kunci dengan memanggil metode 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"

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi versi kunci yang ingin Anda hancurkan.
  • LOCATION: lokasi key ring yang berisi versi kunci yang ingin Anda hancurkan.
  • KEY_RING: nama key ring yang berisi versi kunci yang ingin Anda hancurkan.
  • KEY_NAME: nama kunci yang berisi versi kunci yang ingin Anda hancurkan.
  • KEY_VERSION: nomor versi kunci yang ingin Anda hancurkan.

Jika Anda tidak dapat menghancurkan versi kunci, organisasi Anda mungkin mengharuskan versi kunci dinonaktifkan sebelum dihancurkan. Coba nonaktifkan versi kunci sebelum menghancurkannya.

Saat Anda mengirimkan permintaan penghancuran, status versi kunci akan menjadi dijadwalkan untuk dihancurkan. Setelah durasi dijadwalkan untuk dihancurkan yang dikonfigurasi untuk kunci berlalu, status versi kunci akan menjadi dihancurkan, yang berarti penghapusan logis materi kunci dari sistem aktif telah dimulai, dan materi kunci tidak dapat dipulihkan oleh pelanggan. Materi kunci dapat tetap berada di sistem Google hingga 45 hari sejak waktu penghancuran yang dijadwalkan.

Untuk menerima pemberitahuan saat versi kunci dijadwalkan untuk dihancurkan, lihat Menggunakan Cloud Monitoring dengan Cloud KMS.

Versi kunci yang dihancurkan tidak ditagih sebagai resource.

Menghancurkan kunci eksternal

Untuk menghapus secara permanen hubungan antara kunci Cloud EKM dan kunci eksternal, Anda dapat menghancurkan versi kunci. Setelah periode Dijadwalkan untuk dihancurkan berlalu, kunci akan dihancurkan. Setelah versi kunci dihancurkan, Anda tidak dapat lagi mengenkripsi data atau mendekripsi data yang dienkripsi dengan versi kunci Cloud EKM.

Menghancurkan versi kunci yang dikelola secara manual di Cloud KMS tidak akan mengubah kunci di pengelola kunci eksternal. Sebaiknya hancurkan kunci atau versi kunci terlebih dahulu di Google Cloud. Setelah versi kunci Cloud EKM dihancurkan, Anda dapat menghancurkan materi kunci di pengelola kunci eksternal.

Menghancurkan versi kunci eksternal terkoordinasi di Cloud KMS pertama-tama menghancurkan versi kunci di Google Cloud, lalu mengirimkan permintaan penghancuran ke EKM untuk menghancurkan materi kunci eksternal.

Memulihkan versi kunci

Selama periode saat status versi kunci dijadwalkan untuk dihancurkan, Anda dapat memulihkan versi kunci dengan mengirimkan permintaan pemulihan.

Konsol

  1. Di Google Cloud konsol, buka halaman Key Management.

    Buka Key Management

  2. Klik nama key ring yang berisi versi kunci yang ingin Anda pulihkan.

  3. Klik kunci yang berisi versi kunci yang ingin Anda pulihkan.

  4. Centang kotak di samping versi kunci yang ingin Anda pulihkan.

  5. Klik Restore di header.

  6. Di perintah konfirmasi, klik Restore.

gcloud

Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke versi terbaru Google Cloud CLI.

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

Ganti kode berikut:

  • KEY_VERSION: nomor versi kunci yang ingin Anda pulihkan.
  • KEY_NAME: nama kunci yang berisi versi kunci yang ingin Anda pulihkan.
  • KEY_RING: nama key ring yang berisi versi kunci yang ingin Anda pulihkan.
  • LOCATION: lokasi key ring yang berisi versi kunci yang ingin Anda pulihkan.

Untuk mengetahui informasi tentang semua flag dan nilai yang mungkin, jalankan perintah dengan flag --help.

C#

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan C# dan instal Cloud KMS C# SDK.


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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Go dan instal Cloud KMS Go SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Java dan instal Cloud KMS Java SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Node.js dan instal Cloud KMS Node.js SDK.

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

Untuk menjalankan kode ini, pertama-tama pelajari cara menggunakan PHP di Google Cloud dan instal Cloud KMS PHP SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Python dan instal Cloud KMS Python SDK.

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

Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Ruby dan instal Cloud KMS Ruby SDK.

# 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

Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan cara menggunakan API. Untuk mengetahui informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.

Pulihkan versi kunci dengan memanggil metode CryptoKeyVersions.restore.

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

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi versi kunci yang ingin Anda pulihkan.
  • LOCATION: lokasi key ring yang berisi versi kunci yang ingin Anda pulihkan.
  • KEY_RING: nama key ring yang berisi versi kunci yang ingin Anda pulihkan.
  • KEY_NAME: nama kunci yang berisi versi kunci yang ingin Anda pulihkan.
  • KEY_VERSION: nomor versi kunci yang ingin Anda pulihkan.

Setelah permintaan pemulihan selesai, status versi kunci akan menjadi dinonaktifkan. Anda harus mengaktifkan kunci sebelum dapat menggunakannya.

Izin IAM yang diperlukan

Untuk menghancurkan versi kunci, pemanggil memerlukan izin IAM cloudkms.cryptoKeyVersions.destroy pada kunci, key ring, atau project, folder, atau organisasi.

Untuk memulihkan versi kunci, pemanggil memerlukan izin cloudkms.cryptoKeyVersions.restore.

Kedua izin ini diberikan ke peran Admin Cloud KMS (roles/cloudkms.admin).

Linimasa penghapusan

Cloud KMS berkomitmen untuk menghapus materi kunci pelanggan dari semua infrastruktur Google dalam waktu 45 hari sejak waktu penghancuran yang dijadwalkan. Hal ini mencakup penghapusan data dari sistem aktif dan cadangan pusat data. Data pelanggan lainnya data tunduk pada standar Google Cloud linimasa penghapusan selama 180 hari.