Vom Kunden verwaltete Verschlüsselungsschlüssel (Customer Managed Encryption Keys, CMEK) verwenden

Auf dieser Seite wird gezeigt, wie Sie ein Dienstkonto und Schlüssel für vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-managed Encryption Keys, CMEK) einrichten und wie Sie eine Instanz erstellen, die einen CMEK nutzt. Weitere Informationen zur Verwendung von vom Kunden verwalteten Verschlüsselungsschlüsseln mit Cloud SQL finden Sie unter Von Kunden verwaltete Verschlüsselungsschlüssel – Übersicht.

Hinweis

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Sie müssen die Rolle "Cloud SQL-Administrator" in Ihrem Nutzerkonto haben.

    Zur IAM-Seite

  11. Enable the Cloud Key Management Service API.

    Enable the API

  12. Enable the Cloud SQL Admin API.

    Enable the API

Workflow zum Erstellen einer Cloud SQL-Instanz mit CMEK

  1. Nur gcloud- und API-Nutzer: Erstellen Sie ein Dienstkonto für jedes Projekt, für das vom Kunden verwaltete Verschlüsselungsschlüssel erforderlich sind.
  2. Erstellen Sie einen Schlüsselbund und Schlüssel und legen Sie den Speicherort für jeden Schlüssel fest. Der Speicherort ist die Google Cloud-Region.
  3. Nur gcloud- und API-Nutzer: Gewähren Sie dem Dienstkonto Zugriff auf den Schlüssel.
  4. Notieren Sie sich die Schlüssel-ID (KMS_KEY_ID), den Speicherort des Schlüssels (GCP_REGION) und die Schlüsselbund-ID (KMS_KEYRING_ID)
  5. Öffnen Sie ein Projekt und erstellen Sie eine Cloud SQL-Instanz mit den folgenden Optionen:
    1. Derselbe Speicherort wie der vom Kunden verwaltete Verschlüsselungsschlüssel
    2. Die vom Kunden verwaltete Schlüsselkonfiguration
    3. Die vom Kunden verwaltete Verschlüsselungsschlüssel-ID

Ihre Cloud SQL-Instanz ist jetzt mit CMEK aktiviert.

Dienstkonto erstellen

Sie müssen für jedes Projekt ein Dienstkonto erstellen, das vom Kunden verwaltete Verschlüsselungsschlüssel erfordert.

Gewähren Sie eine der folgenden Rollen, um zuzulassen, dass ein Nutzer Dienstkonten verwalten kann:

  • Dienstkontonutzer (roles/iam.serviceAccountUser): Umfasst Berechtigungen zum Auflisten von Dienstkonten, Abrufen von Details zu einem Dienstkonto und zum Übernehmen der Identität eines Dienstkontos.
  • Dienstkontoadministrator (roles/iam.serviceAccountAdmin): Umfasst Berechtigungen zum Auflisten von Dienstkonten und zum Abrufen von Details zu einem Dienstkonto. Umfasst außerdem Berechtigungen zum Erstellen, Aktualisieren und Löschen von Dienstkonten sowie zum Ansehen oder Ändern der Cloud SQL for MySQL-Richtlinie für ein Dienstkonto.

Derzeit können Sie mit den gcloud CLI-Befehlen nur die Art von Dienstkonto erstellen, die Sie für vom Kunden verwaltete Verschlüsselungsschlüssel benötigen. Wenn Sie die Console nutzen, legt Cloud SQL dieses Dienstkonto automatisch an.

gcloud

gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=PROJECT_ID

Terraform

Verwenden Sie zum Erstellen eines Dienstkontos eine Terraform-Ressource.

resource "google_project_service_identity" "gcp_sa_cloud_sql" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

Änderungen anwenden

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Der vorherige Befehl gibt den Namen eines Dienstkontos zurück. Sie verwenden diesen Dienstkontonamen, während Sie dem Dienstkonto Zugriff auf den Schlüssel gewähren.

Schlüssel erstellen

Sie können den Schlüssel im selben Google Cloud-Projekt wie die Cloud SQL-Instanz oder in einem separaten Nutzerprojekt erstellen. Der Speicherort des Cloud KMS-Schlüsselbunds muss in der Region sein, in der Sie die Cloud SQL-Instanz anlegen möchten. Ein Schlüssel für mehrere Regionen oder für eine globale Region funktioniert nicht. Die Erstellungsanfrage der Cloud SQL-Instanz schlägt fehl, wenn die Regionen nicht übereinstimmen.

So erstellen Sie einen Cloud KMS-Schlüssel:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.

    Schlüsselverwaltung aufrufen

  2. Klicken Sie auf Schlüsselbund erstellen.
  3. Fügen Sie einen Schlüsselbundnamen hinzu. Notieren Sie sich diesen Namen, da Sie ihn benötigen, wenn Sie dem Dienstkonto Zugriff auf den Schlüssel gewähren.
  4. Fügen Sie einen Schlüsselbund-Speicherort hinzu.
  5. Klicken Sie auf Erstellen. Die Seite Schlüssel erstellen wird geöffnet.
  6. Fügen Sie einen Schlüsselnamen hinzu.
  7. Wählen Sie einen Zweck (symmetrisch oder asymmetrisch) aus.
  8. Wählen Sie einen Rotationszeitraum und ein Startdatum aus.
  9. Klicken Sie auf Erstellen.
  10. Klicken Sie in der Tabelle Schlüssel auf die drei Punkte in der letzten Spalte und wählen Sie Ressourcen-ID kopieren aus oder notieren Sie sich die ID. Dies ist die KMS_KEY_ID. Sie benötigen diese ID, wenn Sie dem Schlüssel Zugriff auf das Dienstkonto gewähren.

gcloud

  1. Erstellen Sie einen neuen Schlüsselbund.
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    Notieren Sie sich diesen Namen. Sie benötigen ihn, wenn Sie dem Schlüssel Zugriff auf das Dienstkonto gewähren.
  2. Erstellen Sie einen Schlüssel im Schlüsselbund.
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    Notieren Sie sich diesen Namen. Sie benötigen ihn, wenn Sie dem Schlüssel Zugriff auf das Dienstkonto gewähren.

Terraform

Verwenden Sie zum Erstellen eines Schlüsselbunds eine Terraform-Ressource.

resource "google_kms_key_ring" "keyring" {
  provider = google-beta
  name     = "keyring-name"
  location = "us-central1"
}

Verwenden Sie zum Erstellen eines Schlüssels eine Terraform-Ressource.

resource "google_kms_crypto_key" "key" {
  provider = google-beta
  name     = "crypto-key-name"
  key_ring = google_kms_key_ring.keyring.id
  purpose  = "ENCRYPT_DECRYPT"
}

Wenden Sie die Terraform-Konfiguration an:

terraform apply

Gewähren Sie dem Dienstkonto Zugriff auf den Schlüssel

Wenn Sie die Cloud SQL-Instanz mit CMEK erstellen, müssen Sie diesen Vorgang nur ausführen, wenn Sie gcloud oder die API verwenden. Sie können diese Vorgehensweise ausführen, wenn nach dem Erstellen der Instanz Berechtigungsprobleme auftreten.

So gewähren Sie dem Dienstkonto Zugriff:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.

    Schlüsselverwaltung aufrufen

  2. Verwenden Sie die Projektauswahl, um das Projekt auszuwählen, das den Schlüssel hostet.
  3. Klicken Sie auf den Name n des Schlüsselbunds.
  4. Klicken Sie auf den Namen des Schlüssels.
  5. Klicken Sie auf den Tab Berechtigungen.
  6. Klicken Sie zum Öffnen des Steuerfelds auf Zugriff erlauben.
  7. Geben Sie das Dienstkonto als Hauptkonto ein und wählen Sie „Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler“ als Rolle aus.
  8. Klicken Sie auf Speichern.

Alternativ können Sie sie auch auf der IAM-Seite des Projekts zuweisen.

ZUR SEITE "PROJEKT-IAM"

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Terraform

Verwenden Sie, um den Zugriff auf den Schlüssel zu gewähren, eine Terraform-Ressource.

resource "google_kms_crypto_key_iam_binding" "crypto_key" {
  provider      = google-beta
  crypto_key_id = google_kms_crypto_key.key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

  members = [
    "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
  ]
}

Wenden Sie die Terraform-Konfiguration an:

terraform apply

Cloud SQL-Instanz mit CMEK erstellen

So erstellen Sie eine Instanz mit vom Kunden verwalteten Verschlüsselungsschlüsseln:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf Instanz erstellen.
  3. Wählen Sie das Datenbankmodul aus.
  4. Geben Sie einen Namen für die Instanz ein. Der Instanzname sollte keine vertraulichen Informationen oder personenbezogenen Daten enthalten, da er extern sichtbar ist. Die Projekt-ID muss im Instanznamen nicht angegeben werden. Sie wird bei Bedarf automatisch erstellt, beispielsweise in den Logdateien.
  5. Geben Sie das Passwort für den Nutzer 'root'@'%' ein.
  6. Legen Sie die Region für die Instanz fest. Platzieren Sie die Instanz in der Region, in der sich auch die Ressourcen befinden, die darauf zugreifen. In den meisten Fällen müssen Sie keine Zone angeben.
  7. Wählen Sie im Abschnitt Konfigurationsoptionen alle Konfigurationsoptionen aus, bis Sie Maschinentyp und Speicher erreichen.
  8. Maximieren Sie Maschinentyp und Speicher.
  9. Wählen Sie im Abschnitt Encryption (Verschlüsselung) die Option Customer-managed key (Vom Kunden verwalteter Schlüssel) aus.
  10. Wählen Sie den KMS-Schlüssel aus dem Drop-down-Menü aus oder geben Sie die KMS_KEY_ID manuell ein. Es werden nur KMS-Schlüssel im selben Projekt und in derselben Region wie die Instanz angezeigt. Wenn Sie einen KMS-Schlüssel auswählen möchten, der zu einem anderen Projekt in derselben Region gehört, wählen Sie Sie können Ihren Schlüssel nicht finden? Schlüsselressourcen-ID eingeben aus und geben Sie die zuvor erfasste KMS_KEY_ID ein.
  11. Wenn das Dienstkonto keine Berechtigung zum Verschlüsseln/Entschlüsseln für den ausgewählten Schlüssel hat, wird eine Meldung angezeigt. Klicken Sie in diesem Fall auf Erteilen, um dem Dienstkonto die IAM-Rolle roles/cloudkms.cryptoKeyEncrypterDecrypter> für den ausgewählten KMS-Schlüssel zuzuweisen.
  12. Nachdem Sie die Konfigurationsoptionen ausgewählt haben, klicken Sie auf Erstellen.
  13. Sie erhalten eine Meldung, in der die Auswirkungen der Verwendung des vom Kunden verwalteten Verschlüsselungsschlüssels erläutert werden. Lesen Sie die Meldung und bestätigen Sie sie, um mit dem Erstellen der Instanz fortzufahren.

gcloud

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--disk-encryption-key=KMS_KEY_ID \
--database-version=VERSION \
--tier=MACHINE_TYPE \
--region=REGION \
--root-password=INSERT-PASSWORD-HERE

Terraform

Verwenden Sie zum Erstellen einer Instanz mit CMEK eine Terraform-Ressource.

resource "google_sql_database_instance" "mysql_instance_with_cmek" {
  name                = "mysql-instance-cmek"
  provider            = google-beta
  region              = "us-central1"
  database_version    = "MYSQL_8_0"
  encryption_key_name = google_kms_crypto_key.key.id
  settings {
    tier = "db-n1-standard-2"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Änderungen löschen

So löschen Sie das Projekt:

  1. Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument deletion_protection auf false.
    deletion_protection =  "false"
  2. Wenden Sie die aktualisierte Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply
  1. Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes an der Eingabeaufforderung eingeben:

    terraform destroy

REST Version 1

Um eine Instanz mit vom Kunden verwalteten Verschlüsselungsschlüsseln zu erstellen, übergeben Sie diskEncryptionConfiguration an den Befehl.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID
  • region: die Region
  • database-version: String der Emum-Version (z. B. MYSQL_8_0)
  • kms-resource-id: die ID, die Sie von der Erstellung eines Schlüssels erhalten haben.

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

JSON-Text anfordern:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
In diesem Beispiel wird instances:insert verwendet.

REST v1beta4

Um eine Instanz mit vom Kunden verwalteten Verschlüsselungsschlüsseln zu erstellen, übergeben Sie diskEncryptionConfiguration an den Befehl.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID
  • region: die Region
  • database-version: String der Emum-Version (z. B. MYSQL_8_0)
  • kms-resource-id: die ID, die Sie von der Erstellung eines Schlüssels erhalten haben.

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

JSON-Text anfordern:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
In diesem Beispiel wird instances:insert verwendet.

Sicherung für eine CMEK-fähige Instanz erstellen

Wenn Sie die Sicherung einer Cloud SQL-Instanz erstellen, wird diese Sicherung mit der gleichen Primärschlüsselversion wie der vom Kunden verwaltete Schlüssel der primären Instanz verschlüsselt.

On-Demand- und automatische Sicherungen erstellen und verwalten

Im Formular Sicherung erstellen wird folgende Meldung angezeigt: "Your backup will be encrypted with the primary version of this instance's customer-managed encryption key. If anyone destroys or disables this key version, all backup data encrypted using that key version will be permanently lost. You can check the primary version for the key in Cloud KMS."

Auf der Seite "Sicherungen" enthält die Liste der Sicherungen, die mit vom Kunden verwalteten Verschlüsselungsschlüsseln aktiviert sind, zwei zusätzliche Spalten. Eine Spalte gibt an, dass die Sicherung für eine CMEK-fähige Instanz erstellt wird, und die andere Spalte zeigt die Schlüsselversion an, mit der die Sicherung verschlüsselt wurde.

Replikat für eine CMEK-fähige Instanz erstellen

Wenn Sie ein Lesereplikat einer Cloud SQL-Instanz in derselben Region erstellen, wird dafür der vom Kunden verwaltete Verschlüsselungsschlüssel der übergeordneten Instanz übernommen. Wenn Sie ein Lesereplikat in einer anderen Region erstellen, erhalten Sie eine neue Liste mit vom Kunden verwalteten Verschlüsselungsschlüsseln zur Auswahl. Jede Region nutzt einen eigenen Schlüsselsatz.

Lesereplikate erstellen

Auf der Seite Lesereplikat erstellen sind die folgenden Informationen enthalten:

  1. Unter Verschlüsselung wird Vom Kunden verwaltet angezeigt.
  2. Der Verschlüsselungsschlüssel für das Replikat wird angezeigt.
  3. Die folgende Meldung wird angezeigt: "Das Replikat wird mit einem vom Kunden verwalteten Schlüssel der Masterinstanz verschlüsselt. Wenn dieser Schlüssel gelöscht wird, gehen alle mit ihm verschlüsselten Daten dauerhaft verloren."

Für ein regionenübergreifendes Replikat wird die folgende Meldung angezeigt:

"Your cross-region replica will be encrypted with the selected customer-managed key. If anyone destroys this key, all data encrypted with it will be permanently lost."

CMEK-fähige Instanz klonen

Wenn Sie einen Klon der Cloud SQL-Instanz erstellen, übernimmt er den vom Kunden verwalteten Verschlüsselungsschlüssel, der auch für die Verschlüsselung der Quellinstanz genutzt wird.

Instanzen klonen

Auf der Seite Klon erstellen sind die folgenden Informationen enthalten:

  1. Unter Verschlüsselung wird Vom Kunden verwaltet angezeigt.
  2. Der Verschlüsselungsschlüssel für den Klon wird angezeigt.
  3. Die folgende Meldung wird angezeigt: "Der Klon wird mit einem vom Kunden verwalteten Schlüssel der Quellinstanz verschlüsselt. Wenn dieser Schlüssel gelöscht wird, gehen alle mit ihm verschlüsselten Daten dauerhaft verloren."

Wichtige Informationen für eine CMEK-fähige Instanz aufrufen

Nachdem Sie eine Cloud SQL-Instanz erstellt haben, können Sie der Instanzliste oder der Instanzübersicht entnehmen, dass sie mit einem vom Kunden verwalteten Verschlüsselungsschlüssel angelegt wurde. In den Details wird auch der Schlüssel angezeigt, der zum Erstellen der Instanz verwendet wurde.

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Scrollen Sie in der Liste der Instanzen nach rechts, bis die Spalte Verschlüsselung zu sehen ist. In dieser Spalte werden die Einträge Von Google verwaltet und Vom Kunden verwaltet angezeigt.
  3. Klicken Sie auf den Instanznamen, um die entsprechende Übersicht zu öffnen. Der vom Kunden verwaltete Verschlüsselungsschlüssel ist im Bereich Konfiguration aufgeführt.

Existierende CMEK-fähige Instanz oder Replikat neu verschlüsseln

Sie können Ihre vorhandenen Cloud SQL-Instanzen und -Replikate mit der aktuellen Primärschlüsselversion neu verschlüsseln. Weitere Informationen zur Neuverschlüsselung von vorhandenen CMEK-fähigen Instanzen oder Replikaten finden Sie unter Informationen zu Schlüsseln.

Neue primäre Schlüsselversion abrufen

  • Sie benötigen die aktuelle Primärschlüsselversion, um Ihre Instanz oder Ihr Replikat mit einer neuen Version neu zu verschlüsseln. Wenn Sie eine neue Schlüsselversion für Ihre Instanzen benötigen, müssen Sie Ihren Schlüssel mit dem Cloud Key Management Service rotieren. Informationen zum Rotieren des Primärschlüssels finden Sie unter Schlüssel rotieren.

  • Warten Sie nach Abschluss der Schlüsselrotation, bis die Primärschlüsseländerung weitergegeben wurde, bevor Sie die Instanzen neu verschlüsseln. Ist die Schlüsselversion nicht konsistent, so verwendet Ihre Instanz nach der erneuten Verschlüsselung weiterhin die alte Schlüsselversion. Weitere Informationen finden Sie unter Konsistenz der Schlüsselversionen.

CMEK-fähige Instanz neu verschlüsseln

Verschlüsseln Sie nach Abschluss der Schlüsselrotation Ihre vorhandenen CMEK-fähigen Instanzen oder Replikate neu.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf den Instanznamen, um die Übersichtsseite einer Instanz zu öffnen.
  3. Klicken Sie im Abschnitt Konfiguration auf Instanz neu verschlüsseln.
  4. Bestätigen Sie im angezeigten Dialogfeld Ihre Auswahl durch einen Klick auf Neu verschlüsseln.

gcloud

Führen Sie folgenden Befehl aus, um die Instanz oder das Replikat neu zu verschlüsseln:

gcloud sql instances reencrypt INSTANCE_NAME
Ersetzen Sie INSTANCE_NAME durch den Namen der neu zu verschlüsselnden Instanz oder des Replikats.

REST Version 1

Führen Sie folgenden Befehl aus, um Ihre Instanz oder das Replikat mit dem neuen Schlüssel neu zu verschlüsseln:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:19:09.503Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

Führen Sie folgenden Befehl aus, um Ihre Instanz oder das Replikat mit dem neuen Schlüssel neu zu verschlüsseln:
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:22:13.663Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Automatische Sicherungen bei erneuter Verschlüsselung

Wenn Sie eine primäre Instanz mit einer neuen Primärschlüsselversion neu verschlüsseln, erstellt Cloud SQL automatisch eine On-Demand-Sicherung, die "Neuverschlüsselungssicherung" genannt wird.

In der Liste der Sicherungen für Ihre Cloud SQL-Instanz wird die Sicherung über die erneute Verschlüsselung als Typ on-demand aufgeführt und mit backup created automatically for data before CMEK re-encryption gekennzeichnet.

Wie bei anderen On-Demand-Sicherungen bleiben Sicherungen über die erneute Verschlüsselung erhalten, bis Sie sie oder die Instanz löschen.

Einschränkungen bei der erneuten Verschlüsselung

Beachten Sie folgende Einschränkungen, wenn Sie eine Instanz neu verschlüsseln:

  • Während der Neuverschlüsselung können Sie keine weiteren Verwaltungsvorgänge für die Instanz ausführen.
  • Durch die Neuverschlüsselung wird eine auf der Größe der Instanz oder des Replikats basierende Ausfallzeit ausgelöst.
  • Replikate einer Instanz werden nicht neu verschlüsselt, wenn eine Instanz neu verschlüsselt wird. Sie müssen jedes Replikat separat neu verschlüsseln.
  • Sicherungen werden bei der Neuverschlüsselung einer Instanz nicht automatisch mit der neuen Schlüsselversion verschlüsselt. Wenn Sie die Sicherung oder die Wiederherstellung zu einer bestimmten Zeit nach dem Erstellen wiederherstellen möchten, müssen Sie die Cloud KMS-Schlüsselversion behalten, mit der die Sicherung verschlüsselt ist.

Informationen zur Fehlerbehebung finden Sie in der Fehlerbehebungstabelle: Erneute Verschlüsselung.

Cloud External Key Manager (Cloud EKM) verwenden

Zum Schutz von Daten in Cloud SQL-Instanzen können Sie Schlüssel verwenden, die Sie mit einem unterstützten Partner für externe Schlüsselverwaltung verwalten. Weitere Informationen finden Sie unter Cloud External Key Manager, einschließlich des Abschnitts Hinweise.

Informationen zum Erstellen eines Cloud EKM-Schlüssels finden Sie unter Cloud EKM-Schlüssel verwalten. Nachdem ein Schlüssel erstellt wurde, geben Sie den Namen des Schlüssels an, wenn Sie eine Cloud SQL-Instanz erstellen.

Sie können Key Access Justifications (KAJ) als Teil von Cloud EKM verwenden. KAJ ermöglicht es Ihnen, den Grund für jede Cloud EKM-Anfrage aufzurufen. Basierend auf der Begründung können Sie eine Anfrage außerdem automatisch genehmigen oder ablehnen. Weitere Informationen finden Sie in der Übersicht.

Damit bietet KAJ eine zusätzliche Kontrolle über Ihre Daten. Dazu stellt es für jeden Versuch zum Entschlüsseln der Daten eine Begründung bereit.

Google hat keine Kontrolle über die Verfügbarkeit von Schlüsseln in einem Partnersystem für die externe Schlüsselverwaltung.

Schlüsselversionen deaktivieren und reaktivieren

Sehen Sie sich die folgenden Themen an:

Fehlerbehebung

In diesem Abschnitt wird beschrieben, welche Maßnahmen Sie ergreifen können, wenn Sie beim Einrichten oder Verwenden von CMEK-fähigen Instanzen eine Fehlermeldung erhalten.

Cloud SQL-Administratorvorgänge wie Erstellen, Klonen oder Aktualisieren können aufgrund von Cloud KMS-Fehlern und fehlenden Rollen oder Berechtigungen fehlschlagen. Häufige Gründe für einen Fehler sind eine fehlende, deaktivierte oder gelöschte Cloud KMS-Schlüsselversion, unzureichende IAM-Berechtigungen für den Zugriff auf die Cloud KMS-Schlüsselversion oder wenn sich die Cloud KMS-Schlüsselversion in einer anderen Region als die Cloud SQL-Instanz befindet. Verwenden Sie die folgende Tabelle zur Fehlerbehebung, um häufige Probleme zu diagnostizieren und zu beheben.

Tabelle zur Fehlerbehebung für vom Kunden verwaltete Verschlüsselungsschlüssel

Fehler Das könnte das Problem sein Lösungsvorschlag
Dienstkonto pro Produkt und Projekt wurde nicht gefunden Der Name des Dienstkontos ist falsch. Sie müssen ein Dienstkonto für das richtige Nutzerprojekt erstellt haben.

Zur Seite "Dienstkonten"

Zugriff auf das Dienstkonto kann nicht gewährt werden Das Nutzerkonto ist nicht berechtigt, Zugriff auf diese Schlüsselversion zu gewähren. Fügen Sie dem Nutzer- oder Dienstkonto die Rolle Organisationsadministrator hinzu.

Zur Seite "IAM-Konten"

Die Cloud KMS-Schlüsselversion wurde gelöscht. Die Schlüsselversion wurde gelöscht. Wenn die Schlüsselversion gelöscht wurde, können Sie sie nicht zum Verschlüsseln oder Entschlüsseln von Daten verwenden.
Die Cloud KMS-Schlüsselversion ist deaktiviert. Die Schlüsselversion ist deaktiviert. Aktivieren Sie die Cloud KMS-Schlüsselversion noch einmal.

Zur Seite "Kryptografische Schlüssel"

Unzureichende Berechtigung zur Verwendung des Cloud KMS-Schlüssels Die Rolle cloudkms.cryptoKeyEncrypterDecrypter fehlt in dem Nutzer- oder Dienstkonto, das Sie zum Ausführen von Vorgängen auf Cloud SQL-Instanzen verwenden, oder die Cloud KMS-Schlüsselversion ist nicht vorhanden. Fügen Sie in dem Google Cloud-Projekt, das den Schlüssel hostet, Ihrem Nutzer- oder Dienstkonto die Rolle cloudkms.cryptoKeyEncrypterDecrypter hinzu.

Zur Seite "IAM-Konten"


Wenn die Rolle Ihrem Konto bereits zugewiesen ist, finden Sie unter Schlüssel erstellen Informationen zum Erstellen einer neuen Schlüsselversion. Siehe Hinweis.
Cloud KMS-Schlüssel wurde nicht gefunden Die Schlüsselversion ist nicht vorhanden. Erstellen Sie eine neue Schlüsselversion. Schlüssel erstellen Siehe Hinweis.
Die Cloud SQL-Instanz und die Cloud KMS-Schlüsselversion befinden sich in verschiedenen Regionen. Die Cloud KMS-Schlüsselversion und die Cloud SQL-Instanz müssen sich in derselben Region befinden. Es kommt zu einem Fehler, wenn sich die Cloud KMS-Schlüsselversion in einer globalen Region oder Mehrfachregion befindet. Erstellen Sie eine Schlüsselversion in derselben Region, in der Sie Instanzen erstellen möchten. Schlüssel erstellen Siehe Hinweis.
Die Cloud KMS-Schlüsselversion wird wiederhergestellt, die Instanz ist jedoch weiterhin gesperrt. Die Schlüsselversion ist deaktiviert oder gewährt nicht die erforderlichen Berechtigungen. Aktivieren Sie die Schlüsselversion wieder und weisen Sie Ihrem Nutzer- oder Dienstkonto in dem Google Cloud-Projekt, das den Schlüssel hostet, die Rolle cloudkms.cryptoKeyEncrypterDecrypter zu.

Fehlerbehebungstabelle: Erneute Verschlüsselung

Fehler Das könnte das Problem sein Lösungsvorschlag
Die erneute Verschlüsselung der CMEK-Ressource ist fehlgeschlagen, da der Cloud KMS-Schlüssel nicht zugänglich ist. Prüfen Sie, ob die primäre Schlüsselversion aktiviert und die Berechtigung korrekt erteilt wurde. Die Schlüsselversion ist deaktiviert oder gewährt nicht die erforderlichen Berechtigungen.

Aktivieren Sie die Cloud KMS-Schlüsselversion noch einmal:

ZUR SEITE "KRYPTOSCHLÜSSEL"

Bestätigen Sie in dem Google Cloud-Projekt, das den Schlüssel hostet, Ihrem Nutzer- oder Dienstkonto die Rolle cloudkms.cryptoKeyEncrypterDecrypter:

Zur Seite "IAM-Konten"

Die erneute Verschlüsselung der CMEK-Ressource ist aufgrund eines internen Serverfehlers fehlgeschlagen. Versuchen Sie es später noch einmal. Es liegt ein interner Serverfehler vor. Wiederholen Sie die Neuverschlüsselung. Weitere Informationen finden Sie unter Vorhandene CMEK-fähige Instanz oder -Replikat neu verschlüsseln.

Nächste Schritte