Auf dieser Seite wird beschrieben, wie Sie Aufgaben im Zusammenhang mit kundenverwalteten Verschlüsselungsschlüsseln (CMEK) für Cloud Firestore ausführen. Weitere Informationen zu CMEK und deren Aktivierung finden Sie in der Cloud KMS-Dokumentation.
CMEK-Schlüssel vorbereiten
Bevor Sie eine CMEK-geschützte Cloud Firestore-Datenbank erstellen können, müssen Sie die folgenden Schritte ausführen:
- Zugriff auf das CMEK-Feature von Cloud Firestore anfordern.
- Erstellen Sie einen Cloud Firestore-Dienst-Agent (oder rufen Sie ihn ab).
- Erstellen Sie einen CMEK-Schlüssel.
- Konfigurieren Sie die IAM-Einstellungen für diesen Schlüssel.
Führen Sie diese Schritte für jedes Projekt aus, das CMEK-geschützte Cloud Firestore-Datenbanken enthalten soll. Wenn Sie später einen neuen CMEK-Schlüssel erstellen, müssen Sie die IAM-Einstellungen für diesen Schlüssel konfigurieren.
Zugriff anfordern
Bevor Sie einen Cloud Firestore-Dienst-Agent erstellen, müssen Sie Zugriff auf das CMEK-Feature anfordern. Füllen Sie dazu dieses Formular aus.
Cloud Firestore-Dienst-Agent erstellen
Bevor Sie einen CMEK-Schlüssel erstellen, benötigen Sie einen Cloud Firestore-Dienst-Agent. Dies ist ein von Google verwaltetes Dienstkonto, das Cloud Firestore für den Zugriff auf den Schlüssel verwendet.
Führen Sie den Befehl services identity create aus, um den Dienst-Agent zu erstellen, den Cloud Firestore verwendet, um in Ihrem Namen auf den CMEK-Schlüssel zuzugreifen. Mit diesem Befehl wird das Dienstkonto erstellt, falls es noch nicht vorhanden ist, und es wird angezeigt.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
Ersetzen Sie FIRESTORE_PROJECT durch das Projekt, das Sie für Ihre Cloud Firestore-Datenbanken verwenden möchten.
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-firestore.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.
Der Speicherort des Cloud KMS-Schlüssels muss mit dem Speicherort der Cloud Firestore-Datenbank übereinstimmen, mit der er verwendet wird.
Verwenden Sie für regionale Datenbankstandorte denselben Standortnamen für Schlüsselbund, Schlüssel und Datenbank, da die Standortnamen eine 1:1-Zuordnung haben.
Wenn Sie beispielsweise eine CMEK-geschützte Datenbank in
us-west1erstellen möchten, erstellen Sie einen Schlüsselbund und einen Schlüssel inus-west1.Verwenden Sie für multiregionale Datenbankspeicherorte den Standortnamen des multiregionalen KMS-Standorts:
- Verwenden Sie den multiregionalen Cloud KMS-Standort
usfür den multiregionalennam5-Standort Cloud Firestore. - Verwenden Sie den multiregionalen Cloud KMS-Standort
europefür den multiregionaleneur3-Standort Cloud Firestore.
- Verwenden Sie den multiregionalen Cloud KMS-Standort
Führen Sie im Projekt Google Cloud, in dem Sie Ihre Schlüssel verwalten möchten, die folgenden Schritte aus:
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.
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 Hinzufügen.
Geben Sie die ID im E-Mail-Format für Ihren Cloud Firestore-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_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
Ersetzen Sie Folgendes:
KMS_KEYdurch den Namen, den Sie dem Schlüssel zugewiesen habenKMS_KEYRINGdurch den KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATIONdurch die Region, die den Schlüsselbund enthältSERVICE_AGENT_EMAILdurch die E-Mail-ID des Dienst-Agents, dem Sie Zugriff gewähren.KMS_PROJECTdurch das Projekt, das den Schlüssel enthält
Im Terminal sollte eine Antwort wie die folgende angezeigt werden:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
CMEK-fähige Datenbank erstellen
Nachdem Ihre CMEK-Schlüssel erstellt und konfiguriert wurden, können Sie eine CMEK-geschützte Datenbank erstellen. Vorhandene Cloud Firestore-Datenbanken, die durch die Standardverschlüsselung von Google geschützt werden, können nicht für die Verwendung von CMEK konvertiert werden.
Sie können einen Verschlüsselungstyp und einen Schlüssel nur auswählen, wenn Sie eine CMEK-fähige Datenbank erstellen.
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Klicken Sie auf Datenbank erstellen.
Wählen Sie den Datenbankmodus aus. Klicken Sie auf Weiter.
Geben Sie auf der Seite Datenbank konfigurieren eine Datenbank-ID ein.
Wählen Sie eine Zielregion aus.
Klicken Sie auf Verschlüsselungsoptionen anzeigen und wählen Sie dann Cloud KMS-Schlüssel aus.
Wählen Sie den Ressourcennamen für den CMEK aus, den Sie für die Datenbank verwenden möchten, oder geben Sie ihn ein.
Die Liste der Schlüssel ist auf das aktuelle Google Cloud-Projekt und den von Ihnen ausgewählten Datenbankstandort beschränkt. Wenn Sie einen Schlüssel aus einem anderen Google Cloud-Projekt verwenden möchten, klicken Sie auf Projekt wechseln oder Schlüssel manuell eingeben.
Wenn Sie aufgefordert werden, dem Dienstkonto Cloud Firestore die Schlüsselberechtigung zu erteilen, klicken Sie auf Erteilen. Damit Sie eine CMEK-Datenbank erstellen können, muss Ihrem Cloud Firestore-Dienstkonto die Rolle
cloudkms.cryptoKeyEncrypterDecrypterzugewiesen werden.Wählen Sie Sicherheitsregeln für Mobil- und Webclients aus.
Klicken Sie auf Datenbank erstellen.
Nachdem die Datenbank erstellt wurde, können Sie prüfen, ob CMEK für die Datenbank aktiviert ist. Rufen Sie dazu die Datenbankdetails auf:
- Wenn Ihre Datenbank durch CMEK geschützt ist, wird im Feld Verschlüsselungstyp der Wert Vom Kunden verwaltet angezeigt. Im Feld Verschlüsselungsschlüssel werden der entsprechende Cloud KMS-Schlüssel und die Schlüsselversion aufgeführt, die zum Schutz dieser Datenbank verwendet wird.
- Wenn Ihre Datenbank nicht durch CMEK geschützt ist, wird im Feld Verschlüsselungstyp der Wert Von Google verwaltet angezeigt.
gcloud
Bevor Sie eine CMEK-fähige Datenbank mit Google Cloud CLI erstellen, installieren Sie die aktuelle Version und autorisieren Sie gcloud CLI. Weitere Informationen finden Sie unter gcloud CLI installieren.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Ersetzen Sie Folgendes:
FIRESTORE_DATABASE_LOCATIONdurch den Cloud Firestore-Standort für die DatenbankDATABASE_IDdurch eine ID für die DatenbankKMS_KEY_NAMEdurch den Namen, den Sie dem Schlüssel zugewiesen haben. Verwenden Sie den vollständigen Ressourcennamen für den Schlüssel im folgenden Format:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_IDFIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden soll
REST API
HTTP-Anfrage:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
Konfigurieren Sie im Anfragetext CMEK im Feld cmek_config.kms_key_name.
Legen Sie die vollständige Ressourcen-ID eines Cloud KMS-Schlüssels fest. Es ist nur ein Schlüssel am selben Standort wie diese Datenbank zulässig.
Dieser Wert sollte die Cloud KMS-Schlüsselressourcen-ID im Format projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} sein.
Weitere Informationen zu anderen Feldern finden Sie auf der Seite zu database create.
Beispielanfrage:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Firebase CLI
Verwenden Sie das Feld KMS-Schlüsselname, um eine CMEK-fähige Datenbank zu erstellen. Wenn Sie den Parameter --kms-key-name nicht angeben, erstellt Cloud Firestore standardmäßig eine Datenbank ohne CMEK.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
Ersetzen Sie Folgendes:
DATABASE_IDdurch die ID Ihrer DatenbankLOCATIONdurch den Standort Ihrer Datenbank.KMS_PROJECTdurch das Projekt, das Ihren CMEK-Schlüssel enthält.KMS_LOCATIONdurch den Standort, der Ihren CMEK-Schlüssel und -Schlüsselbund enthältKMS_KEYRING_IDdurch die ID Ihres CMEK-SchlüsselbundsFIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden soll
Prüfen Sie mit der Firebase CLI, ob Ihre Cloud Firestore-Datenbank geschützt ist:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Die folgenden CMEK-Informationen werden in der Antwortnachricht angezeigt:
- Das Feld KMS-Schlüsselname enthält den vollständigen Namen der Schlüsselressource, die zum Verschlüsseln Ihrer Cloud Firestore-CMEK-Datenbank verwendet wird.
- Das Feld Aktive Schlüsselversionen enthält eine Liste aller Schlüsselversionen, die derzeit von dieser CMEK-Datenbank verwendet werden. Während der Schlüsselrotation können mehrere aktive Schlüsselversionen vorhanden sein.
Terraform
Verwenden Sie zum Erstellen einer CMEK-fähigen Datenbank die Ressource google_firestore_database. Weitere Informationen und Beispiele finden Sie unter google_firestore_database.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
Ersetzen Sie Folgendes:
FIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden sollDATABASE_IDdurch eine ID für die DatenbankFIRESTORE_DATABASE_LOCATIONdurch den Cloud Firestore-Standort für die DatenbankDATABASE_TYPEdurchFIRESTORE_NATIVEfür den nativen Modus oderDATASTORE_MODEfür den Datastore-Modus.KMS_KEY_NAMEdurch den Namen, den Sie dem Schlüssel zugewiesen haben. Verwenden Sie den vollständigen Ressourcennamen für den Schlüssel im folgenden Format:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Auf eine CMEK-geschützte Datenbank zugreifen
Alle Lese-, Schreib- und Abfragevorgänge, die an eine CMEK-geschützte Datenbank gesendet werden, sollten genauso funktionieren wie bei einer standardmäßig von Google verschlüsselten Datenbank. Sie müssen beispielsweise nicht für jede Anfrage einen Schlüssel angeben.
CMEK-geschützte Datenbank wiederherstellen
Bevor Sie eine CMEK-geschützte Datenbank aus einer Sicherung wiederherstellen:
- Entscheiden Sie, ob Sie die Datenbank mit CMEK-Verschlüsselung, mit der Standardverschlüsselung von Google (ohne CMEK) oder mit derselben Verschlüsselung wie die Sicherung wiederherstellen möchten.
Bereiten Sie den Schlüssel (primäre Version) und die Schlüsselversion vor, die Sie zum Verschlüsseln der Sicherung verwendet haben. Aktivieren Sie sowohl den Schlüssel als auch die Schlüsselversion.
gcloud
CMEK-geschützte Datenbank mit CMEK-Verschlüsselung wiederherstellen
Wenn Sie die CMEK-Verschlüsselung wiederherstellen möchten, führen Sie den Befehl gcloud firestore databases restore mit den optionalen Flags encryption-type und kms-key-name aus, um den Verschlüsselungstyp für die wiederhergestellte Datenbank zu konfigurieren. Wenn Sie den Verschlüsselungstyp nicht angeben, wird für die wiederhergestellte Datenbank dieselbe Verschlüsselungskonfiguration wie für die Sicherung verwendet.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
Ersetzen Sie KMS_KEY_NAME durch den Namen, den Sie dem Schlüssel zugewiesen haben. Verwenden Sie den vollständigen Ressourcennamen für den Schlüssel im folgenden Format:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK-geschützte Datenbank mit Standardverschlüsselung wiederherstellen
Wenn Sie die Standardverschlüsselung von Google (nicht CMEK) wiederherstellen möchten, legen Sie das Flag encryption-type so fest:
gcloud firestore databases restore
--encryption-type=google-default-encryption
CMEK-geschützte Datenbank mit demselben Verschlüsselungstyp wie die Sicherung wiederherstellen
Wenn Sie den gleichen Verschlüsselungstyp wie bei der Sicherung wiederherstellen möchten, legen Sie das Flag encryption-type so fest:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
CMEK-geschützte Datenbank mit CMEK-Verschlüsselung wiederherstellen
Wenn Sie die CMEK-Verschlüsselung wiederherstellen möchten, verwenden Sie die optionalen Flags encryption-type und kms-key-name.
Wenn Sie den Verschlüsselungstyp nicht angeben, wird für die wiederhergestellte Datenbank dieselbe Verschlüsselungskonfiguration wie für die Sicherung verwendet.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
Ersetzen Sie Folgendes:
DATABASE_IDdurch die ID Ihrer DatenbankFIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden sollFIRESTORE_LOCATIONdurch den Standort Ihrer Cloud Firestore-DatenbankBACKUP_IDdurch die ID Ihrer SicherungKMS_PROJECTdurch das Projekt, das Ihren CMEK-Schlüssel enthält.KMS_LOCATIONdurch den Standort, der Ihren CMEK-Schlüssel und -Schlüsselbund enthältKMS_KEYRING_IDdurch die ID Ihres CMEK-Schlüsselbunds
Prüfen Sie, ob die wiederhergestellte Cloud Firestore-Datenbank mit CMEK verschlüsselt ist:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
CMEK-geschützte Datenbank mit Standardverschlüsselung wiederherstellen
Wenn Sie die Standardverschlüsselung von Google (nicht CMEK) wiederherstellen möchten, legen Sie das Flag encryption-type so fest:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
Ersetzen Sie Folgendes:
DATABASE_IDdurch die ID Ihrer DatenbankFIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden sollFIRESTORE_LOCATIONdurch den Standort Ihrer Cloud Firestore-DatenbankBACKUP_IDdurch die ID Ihrer Sicherung
CMEK-geschützte Datenbank mit demselben Verschlüsselungstyp wie die Sicherung wiederherstellen
Wenn Sie den gleichen Verschlüsselungstyp wie bei der Sicherung wiederherstellen möchten, legen Sie das Flag encryption-type so fest:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Ersetzen Sie Folgendes:
DATABASE_IDdurch die ID Ihrer DatenbankFIRESTORE_PROJECTdurch das Projekt, das für Ihre Cloud Firestore-Datenbank verwendet werden sollFIRESTORE_LOCATIONdurch den Standort Ihrer Cloud Firestore-DatenbankBACKUP_IDdurch die ID Ihrer Sicherung
CMEK-geschützte Datenbank klonen
Bevor Sie eine CMEK-geschützte Datenbank klonen:
- Entscheiden Sie, ob Sie die Datenbank mit CMEK-Verschlüsselung, mit der Standardverschlüsselung von Google (ohne CMEK) oder mit derselben Verschlüsselung wie die Quelldatenbank klonen möchten.
Bereiten Sie den Schlüssel (primäre Version) und die Schlüsselversion vor, die Sie zum Verschlüsseln der Quelldatenbank verwendet haben. Aktivieren Sie sowohl den Schlüssel als auch die Schlüsselversion.
gcloud
CMEK-geschützte Datenbank in CMEK-Verschlüsselung klonen
Wenn Sie mit CMEK-Verschlüsselung klonen möchten, führen Sie den Befehl gcloud firestore databases clone mit den optionalen Flags encryption-type und kms-key-name aus, um den Verschlüsselungstyp für die geklonte Datenbank zu konfigurieren. Wenn Sie den Verschlüsselungstyp nicht angeben, wird für die geklonte Datenbank dieselbe Verschlüsselungskonfiguration wie für die Quelldatenbank verwendet.
gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
Ersetzen Sie KMS_KEY_NAME durch den Namen, den Sie dem Schlüssel zugewiesen haben. Verwenden Sie den vollständigen Ressourcennamen für den Schlüssel im folgenden Format:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK-geschützte Datenbank mit Standardverschlüsselung klonen
Wenn Sie in die Standardverschlüsselung von Google (nicht CMEK) klonen möchten, legen Sie das Flag encryption-type so fest:
gcloud firestore databases clone \
--encryption-type=google-default-encryption
CMEK-geschützte Datenbank mit demselben Verschlüsselungstyp wie die Quelldatenbank klonen
Wenn Sie den Klon mit demselben Verschlüsselungstyp wie die Quelldatenbank erstellen möchten, legen Sie das Flag encryption-type so fest:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
Dies ist auch das Standardverhalten, wenn --encryption-type nicht angegeben ist.
Firebase CLI
CMEK-geschützte Datenbank mit CMEK-Verschlüsselung klonen
Wenn Sie mit CMEK-Verschlüsselung klonen möchten, führen Sie den Befehl firebase firestore:databases:clone mit den optionalen Flags encryption-type und kms-key-name aus, um den Verschlüsselungstyp für die geklonte Datenbank zu konfigurieren. Wenn Sie den Verschlüsselungstyp nicht angeben, wird für die geklonte Datenbank dieselbe Verschlüsselungskonfiguration wie für die Quelldatenbank verwendet.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
Ersetzen Sie KMS_KEY_NAME durch den Namen, den Sie dem Schlüssel zugewiesen haben. Verwenden Sie den vollständigen Ressourcennamen für den Schlüssel im folgenden Format:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK-geschützte Datenbank mit Standardverschlüsselung klonen
Wenn Sie in die Standardverschlüsselung von Google (nicht CMEK) klonen möchten, legen Sie das Flag encryption-type so fest:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
CMEK-geschützte Datenbank in denselben Verschlüsselungstyp wie die Quelldatenbank klonen
Wenn Sie den Klon mit demselben Verschlüsselungstyp wie die Quelldatenbank erstellen möchten, legen Sie das Flag encryption-type so fest:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
Dies ist auch das Standardverhalten, wenn --encryption-type nicht angegeben ist.
Verwendeten Schlüssel anzeigen
gcloud
Mit dem Befehl databases describe gcloud CLI können Sie die CMEK-Konfiguration der Datenbank prüfen:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
In der Antwort sollten im Feld cmekConfig CMEK-Informationen ähnlich den folgenden angezeigt werden:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
Die Antwort enthält die folgenden Informationen:
kmsKeyName: Der vollständige Schlüsselressourcenname des Schlüssels, der zum Verschlüsseln Ihrer CMEK-geschützten Datenbank verwendet wird.activeKeyVersion: Eine Liste aller Schlüsselversionen, die derzeit von der CMEK-geschützten Datenbank verwendet werden. Während der Schlüsselrotation können mehrere aktive Schlüsselversionen vorhanden sein. Sowohl die alte als auch die neue Schlüsselversion müssen während der Schlüsselrotation verfügbar sein. Deaktivieren Sie die alte Schlüsselversion erst, wenn sie nicht mehr im FeldactiveKeyVersionangezeigt wird.
REST API
HTTP-Anfrage:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
Konfigurieren Sie im Anfragetext CMEK im Feld cmek_config.kms_key_name.
Legen Sie die vollständige Ressourcen-ID eines Cloud KMS-Schlüssels fest. Es ist nur ein Schlüssel am selben Standort wie diese Datenbank zulässig.
Dieser Wert sollte die Ressourcen-ID des Cloud KMS-Schlüssels im Format projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} sein.
Weitere Informationen zu anderen Feldern finden Sie auf der Seite zu database create.
Beispiel für Anfrage und Antwort:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
—----------------------------------------- Response —--------------------------------------------
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
……
}
Schlüssel deaktivieren
So deaktivieren Sie einen Schlüssel, der mit einer Datenbank verknüpft ist:
- Die für eine Datenbank verwendeten Schlüsselversionen ansehen
- Deaktivieren Sie diese verwendeten Schlüsselversionen.
- Warten Sie, bis die Änderung wirksam wird, und prüfen Sie, ob die Daten nicht mehr zugänglich sind. Änderungen werden normalerweise innerhalb weniger Minuten wirksam, es kann jedoch auch bis zu 3 Stunden dauern.
Wenn ein von einer Datenbank verwendeter Schlüssel deaktiviert ist, wird eine FAILED_PRECONDITION-Ausnahme mit zusätzlichen Details in der Fehlermeldung ausgegeben, z. B.:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
Schlüssel aktivieren
So aktivieren Sie einen Schlüssel, der einer Datenbank zugeordnet ist, wieder:
- Für eine Datenbank verwendete Schlüsselversionen ansehen
- Diese verwendeten Schlüsselversionen aktivieren
- Warten Sie, bis die Änderung wirksam wird, und prüfen Sie, ob die Daten nicht mehr zugänglich sind. Änderungen werden normalerweise innerhalb weniger Minuten wirksam, es kann jedoch auch bis zu 3 Stunden dauern.
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.
In den Cloud KMS-Audit-Logs für den Datenzugriff sehen Sie, wann Cloud Firestore oder andere Produkte, die für die Verwendung Ihres CMEK-Schlüssels konfiguriert sind, Verschlüsselungs- oder Entschlüsselungsaufrufe an Cloud KMS senden. Cloud Firestore gibt nicht bei jeder Datenanfrage einen Verschlüsselungs-/Entschlüsselungsaufruf aus, sondern verwaltet 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 resource.labels.location=KMS_LOCATIONErsetzen Sie Folgendes:
KMS_KEYdurch den Namen des CMEK-SchlüsselsKMS_KEYRINGdurch den KMS-Schlüsselbund, der den Schlüssel enthältKMS_LOCATIONdurch den Speicherort des Schlüssels und des Schlüsselbunds.
Das Log enthält etwa alle fünf Minuten pro Datenbank einige Logeinträge. 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/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
Weitere Informationen zum Auswerten von Audit-Logs finden Sie unter Audit-Logs verstehen.
CMEK-Organisationsrichtlinie konfigurieren
Wenn Sie Anforderungen für die Verschlüsselungscompliance für Cloud Firestore-Datenbanken in Ihrer Organisation angeben möchten, verwenden Sie eine CMEK-Organisationsrichtlinieneinschränkung.
CMEK-Schutz verlangen
Konfigurieren Sie constraints/gcp.restrictNonCmekServices so, dass CMEK für die Erstellung von Cloud Firestore-Datenbanken erforderlich ist. Legen Sie die Einschränkung auf deny fest und fügen Sie firestore.googleapis.com der Ablehnungsliste hinzu. Beispiel:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Ersetzen Sie FIRESTORE_PROJECT durch das Projekt, das Sie einschränken möchten.
Weitere Informationen zum Konfigurieren von Organisationsrichtlinien finden Sie unter Richtlinien erstellen und bearbeiten.
Nachdem die Richtlinie in Kraft getreten ist, erhalten Sie eine FAILED_PRECONDITION-Ausnahme und eine Fehlermeldung, wenn Sie versuchen, eine Datenbank ohne CMEK im betroffenen Projekt zu erstellen. Eine Ausnahme sieht beispielsweise so aus:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictNonCmekServices", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ]
Verwendung von Schlüsseln für CMEK einschränken
Wenn Sie einschränken möchten, welche Cloud KMS-Schlüssel für den CMEK-Schutz verwendet werden, konfigurieren Sie die Einschränkung constraints/gcp.restrictCmekCryptoKeyProjects.
Als Listeneinschränkung sind die zulässigen Werte Indikatoren für die Ressourcenhierarchie (z. B. projects/PROJECT_ID, under:folders/FOLDER_ID und under:organizations/ORGANIZATION_ID). Verwenden Sie diese Einschränkung, indem Sie eine Liste von Indikatoren für die Ressourcenhierarchie konfigurieren und die Einschränkung auf Zulassen setzen.
Durch diese Konfiguration werden unterstützte Dienste eingeschränkt, sodass CMEK-Schlüssel nur aus den aufgeführten Projekten, Ordnern und Organisationen ausgewählt werden können. Anfragen zum Erstellen von CMEK-geschützten Ressourcen in konfigurierten Diensten sind ohne einen Cloud Firestore-Schlüssel aus einer der zulässigen Ressourcen nicht erfolgreich.
Im folgenden Beispiel werden nur Schlüssel aus dem ALLOWED_KEY_PROJECT_ID für CMEK-geschützte Datenbanken im angegebenen Projekt zugelassen:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
Nachdem die Richtlinie in Kraft getreten ist, erhalten Sie eine FAILED_PRECONDITION-Ausnahme und eine Fehlermeldung, wenn Sie gegen die Einschränkung verstoßen. Eine Ausnahme sieht so aus:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }