Auf dieser Seite erfahren Sie, wie Sie Daten, die in der Google Kubernetes Engine-Steuerungsebene (GKE) gespeichert sind, mit Schlüsseln verschlüsseln, die Sie in Cloud Key Management Service (Cloud KMS) verwalten. Sie sollten bereits mit Konzepten wie etcd, der GKE-Clusterarchitektur und Cloud KMS vertraut sein.
Auf dieser Seite wird ein Teil der optionalen Funktionen der Steuerungsebene in GKE beschrieben, mit denen Sie Aufgaben wie die Überprüfung des Sicherheitsstatus der Steuerungsebene oder die Konfiguration der Verschlüsselung und Anmeldedatensignatur in der Steuerungsebene mit von Ihnen verwalteten Schlüsseln ausführen können. Weitere Informationen finden Sie unter GKE Control Plane Authority.
Standardmäßig werden in Google Cloud verschiedene Sicherheitsmaßnahmen auf die verwaltete Steuerebene angewendet. Auf dieser Seite werden optionale Funktionen beschrieben, mit denen Sie die GKE-Steuerungsebene besser im Blick behalten oder steuern können.
Verschlüsselung des Bootlaufwerks der Steuerungsebene und von etcd
Standardmäßig verschlüsselt GKE das Boot-Laufwerk eines Knotens der Kontrollebene, das Laufwerk, auf dem Daten in etcd gespeichert werden, und die Google Cloud interne Betriebssicherung von etcd mithilfe von Verschlüsselungsschlüsseln, die von Google Cloudverwaltet werden. Weitere Informationen zu dieser Standardverschlüsselung finden Sie unter Standardverschlüsselung ruhender Daten. Sie können optional Ihre eigenen Verschlüsselungsschlüssel verwenden, die Sie mit Cloud KMS verwalten, um diese Ressourcen zu verschlüsseln. Weitere Informationen finden Sie unter Verschlüsselung des Bootlaufwerks und von etcd für die Steuerungsebene.
Sie erstellen Schlüssel in Cloud KMS, die von GKE zum Verschlüsseln Ihrer Ressourcen in der Kontrollebene verwendet werden. Beachten Sie beim Erstellen dieser Ressourcen Folgendes:
- Sie können einen Schlüsselbund für alle Schlüssel in einem Cluster verwenden, unabhängig vom Zweck der einzelnen Schlüssel. Wenn Sie bereits einen Schlüsselbund haben, den Sie für einen anderen Zweck verwendet haben, z. B. für die Einrichtung Ihrer eigenen Zertifizierungsstellen, können Sie diesen Schlüsselbund für diesen Leitfaden verwenden.
- Sie sollten die Schlüssel am selben Google Cloud Speicherort wie Ihren Cluster erstellen, um die Latenz zu verringern.
- Für die meisten Anwendungsfälle können Sie die Schutzstufe Software für Cloud KMS-Schlüssel verwenden. Sie können auch Hardwareschlüssel mit Cloud HSM verwenden.
- Sie müssen das Flag
--purpose
mit dem Wertencryption
angeben, da diese Schlüssel für die symmetrische Verschlüsselung verwendet werden. - Sie sollten die Standarddauer für die Schlüsselvernichtung nicht ändern.
Verwendung mit anderen Funktionen der GKE-Steuerungsebene
Die GKE Control Plane Authority bietet die folgenden Funktionen für selbst verwaltete Schlüssel, die Sie beim Erstellen eines Clusters gleichzeitig aktivieren müssen:
- Komponenten der Steuerungsebene verschlüsseln (diese Seite)
- Eigene Zertifizierungsstellen (CAs) und Schlüssel verwenden
Sie können diese Funktionen nur aktivieren, wenn Sie einen neuen GKE-Cluster erstellen. Vorhandene Cluster können nicht aktualisiert werden, um diese Funktionen zu verwenden. Wenn Sie beide Funktionen im selben Cluster verwenden möchten, führen Sie alle Verfahren zur Schlüssel- und CA-Konfiguration in beiden Anleitungen aus und führen Sie dann den Befehl zum Erstellen des Clusters aus, mit dem beide Funktionen aktiviert werden, wie im Abschnitt Cluster erstellen beschrieben.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
- Achten Sie darauf, dass Ihr Schlüsselprojekt einen Cloud KMS-Schlüsselbund für Ihren Cluster hat. Sie können jeden vorhandenen Schlüsselbund an Ihrem Clusterstandort verwenden. Informationen zum Erstellen eines neuen Schlüsselbunds finden Sie unter Schlüsselbund erstellen.
-
Enable the Cloud Key Management Service API.
Projekte identifizieren
Wir empfehlen, die folgenden separaten Google Cloud -Projekte zu verwenden:
- Schlüsselprojekt: Enthält alle Schlüssel.
- Clusterprojekt: Enthält Ihre GKE-Cluster.
Sie können optional dasselbe Projekt für Ihre Schlüssel und GKE-Cluster verwenden. Wir empfehlen jedoch, separate Projekte zu verwenden, damit die Teams, die Ihre Schlüssel und kryptografischen Vorgänge verwalten, von den Teams getrennt sind, die Ihre Cluster verwalten.
Erforderliche Rollen und Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen eigener Verschlüsselungsschlüssel benötigen:
-
Cloud KMS-Schlüssel erstellen:
Cloud KMS-Administrator (
roles/cloudkms.admin
) für Ihr Schlüsselprojekt -
GKE-Cluster erstellen:
Administrator für Kubernetes Engine-Cluster (
roles/container.clusterAdmin
) für Ihr Clusterprojekt
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Voraussetzungen
Ihr Cluster muss die GKE-Version 1.31.1-gke.1846000 oder höher ausführen.
Beschränkungen
- Sie können Bootlaufwerk und etcd-Verschlüsselungsschlüssel nur während der Clustererstellung konfigurieren.
Für regionale Cluster im Standardmodus und für Autopilot-Cluster muss die Region, in der Sie einen Cluster erstellen, in mindestens drei Zonen dieser Region Kapazität für den vertraulichen Modus für Hyperdisk Balanced haben.
Bei zonalen Clustern im Standardmodus muss die Clusterzone eine Hyperdisk Balanced-Kapazität haben. Wenn Sie Hilfe bei der Kapazität benötigen, wenden Sie sich an Cloud Customer Care.
Der vertrauliche Modus für Hyperdisk Balanced ist nur in bestimmten Regionen verfügbar. Weitere Informationen finden Sie unter Unterstützte Regionen für Hyperdisk Balanced-Volumes im vertraulichen Modus.
GKE unterstützt nur Schlüssel aus Cloud KMS. Sie können weder einen anderen Kubernetes-KMS-Anbieter noch einen anderen Verschlüsselungsanbieter verwenden.
Cloud External Key Manager (Cloud EKM)-Schlüssel werden nicht unterstützt.
Sie können nicht auf die internen Google Cloud -Betriebssicherungen von etcd zugreifen oder mit ihnen interagieren. Diese Sicherungen dienen nur der Notfallwiederherstellung.
Multiregionale Schlüsselringe werden nicht unterstützt. Sie müssen einen regionalen Schlüsselbund verwenden.
Schlüssel erstellen
In diesem Abschnitt erstellen Sie einen Verschlüsselungsschlüssel für die Boot- und etcd-Laufwerke in Ihrer Kontrollebene und einen separaten Verschlüsselungsschlüssel für die Google Cloudinterne Betriebssicherung von etcd. Sie können alle diese und alle anderen Schlüssel für den Cluster in einem Schlüsselbund aufbewahren.
Erstellen Sie den Verschlüsselungsschlüssel für die Bootlaufwerke und etcd-Laufwerke der Steuerungsebene:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Ersetzen Sie Folgendes:
KCP_DISK_KEY_NAME
: der Name des Verschlüsselungsschlüssels für die Bootlaufwerke und etcd-Laufwerke der Kontrollebene.KEYRING_NAME
: Der Name des Schlüsselbunds, in dem Ihre Verschlüsselungsschlüssel für den Cluster gespeichert werden sollen.LOCATION
: den Google Cloud -Speicherort für den Schlüsselbund. Dieser muss mit dem Standort Ihres Clusters übereinstimmen. Eine Liste der Regionen finden Sie in der Tabelle mit Cloud KMS-Standorten. Filtern Sie dazu nach „Region“.PROTECTION_LEVEL
: Das Schutzniveau für den Schlüssel, z. B.software
oderhsm
.KEY_PROJECT_ID
: die Projekt-ID Ihres Schlüsselprojekts.
Erstellen Sie den internen Verschlüsselungsschlüssel für die etcd-Sicherung:
gcloud kms keys create ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Ersetzen Sie
ETCD_BACKUP_KEY_NAME
durch einen Namen für den internen Verschlüsselungsschlüssel der etcd-Sicherung.
IAM-Rollen dem GKE-Dienst-Agent zuweisen
In diesem Abschnitt gewähren Sie dem GKE-Dienstagenten im Clusterprojekt IAM-Rollen für die von Ihnen erstellten Schlüssel. Der GKE-Dienst-Agent benötigt diese Rollen, um die entsprechenden Steuerungsebenenressourcen mit diesen Schlüsseln zu verschlüsseln.
So finden Sie die Clusterprojektnummer:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'
Ersetzen Sie
CLUSTER_PROJECT_ID
durch die Projekt-ID Ihres GKE-Clusterprojekts.Die Ausgabe sieht in etwa so aus:
1234567890
Weisen Sie dem GKE-Dienst-Agent im Clusterprojekt die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) für den Verschlüsselungsschlüssel für Boot- und etcd-Laufwerke zu:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project=KEY_PROJECT_ID
Ersetzen Sie Folgendes:
KCP_DISK_KEY_NAME
: Name des Laufwerkverschlüsselungsschlüssels.LOCATION
: den Google Cloud -Speicherort für den Schlüssel.KEYRING_NAME
: der Name des Schlüsselbunds, der den Verschlüsselungsschlüssel enthält.CLUSTER_PROJECT_NUMBER
: die numerische Projektnummer des Clusterprojekts, die Sie im vorherigen Schritt ermittelt haben.KEY_PROJECT_ID
: die Projekt-ID Ihres Schlüsselprojekts.
Weisen Sie dem GKE-Dienst-Agent im Clusterprojekt die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler über Delegation (
roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation
) für den Verschlüsselungsschlüssel für Boot- und etcd-Laufwerke zu:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \ --project=KEY_PROJECT_ID
Weisen Sie dem GKE-Dienst-Agent im Clusterprojekt die Rolle Cloud KMS CryptoKey Encrypter (
roles/cloudkms.cryptoKeyEncrypter
) für den internen etcd-Sicherungsverschlüsselungsschlüssel zu:gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypter \ --project=KEY_PROJECT_ID
Ersetzen Sie
ETCD_BACKUP_KEY_NAME
durch den Namen des Verschlüsselungsschlüssels für die etcd-Betriebssicherung.Wenn Sie die Rolle
roles/cloudkms.cryptoKeyEncrypter
gewähren, kann GKE keine Datenbankwiederherstellungen in Ihrem Namen ausführen. Außerdem dauert es bei einem Datenbankproblem wesentlich länger, bis die Funktionalität wiederhergestellt ist. Wenn Sie möchten, dass GKE Wiederherstellungen für Sie ausführt, weisen Sie stattdessen die Rolleroles/cloudkms.cryptoKeyEncrypterDecrypter
zu.
Verschlüsselungsschlüssel in einem Cluster verwenden
In diesem Abschnitt erfahren Sie, wie Sie die Pfade zu Ihren Verschlüsselungsschlüsseln ermitteln.
Geben Sie den Pfad zum Schlüssel für die Laufwerkverschlüsselung an:
gcloud kms keys describe KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"
Ersetzen Sie Folgendes:
KCP_DISK_KEY_NAME
: der Name des Verschlüsselungsschlüssels für Bootlaufwerke und etcd-Laufwerke der Kontrollebene.KEYRING_NAME
: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION
: den Google Cloud -Speicherort des Schlüssels.KEY_PROJECT_ID
: die Projekt-ID Ihres Schlüsselprojekts.
Die Ausgabe sieht in etwa so aus:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
Geben Sie den Pfad zum internen Verschlüsselungsschlüssel für etcd-Sicherungen an:
gcloud kms keys describe ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"
Ersetzen Sie
ETCD_BACKUP_KEY_NAME
durch den Namen des Verschlüsselungsschlüssels für die etcd-Betriebssicherung.Die Ausgabe sieht in etwa so aus:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
Cluster erstellen
In diesem Abschnitt erstellen Sie einen Cluster mit verschiedenen Optionen, je nachdem, welche GKE-Steuerungsebenen-Autorisierungsfunktionen Sie konfigurieren möchten. Sie können diese Funktionen nur während der Clustererstellung konfigurieren. Mit den folgenden Befehlen werden Cluster im Autopilot-Modus erstellt. Wenn Sie stattdessen Cluster im Standardmodus erstellen möchten, verwenden Sie dieselben Flags mit dem Befehl gcloud container clusters create
.
So erstellen Sie einen Cluster, der die Laufwerkverschlüsselung konfiguriert und Ihre eigenen Zertifizierungsstellen und Dienstkontosignaturschlüssel ausführt:
- Führen Sie alle Schritte zur Konfiguration von Schlüsseln und Zertifizierungsstellen unter Eigene Zertifizierungsstellen und Schlüssel verwenden aus.
- Die Pfade zu den einzelnen Dienstkontoschlüsseln und Zertifizierungsstellen finden Sie in der Anleitung unter Zertifizierungsstellen und Schlüssel in einem neuen Cluster einrichten.
Erstellen Sie einen Cluster.
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \ --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \ --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \ --cluster-ca=PATH_TO_CLUSTER_CA \ --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \ --etcd-api-ca=PATH_TO_ETCD_API_CA \ --aggregation-ca=PATH_TO_AGGREGATION_CA
Ersetzen Sie Folgendes:
CLUSTER_NAME
: Der Name des neuen Clusters.LOCATION
: Der Standort Ihres neuen Clusters.CLUSTER_PROJECT_ID
: die Projekt-ID Ihres Clusterprojekts.PATH_TO_DISK_KEY
: der Pfad zum Laufwerkverschlüsselungsschlüssel aus den vorherigen Schritten auf dieser Seite.PATH_TO_ETCD_BACKUP_KEY
: der Pfad zum internen Verschlüsselungsschlüssel für die etcd-Sicherung aus den vorherigen Schritten auf dieser Seite.PATH_TO_SIGNING_KEY_VERSION
: der Pfad zur Version des Signaturschlüssels des Kubernetes-Dienstkontos in Cloud KMS.PATH_TO_VERIFICATION_KEY_VERSION
: der Pfad zur Version des Kubernetes-Dienstkonto-Bestätigungsschlüssels in Cloud KMS.PATH_TO_CLUSTER_CA
: Pfad zum Cluster-CA-Pool.PATH_TO_ETCD_PEER_CA
: der Pfad zum etcd-Peer-CA-Pool.PATH_TO_ETCD_API_CA
: Pfad zum etcd API-CA-Pool.PATH_TO_AGGREGATION_CA
: der Pfad zum CA-Pool für die Aggregation.
Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen, bei dem die Laufwerkverschlüsselung nur mit den Schlüsseln konfiguriert wird, die Sie in diesem Leitfaden erstellt haben:
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
Ersetzen Sie Folgendes:
CLUSTER_NAME
: Der Name des neuen Clusters.LOCATION
: Der Standort Ihres neuen Clusters.CLUSTER_PROJECT_ID
: die Projekt-ID Ihres Clusterprojekts.PATH_TO_DISK_KEY
: der Pfad zum Laufwerkverschlüsselungsschlüssel aus den vorherigen Schritten.PATH_TO_ETCD_BACKUP_KEY
: der Pfad zum internen Sicherungsverschlüsselungsschlüssel von etcd aus den vorherigen Schritten.
Sie können alle diese Flags auch angeben, wenn Sie einen neuen Cluster im Standardmodus erstellen.
Status des Verschlüsselungsschlüssels prüfen
In diesem Abschnitt erfahren Sie, wie Sie den Verschlüsselungsschlüssel prüfen, der beim Erstellen des Clusters verwendet wurde. Sie können diese Überprüfung mit Cloud Logging oder mit der Google Cloud CLI durchführen.
Schlüssel mithilfe von Logging prüfen
So prüfen Sie die Schlüssel mithilfe der Protokollierung:
Rufen Sie in der Google Cloud -Konsole die Seite Log-Explorer auf:
Rufen Sie das Protokoll zur Clustererstellung mit der folgenden Abfrage ab:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*
Klicken Sie auf Abfrage ausführen.
Prüfen Sie in der Ausgabe, ob die Parameter für die Clustererstellung einen Schlüsselpfad enthalten, der dem Schlüssel entspricht, den Sie in Cloud KMS eingerichtet haben, wie im folgenden Beispiel:
# lines omitted for clarity
userManagedKeysConfig: {
controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}
Schlüssel mit der gcloud CLI prüfen
So überprüfen Sie den Verschlüsselungsschlüssel mit der gcloud CLI:
Führen Sie für den Laufwerkverschlüsselungsschlüssel den folgenden Befehl aus:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
Führen Sie für den internen Verschlüsselungsschlüssel der etcd-Sicherung den folgenden Befehl aus:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
Nächste Schritte
- Weitere Informationen zu den Daten, die Sie in der Steuerebene sehen können
- Eigene Zertifizierungsstellen und Schlüssel in GKE ausführen
- Integrität der VM der Steuerungsebene prüfen