etcd- und Steuerungsebenen-Bootlaufwerke verschlüsseln


.

Auf dieser Seite wird beschrieben, wie Sie Daten verschlüsseln, die in Ihrer Google Kubernetes Engine-Steuerungsebene (GKE) gespeichert sind, indem Sie Schlüssel verwenden, 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 einer Reihe optionaler Steuerungsebenenfunktionen in GKE beschrieben, mit denen Sie Aufgaben wie das Überprüfen des Sicherheitsstatus der Steuerungsebene oder das Konfigurieren der Verschlüsselung und der Anmeldedatensignierung in der Steuerungsebene mit von Ihnen verwalteten Schlüsseln ausführen können. Weitere Informationen finden Sie unter GKE Control Plane Authority.

Standardmäßig wendet Google Cloud verschiedene Sicherheitsmaßnahmen auf die verwaltete Steuerungsebene an. Auf dieser Seite werden optionale Funktionen beschrieben, mit denen Sie mehr Einblick in die GKE-Steuerungsebene erhalten oder mehr Kontrolle darüber haben.

Bootlaufwerk und etcd-Verschlüsselung der Steuerungsebene

Standardmäßig verschlüsselt GKE das Bootlaufwerk eines Steuerungsebenenknotens, das Laufwerk, auf dem Daten in etcd gespeichert werden, und die Google Cloud interne Google CloudBetriebssicherung von etcd mit 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 Bootlaufwerk der Steuerungsebene und etcd-Verschlüsselung.

Sie erstellen Schlüssel in Cloud KMS, die von GKE zum Verschlüsseln Ihrer Steuerungsebenenressourcen 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. zum Einrichten eigener Zertifizierungsstellen, können Sie diesen Schlüsselbund für diese Anleitung verwenden.
  • Sie sollten die Schlüssel am selben Google Cloud Standort wie Ihren Cluster erstellen, um die Latenz zu verbessern.
  • In den meisten Anwendungsfällen können Sie die Cloud KMS-Schlüssel-Schutzstufe Software verwenden. Sie können auch Hardwareschlüssel mit Cloud HSM verwenden.
  • Sie müssen das Flag --purpose mit dem Wert encryption angeben, da diese Schlüssel für die symmetrische Verschlüsselung verwendet werden.
  • Sie sollten die Standarddauer für die Schlüssellöschung nicht ändern.

Verwendung mit anderen GKE Control Plane Authority-Funktionen

Die GKE Control Plane Authority bietet die folgenden Funktionen für selbstverwaltete Schlüssel, die Sie gleichzeitig beim Erstellen eines Clusters aktivieren müssen:

Sie können diese Funktionen nur aktivieren, wenn Sie einen neuen GKE-Cluster erstellen. Sie können vorhandene Cluster nicht aktualisieren, um diese Funktionen zu verwenden. Wenn Sie beide Funktionen im selben Cluster verwenden möchten, führen Sie alle Schlüssel- und CA-Konfigurationsverfahren in beiden Anleitungen aus und führen Sie dann den Befehl zum Erstellen des Clusters aus, mit dem beide Funktionsgruppen 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 enthält. Sie können einen beliebigen vorhandenen Schlüsselbund am Standort Ihres Clusters verwenden. Informationen zum Erstellen eines neuen Schlüsselbunds finden Sie unter Schlüsselbund erstellen.
  • Enable the Cloud Key Management Service API.

    Enable the API

Projekte identifizieren

Wir empfehlen, separate Google Cloud -Projekte wie folgt 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:

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 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, Kapazität für den vertraulichen Modus für Hyperdisk Balanced in mindestens drei Zonen in dieser Region haben.

    Für zonale Cluster im Standardmodus muss in der Clusterzone Hyperdisk Balanced-Kapazität verfügbar sein. Wenn Sie Hilfe bei der Kapazität benötigen, wenden Sie sich an Cloud Customer Care.

  • GKE unterstützt nur Schlüssel aus Cloud KMS. Sie können keinen anderen Kubernetes-KMS-Anbieter oder einen anderen Verschlüsselungsanbieter verwenden.

  • Cloud EKM-Schlüssel (Cloud External Key Manager) werden nicht unterstützt.

  • Sie können nicht auf die internen Betriebsbackups von etcd zugreifen oder mit ihnen interagieren. Sie sind nur für die Notfallwiederherstellung vorgesehen. Google Cloud

  • Multiregionale Schlüsselbunde werden nicht unterstützt. Sie müssen einen regionalen Schlüsselbund verwenden.

  • Die Regionen und Zonen, in denen Sie die GKE Control Plane Authority verwenden können, hängen davon ab, ob Sie auch bestimmte Funktionen verwenden möchten:

    • Wenn Sie die Bootlaufwerke der Steuerungsebene mit einem vom Kunden verwalteten Verschlüsselungsschlüssel verschlüsseln möchten, muss sich Ihr Cluster in einer der folgenden Regionen befinden:
      • asia-east1
      • asia-northeast1
      • asia-southeast1
      • europe-west1
      • europe-west4
      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-south1
      • us-west1
      • us-west3
      • us-west4
    • Wenn Sie Confidential GKE Nodes mit der GKE-Steuerungsebene verwenden möchten, muss sich Ihr Cluster in einer Region befinden, die den vertraulichen Modus für Hyperdisk Balanced unterstützt.

    Wenn Sie diese Funktionen nicht verwenden, können Sie die GKE Control Plane Authority an einem beliebigen Google Cloud -Standort verwenden.

Schlüssel erstellen

In diesem Abschnitt erstellen Sie einen Verschlüsselungsschlüssel für die Boot- und etcd-Laufwerke in der Steuerungsebene und einen separaten Verschlüsselungsschlüssel für die Google Cloudinterne operative Sicherung von etcd. Sie können einen Schlüsselbund verwenden, um alle diese Schlüssel und alle anderen Schlüssel für den Cluster zu speichern.

  1. 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 Steuerungsebene.
    • KEYRING_NAME: Der Name des Schlüsselbunds, in dem die Verschlüsselungsschlüssel für den Cluster gespeichert werden.
    • LOCATION: der Google Cloud Speicherort des Schlüsselbunds. Dieser muss mit dem Standort Ihres Clusters übereinstimmen. Eine Liste der Regionen finden Sie in der Tabelle mit Cloud KMS-Standorten, indem Sie nach „Region“ filtern.
    • PROTECTION_LEVEL: Das Schutzniveau für den Schlüssel, z. B. software oder hsm.
    • KEY_PROJECT_ID: Die Projekt-ID Ihres Schlüsselprojekts.
  2. Erstellen Sie den internen etcd-Verschlüsselungsschlüssel für Sicherungen:

    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 etcd-Sicherungsschlüssel.

IAM-Rollen für den GKE-Dienst-Agent gewähren

In diesem Abschnitt weisen Sie dem GKE-Dienst-Agent im Clusterprojekt IAM-Rollen für die von Ihnen erstellten Schlüssel zu. Der GKE-Dienst-Agent benötigt diese Rollen, um die entsprechenden Steuerungsebenenressourcen mit diesen Schlüsseln zu verschlüsseln.

  1. So finden Sie die Projektnummer Ihres Clusters:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    Ersetzen Sie CLUSTER_PROJECT_ID durch die Projekt-ID Ihres GKE-Clusterprojekts.

    Die Ausgabe sieht etwa so aus:

    1234567890
    
  2. 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: der Name des Verschlüsselungsschlüssels für das Laufwerk.
    • LOCATION: der Google Cloud Speicherort des Schlüssels.
    • 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.
  3. Weisen Sie dem GKE-Dienst-Agent im Clusterprojekt die Rolle Cloud KMS CryptoKey Encrypter/Decrypter Via 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
    
  4. Weisen Sie dem GKE-Dienst-Agent im Clusterprojekt für die Schlüsselrotation die Rolle Cloud KMS-Schlüsselnutzer für die Verschlüsselungsschlüssel für Bootlaufwerke 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/container.cloudKmsKeyUser \
        --project=KEY_PROJECT_ID
    
  5. 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 etcd-Verschlüsselungsschlüssels für operative Back-ups.

    Wenn Sie die Rolle roles/cloudkms.cryptoKeyEncrypter zuweisen, kann GKE keine Datenbankwiederherstellungen in Ihrem Namen durchführen. Außerdem verlängert sich die Zeit, die für die Wiederherstellung der Funktionalität benötigt wird, wenn ein Datenbankproblem auftritt. Wenn GKE Wiederherstellungen für Sie ausführen soll, weisen Sie stattdessen die Rolle roles/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.

  1. Ermitteln Sie den Pfad zu Ihrem Schlüssel zur Laufwerksverschlüsselung:

    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 der Steuerungsebene und etcd-Laufwerke.
    • KEYRING_NAME: der Name des Schlüsselbunds, der den Schlüssel enthält
    • LOCATION: Der Google Cloud Speicherort des Schlüssels.
    • KEY_PROJECT_ID: Die Projekt-ID Ihres Schlüsselprojekts.

    Die Ausgabe sieht etwa so aus:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
    
  2. Ermitteln Sie den Pfad zu Ihrem internen etcd-Sicherungsschlüssel:

    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 etcd-Verschlüsselungsschlüssels für operative Back-ups.

    Die Ausgabe sieht 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-Autoritätsfunktionen Sie konfigurieren möchten. Sie können diese Funktionen nur beim Erstellen eines Clusters konfigurieren. Mit den folgenden Befehlen werden Cluster im Standardmodus erstellt. Wenn Sie stattdessen Cluster im Autopilot-Modus erstellen möchten, verwenden Sie dieselben Flags mit dem Befehl gcloud container clusters create-auto.

  • So erstellen Sie einen Cluster, in dem die Festplattenverschlüsselung konfiguriert ist und Ihre eigenen CAs und Dienstkonto-Signaturschlüssel ausgeführt werden:

    1. Führen Sie alle Schritte zur Schlüssel- und CA-Konfiguration unter Eigene Zertifizierungsstellen und Schlüssel verwenden aus.
    2. Die Pfade zu den einzelnen Dienstkontoschlüsseln und Zertifizierungsstellen finden Sie in der Anleitung unter Zertifizierungsstellen und Schlüssel in einem neuen Cluster einrichten.
    3. Erstellen Sie einen Cluster.

      gcloud container clusters create 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 zu Ihrem Festplattenverschlüsselungsschlüssel aus den vorherigen Schritten auf dieser Seite.
      • PATH_TO_ETCD_BACKUP_KEY: Der Pfad zu Ihrem internen etcd-Sicherungsverschlüsselungsschlüssel aus den vorherigen Schritten auf dieser Seite.
      • PATH_TO_SIGNING_KEY_VERSION: Der Pfad zur Signaturschlüsselversion des Kubernetes-Dienstkontos in Cloud KMS.
      • PATH_TO_VERIFICATION_KEY_VERSION: der Pfad zur Version des Kubernetes-Dienstkontoverifizierungsschlüssels in Cloud KMS.
      • PATH_TO_CLUSTER_CA: Der 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 Aggregations-CA-Pool.
  • Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen, in dem die Festplattenverschlüsselung nur mit den Schlüsseln konfiguriert wird, die Sie in dieser Anleitung erstellt haben:

    gcloud container clusters create 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 zu Ihrem Festplattenverschlüsselungsschlüssel aus den vorherigen Schritten.
    • PATH_TO_ETCD_BACKUP_KEY: der Pfad zu Ihrem internen etcd-Sicherungsverschlüsselungsschlüssel 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 wird beschrieben, wie Sie den Verschlüsselungsschlüssel überprü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 mit Logging überprüfen

So prüfen Sie die Schlüssel mit Logging:

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:

    Zum Log-Explorer

  2. Rufen Sie das Log für die 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:*
    
  3. 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 prüfen Sie den Verschlüsselungsschlüssel mit der gcloud CLI:

  1. 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)"
    
  2. Führen Sie für den internen etcd-Sicherungsschlüssel den folgenden Befehl aus:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
    

Nächste Schritte