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

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

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

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

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

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

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

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

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

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

הסבר על הסיכונים

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

המסוף

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

    כניסה אל Key Management

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

  3. לוחצים על השמדה בכותרת.

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

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: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות.

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

C#

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

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

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

כששולחים את בקשת ההשמדה, הסטטוס של גרסת המפתח משתנה ל'מתוזמן להשמדה'. אחרי שחלף הזמן שמוגדר למשך הזמן שבו המפתח מתוזמן להשמדה, הסטטוס של גרסת המפתח משתנה ל'הושמד'. המשמעות היא שהתחילה מחיקה לוגית של חומר המפתח ממערכות פעילות, והלקוח לא יכול לשחזר את חומר המפתח. חומר המפתח יכול להישאר במערכות של 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 \
    --keyring key-ring \
    --location location

מחליפים את key-version בגרסת המפתח שרוצים לשחזר. מחליפים את key בשם המפתח. מחליפים את key-ring בשם אוסף המפתחות שבו נמצא המפתח. מחליפים את location במיקום ב-Cloud KMS של אוסף המפתחות.

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

C#

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

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

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

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

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

כדי להשמיד גרסת מפתח, למי שקורא לפונקציה צריכה להיות הרשאת cloudkms.cryptoKeyVersions.destroy IAM למפתח, לאוסף המפתחות או לפרויקט, לתיקייה או לארגון.

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

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

ציר הזמן של המחיקה

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