השמדה ושחזור של גרסאות מפתח

בדף הזה מוסבר איך לתזמן גרסת מפתח של Cloud Key Management Service להשמדה סופית. ב-Cloud KMS, חומרי המפתחות הקריפטוגרפיים שמשמשים להצפנה, לפענוח, לחתימה ולאימות של נתונים מאוחסנים בגרסת מפתח. למפתח יכולות להיות אפס גרסאות או יותר. כשמבצעים רוטציה למפתח, נוצרת גרסת מפתח חדשה.

השמדה של גרסת מפתח פירושה שחומר המפתח נמחק באופן סופי. כשמשמידים גרסת מפתח, פרטים אחרים כמו שם המפתח ומספר גרסת המפתח לא נמחקים. אחרי שהמפתח מושמד, אי אפשר לפענח את הנתונים שהוצפנו באמצעות גרסת המפתח.

החריג היחיד הוא ייבוא מחדש של מפתח, שמאפשר לשחזר מפתח שיובא בעבר על ידי מתן אותו חומר מפתח מקורי.

בדרך כלל אי אפשר לבטל השמדה של מפתח, ולכן ב-Cloud KMS אי אפשר להשמיד גרסאות של מפתחות באופן מיידי. במקום זאת, אתם מתזמנים גרסת מפתח להשמדה. גרסת המפתח נשארת במצב "מתוזמן להשמדה" למשך זמן שניתן להגדרה. במהלך תקופת ההמתנה להשמדה, אתם יכולים לשחזר את גרסת המפתח כדי לבטל את ההשמדה שלה.

משך הזמן שמוגדר כברירת מחדל לתזמון ההשמדה הוא 30 יום. אתם יכולים להגדיר משך זמן מותאם אישית להשמדה מתוזמנת של מפתח במהלך יצירת המפתח. כדי לאכוף משך זמן מינימלי להמתנה להשמדה, אפשר להגדיר את האילוץ Minimum destroy scheduled duration per key במדיניות הארגון.

אתם יכולים גם לנהל את הגישה למפתח באמצעות ניהול זהויות והרשאות גישה (IAM). פעולות IAM הן עקביות תוך שניות. למידע נוסף, קראו את המאמר שימוש ב-IAM.

אפשר גם להשבית גרסת מפתח באופן זמני. כחלק מהתהליכים שנועדו לוודא שאפשר להשמיד את המפתח באופן בטוח, מומלץ להשבית את גרסאות המפתח לפני שמתזמנים את ההשמדה שלהן. בהתאם למדיניות הארגון, יכול להיות שתצטרכו להשבית גרסת מפתח לפני שתוכלו לתזמן את ההשמדה שלה. מידע נוסף על שליטה בהשמדה של גרסאות מפתחות באמצעות כללי מדיניות של הארגון זמין במאמר שליטה בהשמדה של גרסאות מפתחות.

בהמשך המסמך הזה, תזמון מפתח להשמדה נקרא "השמדת המפתח", למרות שההשמדה לא מתבצעת באופן מיידי.

לפני שמתחילים

הבנת הסיכונים

השמדה של גרסת מפתח היא פעולה סופית. השמדה של גרסת מפתח שעדיין נדרשת כרוכה בסיכונים, כולל:

  • הפסקת שירות: אם תשמידו מפתח שנדרש כדי להפעיל קונטיינר או מכונה, יכול להיות שהשירותים או האפליקציות שלכם לא יהיו זמינים.

  • אובדן נתונים בלתי הפיך: אם משמידים מפתח ששימש להצפנת נתונים, הנתונים האלה לא יהיו זמינים יותר. נתונים שמוצפנים באמצעות מפתח שהושמד נחשבים לנתונים שעברו גריסה קריפטוגרפית. במקרים מסוימים, השמדת מפתח יכולה לגרום למחיקה סופית של משאבים מוצפנים.

  • בעיות רגולציה או תאימות: אם תשמידו מפתח שנדרש כדי לגשת לנתונים שכפופים לתקופת שמירה, לפני שתקופת השמירה הזו תסתיים, יכול להיות שתפרו דרישת רגולציה או תאימות.

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות להשמדה ולשחזור של גרסאות מפתחות, בקשו מהאדמין להקצות לכם את התפקיד אדמין של Cloud KMS (roles/cloudkms.admin) ב-IAM במפתח. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

בדיקה אם גרסת המפתח נמצאת בשימוש

לפני שמשמידים גרסת מפתח, צריך לבצע את הפעולות הבאות כדי לבדוק אם גרסת המפתח נמצאת בשימוש:

  1. צפייה בפרטי המעקב אחרי השימוש במפתח. אם יש משאבים שמוגנים על ידי גרסת המפתח שאתם רוצים להשמיד, הצפינו אותם מחדש באמצעות גרסת מפתח אחרת.

  2. מפעילים את היומנים בכל שירות או אפליקציה שבהם יכול להיות שמשתמשים בגרסת המפתח.

  3. מפעילים את היומנים בפרויקט ב-Cloud KMS שמכיל את המפתח.

  4. משביתים את גרסת המפתח. השבתת גרסת המפתח מונעת את השימוש בה. אחרי שמשביתים את גרסת המפתח, כל הניסיונות להשתמש בה נכשלים.

  5. עוקבים אחרי היומנים עד שמוודאים שאף אפליקציה או שירות לא מסתמכים יותר על גרסת המפתח שהושבתה. אם מופיעות שגיאות שמציינות שהגישה לגרסת המפתח נכשלה, צריך להגדיר את האפליקציה או המשאב כך שישתמשו בגרסת מפתח אחרת.

    משך הזמן שבו אתם עוקבים אחרי היומנים לפני שאתם משמידים גרסת מפתח תלוי בסוג המפתח, בדפוס השימוש בו וברמת הרגישות שלו. לדוגמה, לפני שמשמידים גרסת מפתח שמשמשת בתהליך שפועל מדי רבעון, צריך להשבית את גרסת המפתח עד שהתהליך הזה מסתיים בהצלחה.

  6. בודקים את השימוש במפתח בהתאם לדרישות התאימות הרלוונטיות. לדוגמה, יכול להיות שגרסת המפתח והנתונים שהוצפנו באמצעותה כפופים לתקופות שמירת נתונים.

השלבים האלה עוזרים לזהות אם עדיין יש צורך במפתח, אבל הם לא מבטיחים שגרסת מפתח מסוימת כבר לא נחוצה. כדאי להטמיע בארגון נהלים והנחיות כדי לוודא שהשמדה של גרסת מפתח לא תגרום להשפעות שליליות.

השמדה של גרסת מפתח

אפשר להשמיד גרסת מפתח פעילה או מושבתת.

המסוף

  1. נכנסים לדף Key Management במסוף Cloud de Confiance .

    כניסה לדף Key Management

  2. מסמנים את התיבה לצד גרסת המפתח שרוצים לתזמן להשמדה.

  3. בכותרת, לוחצים על Destroy.

  4. בהודעת האישור, מזינים את שם המפתח ולוחצים על Schedule Destruction.

gcloud

כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה העדכנית של Google Cloud CLI או לשדרג אליה.

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

מחליפים את מה שכתוב בשדות הבאים:

  • ‫KEY_VERSION: מספר גרסת המפתח שרוצים להשמיד.
  • ‫KEY_NAME: שם המפתח שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫KEY_RING: השם של אוסף המפתחות שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫LOCATION: המיקום של אוסף המפתחות שמכיל את גרסת המפתח שרוצים להשמיד.

כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.

C#

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-C# ‎ ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Go ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Java ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך ללמוד על שימוש ב-PHP ב- Cloud de Confiance ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Python ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את 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

בדוגמאות האלה משתמשים ב-curl כצד הלקוח ב-HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.

משמידים גרסת מפתח באמצעות הפעלת השיטה 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"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: המזהה של הפרויקט שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫LOCATION: המיקום של אוסף המפתחות שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫KEY_RING: השם של אוסף המפתחות שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫KEY_NAME: שם המפתח שמכיל את גרסת המפתח שרוצים להשמיד.
  • ‫KEY_VERSION: מספר גרסת המפתח שרוצים להשמיד.

אם אתם לא מצליחים להשמיד גרסת מפתח, יכול להיות שהארגון שלכם דורש להשבית את גרסאות המפתח לפני ההשמדה. כדאי לנסות להשבית את גרסת המפתח לפני שמשמידים אותה.

כששולחים את בקשת ההשמדה, הסטטוס של גרסת המפתח משתנה ל-scheduled for destruction. אחרי שחלף משך הזמן שהוגדר למפתח בתקופה Scheduled for destruction, הסטטוס של גרסת המפתח משתנה ל-destroyed, כלומר התחילה המחיקה הלוגית של חומר המפתח ממערכות פעילות, והלקוח לא יכול לשחזר את חומר המפתח. חומר המפתחות יכול להישאר במערכות של Google עד 45 ימים ממועד ההשמדה המתוזמן.

כדי לקבל התראה כשגרסת מפתח מתוזמנת להשמדה, קראו את המאמר שימוש ב-Cloud Monitoring עם Cloud KMS.

גרסאות מפתחות שהושמדו לא נחשבות למשאבים שמחויבים.

השמדת מפתחות חיצוניים

כדי להסיר באופן סופי את השיוך בין מפתח Cloud EKM למפתח חיצוני, אתם יכולים להשמיד את גרסת המפתח. אחרי שתקופת Scheduled for destruction מסתיימת, המפתח מושמד. אחרי שגרסת המפתח מושמדת, אי אפשר יותר להצפין נתונים או לפענח נתונים שהוצפנו באמצעות גרסת המפתח של Cloud EKM.

השמדה של גרסת מפתח בניהול ידני ב-Cloud KMS לא משנה את המפתח במנהל המפתחות החיצוני. מומלץ קודם להשמיד את המפתח או את גרסת המפתח ב- Cloud de Confiance by S3NS. אחרי שגרסת המפתח של Cloud EKM מושמדת, אתם יכולים להשמיד את חומר המפתח במנהל המפתחות החיצוני.

כשמשמידים גרסה של מפתח חיצוני מתואם ב-Cloud KMS, קודם מושמדת גרסת המפתח ב- Cloud de Confianceואז נשלחת בקשת השמדה ל-EKM כדי להשמיד את חומר המפתח החיצוני.

שחזור גרסת מפתח

במהלך התקופה שבה גרסת המפתח מתוזמנת להשמדה, אתם יכולים לשחזר אותה על ידי שליחת בקשת שחזור.

המסוף

  1. נכנסים לדף Key Management במסוף Cloud de Confiance .

    כניסה לדף Key Management

  2. לוחצים על השם של אוסף המפתחות שמכיל את גרסת המפתח שרוצים לשחזר.

  3. לוחצים על המפתח שמכיל את גרסת המפתח שרוצים לשחזר.

  4. מסמנים את התיבה לצד גרסת המפתח שרוצים לשחזר.

  5. לוחצים על שחזור בכותרת.

  6. בהודעת האישור, לוחצים על שחזור.

gcloud

כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה העדכנית של Google Cloud CLI או לשדרג אליה.

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

מחליפים את מה שכתוב בשדות הבאים:

  • ‫KEY_VERSION: מספר גרסת המפתח שרוצים לשחזר.
  • ‫KEY_NAME: שם המפתח שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫KEY_RING: השם של אוסף המפתחות שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫LOCATION: המיקום של אוסף המפתחות שמכיל את גרסת המפתח שרוצים לשחזר.

כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.

C#

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-C# ‎ ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Go ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Java ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך ללמוד על שימוש ב-PHP ב- Cloud de Confiance ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Python ולהתקין את 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

כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את 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

בדוגמאות האלה משתמשים ב-curl כצד הלקוח ב-HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.

כדי לשחזר גרסת מפתח, שולחים קריאה ל-method‏ 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"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: המזהה של הפרויקט שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫LOCATION: המיקום של אוסף המפתחות שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫KEY_RING: השם של אוסף המפתחות שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫KEY_NAME: שם המפתח שמכיל את גרסת המפתח שרוצים לשחזר.
  • ‫KEY_VERSION: מספר גרסת המפתח שרוצים לשחזר.

אחרי שהבקשה לשחזור מסתיימת, גרסת המפתח מושבתת. כדי להשתמש במפתח, צריך להפעיל אותו.

הרשאות IAM נדרשות

כדי להשמיד גרסת מפתח, מבצע הקריאה החוזרת צריך את הרשאת ה-IAM‏ cloudkms.cryptoKeyVersions.destroy במפתח, באוסף המפתחות, בפרויקט, בתיקייה או בארגון.

כדי לשחזר גרסת מפתח, צריך את ההרשאה cloudkms.cryptoKeyVersions.restore.

שתי ההרשאות האלה ניתנות לתפקיד "אדמין ב-Cloud KMS" (roles/cloudkms.admin).

לוח הזמנים למחיקה

ב-Cloud KMS, חומר המפתחות של הלקוחות נמחק מכל התשתית של Google תוך 45 יום מהמועד המתוזמן להשמדה. התהליך כולל הסרת נתונים ממערכות פעילות ומגיבויים של מרכזי נתונים. נתוני לקוחות אחרים כפופים לCloud de Confiance ציר הזמן הסטנדרטי למחיקה של 180 ימים.