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 (Customer-Managed Encryption Keys, 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:
- Erstellen Sie einen Bigtable-Dienst-Agent (oder rufen Sie ihn ab).
- Erstellen Sie einen CMEK-Schlüssel.
- Konfigurieren Sie die IAM-Einstellungen für diesen Schlüssel.
Bigtable-Dienst-Agent erstellen
Zum Erstellen eines CMEK-Schlüssels benötigen Sie einen Bigtable-Dienst-Agent, den Bigtable für den Zugriff auf den Schlüssel verwendet.
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
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.
Im Google Cloud-Projekt, in dem Sie Ihre Schlüssel verwalten möchten:
Erstellen Sie einen Schlüsselbund und einen Schlüssel mit einer der folgenden Optionen:
- Erstellen Sie den Schlüsselbund und den Schlüssel direkt in Cloud KMS.
- Verwenden Sie einen extern verwalteten Schlüssel. Erstellen Sie den externen Schlüssel und erstellen Sie dann einen Cloud EKM-Schlüssel, um den Schlüssel über Cloud KMS verfügbar zu machen.
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 inus-central1-a
,us-central1-b
undus-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.
Öffnen Sie in der Google Cloud Console die Seite IAM.
Klicken Sie auf Add.
Geben Sie die wie eine E-Mail-Adresse formatierte ID für den Bigtable-Dienst-Agent ein.
Wählen Sie die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.
Klicken Sie auf Speichern.
gcloud
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 habenKMS_KEYRING
: Der KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATION
: Region, die den Schlüsselbund enthältSERVICE_ACCOUNT_EMAIL
: die wie eine E-Mail-Adresse formatierte Kennzeichnung für den Dienst-Agent, dem Sie Zugriff gewährenKMS_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
Rufen Sie in der Google Cloud Console die Seite „Bigtable-Instanzen” auf.
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.
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 ClustersINSTANCE_ID
: Die permanente Kennzeichnung der InstanzCBT_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 deaktivieren Sie alle Versionen eines Schlüssels auf einmal.
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.
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üsselsKMS_KEYRING
: Der KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATION
: Region, die den Schlüsselbund enthältKMS_PROJECT
: das Projekt, das den Schlüssel enthält
Die Ausgabe sieht 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
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 deaktivierenKMS_KEY
: Name des CMEK-SchlüsselsKMS_KEYRING
: Der KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATION
: Region, die den Schlüsselbund enthältKMS_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.[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 TabelleINSTANCE_ID
: Die permanente Kennzeichnung der InstanzCBT_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
[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 InstanzCBT_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 auf einmal 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.
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üsselsKMS_KEYRING
: Der KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATION
: Region, die den Schlüsselbund enthältKMS_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 deaktivierenKMS_KEY
: Name des CMEK-SchlüsselsKMS_KEYRING
: Der KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATION
: Region, die den Schlüsselbund enthältKMS_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:
Achten Sie darauf, dass für die Cloud KMS API in Ihrem Projekt Logging aktiviert ist.
Rufen Sie in der Google Cloud Console Cloud Logging auf.
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üsselsKMS_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
In Cloud KMS können Sie sich die folgenden Informationen zu den Bigtable-Ressourcen ansehen, die durch Ihre Schlüssel geschützt sind.
- Zusammenfassung der Schlüsselnutzung: Enthält Informationen zur Anzahl der geschützten Ressourcen und Projekte, die den Schlüssel verwenden.
- Details zur Schlüsselnutzung: Hier werden die Ressourcen angegeben, 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 zum Aufrufen der Schlüsselnutzung 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 ClustersINSTANCE_ID
: die permanente Kennung der Instanz, die die Sicherung enthältCBT_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
Rufen Sie in der Google Cloud Console die Seite „Bigtable-Instanzen” auf.
Klicken Sie auf den Instanznamen, um die Seite Instanzdetails zu öffnen.
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 IDCLUSTER_ID
: Die permanente Kennzeichnung des ClustersINSTANCE_ID
: die permanente Kennung der Instanz, die die Sicherung enthältCBT_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'