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 vonBackupPlan
verweisen. Nach Möglichkeit dieser Schlüssel, der beim Verschlüsseln aller Sicherungsartefakte verwendet wird. Dieser Schlüssel muss sich in derselben Region wie derBackupPlan
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 beimBackupPlan
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 dieStorageClass
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 denbplan_key
gewährt werden. Dieses Dienstkonto hat das FormatPROJECT_ID.svc.id.goog[gkebackup/agent]
, wobeiPROJECT_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 diebplan_key
gewährt werden. Dieses Dienstkonto hat das Formatservice-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
, wobeiPROJECT_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 dasbplan_key
gewährt werden. Dieses Dienstkonto hat das Formatservice-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com
, wobeiPROJECT_NUMBER
die Anzahl Ihres Google Cloud-Projekts ist.cmek_service_agent
: Beim Sichern von CMEK-verschlüsselten Volumes muss diesem Dienstkonto Zugriff auf dasorig_disk_key
gewährt werden. Dieses Dienstkonto hat das Formatservice-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, wobeiTENANT_PROJECT_NUMBER
die Nummer des Mandantenprojekts ist, das IhremBackupPlan
zugewiesen ist.compute_service_agent
: Dieses Dienstkonto wird beim Erstellen neuer verschlüsselter Volumes für einen Cluster verwendet. Er muss Zugriff auf dennew_disk_key
haben. Dieses Dienstkonto hat das Formatservice-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, wobeiPROJECT_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 Rolleroles/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
Öffnen Sie in der Google Cloud Console die Seite IAM.
Klicken Sie auf Zugriff erlauben.
Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein.
Wählen Sie in der Liste Rolle auswählen die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.
Klicken Sie auf Speichern.
gcloud
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
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
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Klicken Sie auf den Name n des Schlüsselbunds.
Klicken Sie auf den Namen des Schlüssels.
Klicken Sie auf den Tab Berechtigungen.
Klicken Sie auf Zugriff erlauben.
Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein.
Wählen Sie in der Liste Rolle auswählen die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.
Klicken Sie auf Speichern.
gcloud
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ältLOCATION
: der Cloud KMS-Speicherort des Schlüsselbunds.PROJECT_NUMBER
: die Nummer des Projekts, auf das Sie Zugriff gewähren möchten.
Terraform
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ältKEY_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.