Informationen zur Sicherung für GKE-CMEK-Verschlüsselung


Auf dieser Seite wird gezeigt, wie der vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Key, CMEK) in Sicherung für GKE funktioniert.

Übersicht

Es gibt zwei Arten von Nutzerdatenartefakten, die über die Sicherung für GKE erstellt und gespeichert werden:

  • Konfigurationssicherung: Eine Reihe von Kubernetes-Ressourcenbeschreibungen, die aus dem API-Server des Clusters extrahiert wurden, der die Sicherung ausführt, und den Clusterstatus erfasst.
  • Volume-Sicherungen: Eine Reihe von Volume-Sicherungen, die PersistentVolumeClaim-Ressourcen in der Konfigurationssicherung entsprechen.

Standardmäßig werden alle Sicherungsartefakte, die über "Sicherung für GKE" erstellt wurden, im inaktiven Zustand mit einem von Google bereitgestellten Schlüssel verschlüsselt.

Sie können diese Artefakte jedoch mit einem vom Kunden verwalteten Verschlüsselungsschlüssel (Customer-Managed Encryption Key, CMEK) verschlüsseln, der über den Cloud Key Management Service verwaltet wird, wenn gewünscht.

CMEK-Verschlüsselung aktivieren

Die CMEK-Verschlüsselung wird in zwei Schritten aktiviert:

  • Legen Sie einen Schlüssel zum Verschlüsseln von Sicherungen fest, die für einen BackupPlan erstellt wurden.

  • Gewähren Sie den entsprechenden Dienstkonten Zugriff auf die entsprechenden Schlüssel.

Für jedes Sicherungsszenario sind möglicherweise drei CMEK-Schlüssel beteiligt:

  • bplan_key: Dies ist der Schlüssel, auf den Sie beim Erstellen oder Aktualisieren von BackupPlan verweisen. Nach Möglichkeit dieser Schlüssel, der beim Verschlüsseln aller Sicherungsartefakte verwendet wird. Dieser Schlüssel muss sich in derselben Region wie der BackupPlan selbst befinden (siehe Informationen zu Ressourcenstandorten).

  • orig_disk_key: Wenn Sie die nichtflüchtige Speicher-Volumes mit einem CMEK-Schlüssel verschlüsselt haben, werden die von "Sicherung für GKE" für diese Volumes generierten Volume-Sicherungen mit diesem Schlüssel verschlüsselt, auch wenn ein anderer Schlüssel beim BackupPlan registriert ist.

  • new_disk_key: Dies ist der CMEK-Schlüssel, den Sie zum Verschlüsseln von Volumes verwenden möchten, die Sie aus der Sicherung wiederhergestellt haben. Dies wird durch die StorageClass im Zielcluster der Wiederherstellung referenziert.

Es gibt fünf verschiedene Dienstkonten, die möglicherweise Zugriff auf CMEK-Schlüssel erfordern:

  • agent_wi: Wenn Sie die Vorschauversion des Agents ausführen (GKE-Cluster mit Version 1.23 oder niedriger), muss diesem Dienstkonto Zugriff auf den bplan_key gewährt werden. Dieses Dienstkonto hat das Format PROJECT_ID.svc.id.goog[gkebackup/agent], wobei PROJECT_ID die ID Ihres Google Cloud-Projekts ist.

  • agent_robot: Wenn Ihre GKE-Cluster die Version 1.24 oder höher ausführen, muss diesem Dienstkonto Zugriff auf die bplan_key gewährt werden. Dieses Dienstkonto hat das Format service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com, wobei PROJECT_NUMBER die Anzahl Ihres Google Cloud-Projekts ist.

  • non_cmek_service_agent: Beim Sichern von nicht CMEK-verschlüsselten Volumes muss diesem Dienstkonto Zugriff auf das bplan_key gewährt werden. Dieses Dienstkonto hat das Format service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com, wobei PROJECT_NUMBER die Anzahl Ihres Google Cloud-Projekts ist.

  • cmek_service_agent: Beim Sichern von CMEK-verschlüsselten Volumes muss diesem Dienstkonto Zugriff auf das orig_disk_key gewährt werden. Dieses Dienstkonto hat das Format service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, wobei TENANT_PROJECT_NUMBER die Nummer des Mandantenprojekts ist, das Ihrem BackupPlan zugewiesen ist.

  • compute_service_agent: Dieses Dienstkonto wird beim Erstellen neuer verschlüsselter Volumes für einen Cluster verwendet. Er muss Zugriff auf den new_disk_key haben. Dieses Dienstkonto hat das Format service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, wobei PROJECT_NUMBER die Anzahl Ihres Google Cloud-Projekts ist.

Wenn diskEncryptionKey.kmsKeyServiceAccount für die Laufwerke festgelegt ist, müssen Sie die folgenden Schritte ausführen, bevor Sie eine Sicherung erstellen:

  • Deaktivieren Sie die Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage, um den Identitätsübertragung für ein Dienstkonto Projektübergreifend zu aktivieren:

      gcloud resource-manager org-policies disable-enforce \
          iam.disableCrossProjectServiceAccountUsage
          --project=PROJECT_ID
    
  • Weisen Sie cmek_service_agent die Rolle roles/iam.serviceAccountTokenCreator zu, um kurzlebige Anmeldedaten zu erstellen:

      gcloud iam service-accounts add-iam-policy-binding \
        # Replace the email with the value from
        # `diskEncryptionKey.kmsKeyServiceAccount`
        your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \
        --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

In der folgenden Tabelle ist zusammengefasst, welche Dienstkonten in welchen Szenarien Zugriff auf welche Schlüssel erhalten müssen:

Artefakt Dienstkonto Schlüssel
config backup, 1.23- cluster agent_wi bplan_key
config backup, 1.24+ cluster agent_robot bplan_key
Sicherung von CMEK-verschlüsseltem Volume cmek_service_agent orig_disk_key
Sicherung eines von Google verschlüsselten Volumes non_cmek_service_agent bplan_key
Neues mit CMEK verschlüsseltes Volume, das während der Wiederherstellung erstellt wurde compute_service_agent new_disk_key

Sie können Zugriff auf Schlüssel auf Projektebene (erteilt Zugriff auf alle Schlüssel unter diesem Projekt) oder auf den einzelnen Schlüssel gewähren.

Zugriff auf Projektebene gewähren

Sie können Zugriff auf Schlüssel auf Projektebene gewähren. Dieser umfasst alle Schlüssel im jeweiligen Projekt.

So gewähren Sie Zugriff auf Projektebene:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite IAM.

    IAM aufrufen

  2. Klicken Sie auf Zugriff erlauben.

  3. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein.

  4. Wählen Sie in der Liste Rolle auswählen die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.

  5. Klicken Sie auf Speichern.

gcloud

  1. Gewähren Sie Zugriff auf Projektebene.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID des Projekts, auf das Sie Zugriff gewähren möchten.
    • PROJECT_NUMBER: die Nummer des Projekts, auf das Sie Zugriff gewähren möchten.

Terraform

  1. Gewähren Sie Zugriff auf Projektebene.

    resource "google_project_iam_member" "example_iam_member" {
    project = "PROJECT_ID"
    role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member  = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com"
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID des Projekts, auf das Sie Zugriff gewähren möchten.
    • PROJECT_NUMBER: die Nummer des Projekts, auf das Sie Zugriff gewähren möchten.

Zugriff auf Schlüsselebene gewähren

Mit der folgenden Anleitung können Sie den Zugriff auf Ebene einzelner Schlüssel gewähren.

Console

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

    Schlüsselverwaltung aufrufen

  2. Klicken Sie auf den Name n des Schlüsselbunds.

  3. Klicken Sie auf den Namen des Schlüssels.

  4. Klicken Sie auf den Tab Berechtigungen.

  5. Klicken Sie auf Zugriff erlauben.

  6. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein.

  7. Wählen Sie in der Liste Rolle auswählen die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.

  8. Klicken Sie auf Speichern.

gcloud

  1. Gewähren Sie den Zugriff auf Ebene einzelner Schlüssel.

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ersetzen Sie Folgendes:

    • KEY_NAME: Der Name des Schlüssels.
    • KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthält
    • LOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.
    • PROJECT_NUMBER: die Nummer des Projekts, auf das Sie Zugriff gewähren möchten.

Terraform

  1. Gewähren Sie den Zugriff auf Ebene einzelner Schlüssel.

    resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" {
    crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
    role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member        = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" 
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID des Projekts, auf das Sie Zugriff gewähren möchten.
    • LOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.
    • KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthält
    • KEY_NAME: Der Name des Schlüssels.
    • PROJECT_NUMBER: die Nummer des Projekts, auf das Sie Zugriff gewähren möchten.

Überlegungen und Einschränkungen zur Nutzung

  • Wenn Sie ein CMEK-verschlüsseltes Volume sichern möchten, müssen Sie Zugriff auf den Schlüssel dieses Laufwerks gewähren, auch wenn Sie die CMEK-Verschlüsselung in Ihrem BackupPlan nicht aktivieren.

  • CMEK-Schlüssel müssen sich in derselben Region wie BackupPlan befinden, damit ein regionaler Ausfall den Zugriff auf den Schlüssel nicht entfernt, während Sicherungen weiterhin zugänglich sind. Diese Einschränkung kann jedoch nicht für Schlüssel erzwungen werden, die mit verschlüsselten Volumes gemeinsam genutzt werden. Wenn verschlüsselte Volumes verwendet werden, ist es möglich, dass die Wiederherstellung auch dann fehlschlägt, wenn eine Sicherung verfügbar ist, da der Verschlüsselungsschlüssel des Laufwerks möglicherweise nicht in derselben Region wie die Sicherung gespeichert wird.