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

Auf dieser Seite wird beschrieben, wie Sie Aufgaben im Zusammenhang mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK) für Bigtable ausführen. Weitere Informationen zu CMEK und deren Aktivierung finden Sie in der Cloud KMS-Dokumentation.

Wir empfehlen die Verwendung der Google Cloud Console für alle Schlüsselverwaltungsaufgaben. Wenn Sie die Google Cloud CLI verwenden möchten, installieren Sie die gcloud CLI für Bigtable.

CMEK-Schlüssel vorbereiten

Bevor Sie eine CMEK-geschützte Bigtable-Ressource erstellen können, müssen Sie die folgenden Schritte ausführen, um einen CMEK-Schlüssel für jede Region zu erstellen, in der sich die Cluster der Instanz befinden:

  1. Erstellen Sie einen Bigtable-Dienst-Agent (oder rufen Sie ihn ab).
  2. Erstellen Sie einen CMEK-Schlüssel.
  3. Konfigurieren Sie die IAM-Einstellungen für diesen Schlüssel.

Bigtable-Dienst-Agent erstellen

Bevor Sie einen CMEK-Schlüssel erstellen, benötigen Sie einen Bigtable-Dienst-Agent, mit dem Bigtable auf den Schlüssel zugreift.

Console

Sie können keinen Dienst-Agent in der Google Cloud Console erstellen. Wenn Sie jedoch Ihren Schlüssel in der Google Cloud Console erstellen, werden Sie aufgefordert, die Rolle Cloud KMS-Verschlüsseler/Entschlüsseler zu gewähren. Der Dienst-Agent wird jetzt erstellt, wenn er noch nicht vorhanden ist.

gcloud

  1. Führen Sie den Befehl gcloud services identity create aus, um den Dienst-Agent aufzurufen, den Bigtable für den Zugriff auf den CMEK-Schlüssel in Ihrem Namen verwendet. Mit diesem Befehl wird das Dienstkonto erstellt, falls es noch nicht vorhanden ist, und es wird angezeigt.

    gcloud beta services identity create \
        --service=bigtableadmin.googleapis.com \
        --project CBT_PROJECT
    

    Ersetzen Sie CBT_PROJECT durch das Projekt, das Ihre Bigtable-Ressourcen enthält.

    Der Befehl zeigt die Dienst-Agent-ID an, die wie eine E-Mail-Adresse formatiert ist. Zeichnen Sie den Ausgabe-E-Mail-String auf, da Sie ihn in einem späteren Schritt benötigen.

    Service identity created:
    service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
    

Schlüssel erstellen

Sie können einen Schlüssel verwenden, der direkt in Cloud KMS erstellt wurde, oder einen extern verwalteten Schlüssel, den Sie mit Cloud External Key Manager zur Verfügung stellen.

  1. Im Google Cloud-Projekt, in dem Sie Ihre Schlüssel verwalten möchten:

    1. Aktivieren Sie die Cloud KMS API.

    2. Erstellen Sie einen Schlüsselbund und einen Schlüssel mit einer der folgenden Optionen:

      Der Speicherort des Cloud KMS-Schlüssels muss mit dem Bigtable-Cluster übereinstimmen, mit dem er verwendet wird. Wenn Sie beispielsweise einen Schlüsselbund und einen Schlüssel in us-central1 (Iowa) erstellen, können Cluster in us-central1-a, us-central1-b und us-central1-c durch Schlüssel aus diesem Schlüsselbund geschützt werden.

IAM-Einstellungen für den Schlüssel konfigurieren

Console

So weisen Sie Ihrem Dienst-Agent eine Cloud KMS-Rolle zu. Sie können auch eine Berechtigung auf Schlüssel- oder Schlüsselbundebene gewähren, wenn Sie einen niedrigeren Detaillierungsgrad benötigen.

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

    Zur Seite "IAM"

  2. Klicken Sie auf Hinzufügen.

  3. Geben Sie die wie eine E-Mail-Adresse formatierte ID für den Bigtable-Dienst-Agent ein.

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

  5. Klicken Sie auf Speichern.

gcloud

  1. Weisen Sie Ihrem Dienst-Agent die Rolle cloudkms.cryptoKeyEncrypterDecrypter zu:

    gcloud kms keys add-iam-policy-binding KMS_KEY \
        --keyring KMS_KEYRING\
        --location KMS_LOCATION \
        --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT
    

    Machen Sie folgende Angaben:

    • KMS_KEY: Name, den Sie dem Schlüssel zugewiesen haben
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält
    • KMS_LOCATION: Region, die den Schlüsselbund enthält
    • SERVICE_ACCOUNT_EMAIL: die wie eine E-Mail-Adresse formatierte Kennzeichnung für den Dienst-Agent, dem Sie Zugriff gewähren
    • KMS_PROJECT: das Projekt, das den Schlüssel enthält

CMEK-fähige Instanz erstellen

Nachdem Ihre CMEK-Schlüssel erstellt und konfiguriert wurden, können Sie eine CMEK-geschützte Instanz erstellen. Vorhandene Bigtable-Instanzen, die durch die Standardverschlüsselung von Google geschützt werden, können nicht für die Verwendung von CMEK konvertiert werden. Sie können nur zum Zeitpunkt der Erstellung einen Verschlüsselungstyp und einen Schlüssel auswählen.

Gehen Sie wie unter Instanz erstellen beschrieben vor, um Ihre CMEK-geschützte Instanz zu erstellen.

Verwendeten Schlüssel anzeigen

Die Informationen zu Schlüsselversionen stammen aus dem Feld encryption_info.

Führen Sie die folgenden Schritte aus, um die Informationen zur CMEK-Schlüsselversion für eine Tabelle aufzurufen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Bigtable-Instanzen” auf.

    Liste der Instanzen öffnen

  2. Klicken Sie auf den Namen der Instanz, die die Tabelle enthält, um die Seite Instanzdetails zu öffnen und die Liste der Cluster in der Instanz aufzurufen.

  3. Klicken Sie neben einer Cluster-ID unter Verschlüsselungsschlüssel auf den Schlüsselnamen, um die Seite Versionen für den Schlüssel des Clusters aufzurufen.

gcloud

Sie können die CMEK-Konfiguration für jeden Cluster so prüfen:

    gcloud bigtable clusters describe CLUSTER_ID \
        --instance INSTANCE_ID --project CBT_PROJECT

Machen Sie folgende Angaben:

  • CLUSTER_ID: Die permanente Kennzeichnung des Clusters
  • INSTANCE_ID: Die permanente Kennzeichnung der Instanz
  • CBT_PROJECT: Das Projekt, das Ihre Bigtable-Ressourcen enthält

Die Befehlsausgabe sollte in etwa so aussehen:

    defaultStorageType: SSD
    encryptionConfig:
      kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
    location: projects/cloud-bigtable-project/locations/us-central1-a
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
    serveNodes: 1
    state: READY

Schlüssel deaktivieren

Durch das Deaktivieren einer CMEK-Schlüsselversion wird der Zugriff auf alle Daten gesperrt, die durch diese Schlüsselversion geschützt sind. Das Löschen einer Schlüsselversion ist das permanente Gegenstück dieser Aktion (nach 24 Stunden). Deaktivieren Sie immer alle Schlüssel einer Instanz, anstatt nur die Schlüssel für einen oder manche Cluster zu deaktivieren.

Console

Dies ist die empfohlene Methode. Mit der Google Cloud Console können Sie alle Versionen eines Schlüssels auf einmal deaktivieren.

Folgen Sie dieser Anleitung für jede Schlüsselversion.

gcloud

Wir empfehlen die Verwendung der Google Cloud Console zum Deaktivieren von Schlüsseln. Wenn Sie stattdessen die Google Cloud CLI verwenden möchten, führen Sie die folgenden Befehle aus.

  1. Listen Sie alle Versionen des CMEK-Schlüssels auf:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Machen Sie folgende Angaben:

    • KMS_KEY: Name des CMEK-Schlüssels
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält
    • KMS_LOCATION: Region, die den Schlüsselbund enthält
    • KMS_PROJECT: das Projekt, das den Schlüssel enthält

    Die Ausgabe sieht in etwa so aus:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      ENABLED
    
  2. Alle Versionen deaktivieren:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions disable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Machen Sie folgende Angaben:

    • 1 2 3 4: Die Versionen, die Sie deaktivieren
    • KMS_KEY: Name des CMEK-Schlüssels
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält
    • KMS_LOCATION: Region, die den Schlüsselbund enthält
    • KMS_PROJECT: das Projekt, das den Schlüssel enthält

    Wenn Sie alle Schlüsselversionen noch einmal auflisten, wird ihr Status nun als DISABLED angezeigt. Es kann jedoch bis zu vier Stunden dauern, bis Bigtable auf diese Statusänderung reagiert.

  3. [Optional] Führen Sie den folgenden Befehl aus, um den Status eines deaktivierten CMEK nach einer Wartezeit von 4 Stunden zu bestätigen:

     gcloud bigtable instances tables describe TABLE_ID \
         --instance INSTANCE_ID --view ENCRYPTION \
         --project CBT_PROJECT
    

    Machen Sie folgende Angaben:

    • TABLE_ID: Die permanente Kennzeichnung der Tabelle
    • INSTANCE_ID: Die permanente Kennzeichnung der Instanz
    • CBT_PROJECT: Das Projekt, das Ihre Bigtable-Ressourcen enthält

    Die Befehlsausgabe sollte in etwa so aussehen:

    clusterStates:
      CLUSTER:
        encryptionInfo:
        - encryptionStatus:
            code: 9
            details:
            - '@type': type.googleapis.com/google.rpc.PreconditionFailure
              violations:
              - subject: KMS_KEY_NAME/cryptoKeyVersions/<int>
                type: KEY_DISABLED
            message: KMS_KEY_NAME is not enabled, current state is: DISABLED.
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int>
    name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
    
  4. [Optional] Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Cluster in der Instanz deaktiviert sind:

    gcloud bigtable clusters list --instances INSTANCE_ID
        --project CBT_PROJECT
    

    Machen Sie folgende Angaben:

    • INSTANCE_ID: Die permanente Kennzeichnung der Instanz
    • CBT_PROJECT: Das Projekt, das Ihre Bigtable-Ressourcen enthält

    Die Befehlsausgabe sollte in etwa so aussehen:

    NAME              ZONE           NODES  STORAGE    STATE
    my-cluster        us-central1-a  1      SSD        DISABLED
    my-other-cluster  us-central1-b  1      SSD        DISABLED
    

Schlüssel aktivieren

Wenn eine Schlüsselversion deaktiviert wurde, können Sie sie wieder aktivieren, um wieder Zugriff auf Ihre Bigtable-Ressourcen zu erhalten. Diese Option ist 30 Tage nach der Deaktivierung der Schlüsselversion verfügbar.

Console

Dies ist die empfohlene Methode. Mit der Google Cloud Console können Sie alle Versionen eines Schlüssels gleichzeitig aktivieren.

Folgen Sie dieser Anleitung für jede Schlüsselversion.

gcloud

Wir empfehlen die Verwendung der Google Cloud Console zum Aktivieren von Schlüsseln. Wenn Sie stattdessen die Google Cloud CLI verwenden möchten, führen Sie die folgenden Befehle aus.

  1. Sehen Sie sich die Versionsliste an, um alle Versionen des Schlüssels zu ermitteln:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Machen Sie folgende Angaben:

    • KMS_KEY: Name des CMEK-Schlüssels
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält
    • KMS_LOCATION: Region, die den Schlüsselbund enthält
    • KMS_PROJECT: das Projekt, das den Schlüssel enthält

    Die Befehlsausgabe sollte in etwa so aussehen:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      DISABLED
    

    Führen Sie den Befehl kms keys versions enable aus, wodurch alle Versionen bereitgestellt werden, die aufgelistet sind. In der Beispielausgabe sieht der Befehl in etwa so aus:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions enable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Machen Sie folgende Angaben:

    • 1 2 3 4: Die Versionen, die Sie deaktivieren
    • KMS_KEY: Name des CMEK-Schlüssels
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält
    • KMS_LOCATION: Region, die den Schlüsselbund enthält
    • KMS_PROJECT: das Projekt, das den Schlüssel enthält

    Wenn Sie die Schlüsselversionen noch einmal auflisten, ist der Status wieder auf ENABLED gesetzt.

Audit-Logs für einen Cloud KMS-Schlüssel aufrufen

Bevor Sie Audit-Logs für den Cloud KMS-Datenzugriff aktivieren, sollten Sie mit Cloud-Audit-Logs vertraut sein.

Audit-Logs für Cloud KMS-Datenzugriff zeigen an, wenn Bigtable oder andere Produkte, die für die Verwendung Ihres CMEK-Schlüssels konfiguriert wurden, Aufrufe zum Verschlüsseln oder Entschlüsseln an Cloud KMS senden. Bigtable gibt nicht bei jeder Datenanforderung einen Aufruf zum Verschlüsseln oder Entschlüsseln aus, sondern verwendet einen Poller, der den Schlüssel regelmäßig prüft. Die Abfrageergebnisse werden in den Audit-Logs angezeigt.

Sie können die Audit-Logs in der Google Cloud Console einrichten und mit ihnen interagieren:

  1. Achten Sie darauf, dass für die Cloud KMS API in Ihrem Projekt Logging aktiviert ist.

  2. Rufen Sie in der Google Cloud Console Cloud Logging auf.

    Zu Cloud Logging

  3. Beschränken Sie die Logeinträge auf Ihren Cloud KMS-Schlüssel, indem Sie dem Query Builder die folgenden Zeilen hinzufügen:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    

    Machen Sie folgende Angaben:

    • KMS_KEY: Name des CMEK-Schlüssels
    • KMS_KEYRING: Der KMS-Schlüsselbund, der den Schlüssel enthält

    Das Log enthält einige Logeinträge etwa alle fünf Minuten pro Tabelle in jedem Cluster. Die Logeinträge sehen in etwa so aus:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
    

Weitere Informationen zum Auswerten von Audit-Logs finden Sie unter Audit-Logs verstehen.

Schlüsselnutzung ansehen

Mit Cloud KMS können Sie die folgenden Informationen zu den Bigtable-Ressourcen aufrufen, die Ihre Schlüssel schützen.

  • Zusammenfassung der Schlüsselnutzung: Enthält Informationen zur Anzahl der geschützten Ressourcen und Projekte, die den Schlüssel verwenden.
  • Details zur Schlüsselverwendung: Gibt die Ressourcen an, die durch einen Schlüssel geschützt werden, und die Ressourcen, die vom Schlüssel abhängen.

Die folgenden Bigtable-Ressourcen werden unterstützt:

  • bigtableadmin.googleapis.com/Backup
  • bigtableadmin.googleapis.com/Cluster
  • bigtableadmin.googleapis.com/Table

Weitere Informationen finden Sie unter Informationen zur Schlüsselnutzung ansehen.

Verschlüsselungsstatus einer Tabelle ansehen

Console

Sie können den Verschlüsselungsstatus einer Tabelle nicht in der Google Cloud Console aufrufen.

gcloud

Wenn Sie die CMEK-Details in einer Tabelle ansehen möchten, setzen Sie view auf ENCRYPTION oder FULL. Die Antwort enthält die verwendete Schlüsselversion und deren Status, wie sie von Bigtable erkannt wird.

    gcloud alpha bigtable instances tables describe TABLE_ID \
        --instance INSTANCE_ID --view ENCRYPTION \
        --project CBT_PROJECT

Machen Sie folgende Angaben:

  • TABLE_ID: Die permanente Kennzeichnung des Clusters
  • INSTANCE_ID: die permanente Kennung der Instanz, die die Sicherung enthält
  • CBT_PROJECT: Das Projekt, das Ihre Bigtable-Ressourcen enthält

Die Befehlsausgabe sollte in etwa so aussehen:

    clusterStates:
      my-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      my-other-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table

Verschlüsselungsdetails für eine Sicherung ansehen

Eine Sicherung bleibt an der ursprünglichen Schlüsselversion angepinnt. Schlüsselversionsrotationen in Cloud KMS rotieren nicht die Versionen, die zum Entschlüsseln von Sicherungen verwendet werden.

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Bigtable-Instanzen” auf.

    Liste der Instanzen öffnen

  2. Klicken Sie auf den Instanznamen, um die Seite Instanzdetails zu öffnen.

  3. Klicken Sie im linken Navigationsbereich auf Sicherungen.

Der Schlüsselname und die Schlüsselversion für jede Sicherung werden unter Vom Kunden verwalteter Schlüssel aufgeführt.

gcloud

Führen Sie den folgenden Befehl aus, um sich Verschlüsselungsinformationen für eine Sicherung anzeigen zu lassen.

    gcloud alpha bigtable backups describe BACKUP_ID \
        --instance INSTANCE_ID --cluster CLUSTER_ID \
        --project CBT_PROJECT

Machen Sie folgende Angaben:

  • BACKUP_ID: die der Sicherung zugewiesene ID
  • CLUSTER_ID: Die permanente Kennzeichnung des Clusters
  • INSTANCE_ID: die permanente Kennung der Instanz, die die Sicherung enthält
  • CBT_PROJECT: Das Projekt, das Ihre Bigtable-Ressourcen enthält

Die Ausgabe des Befehls sieht in etwa so aus. kmsKeyVersion ist die CMEK-Schlüsselversion, an die die Sicherung angepinnt ist. Der Status der Schlüsselversion wird nicht gemeldet.

    encryptionInfo:
      encryptionStatus:
        code: 2
        message: Status of the associated key version is not tracked.
      encryptionType: CUSTOMER_MANAGED_ENCRYPTION
      kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
    endTime: '2020-09-01T00:03:26.568600Z'
    expireTime: '2020-09-02T00:03:25.436473Z'
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
    sizeBytes: '3780'

Nächste Schritte