Dieses Dokument bietet einen Überblick über Cloud HSM und zeigt, wie Sie mit HSM geschützte Verschlüsselungsschlüssel im Cloud Key Management Service erstellen und verwenden.
Was ist Cloud HSM?
Cloud HSM ist ein in der Cloud gehosteter HSM-Dienst (Hardware Security Module), mit dem Sie Verschlüsselungsschlüssel hosten und kryptografische Abläufe in einem Cluster von zertifizierten HSMs auf FIPS 140-2 Level 3 durchführen können. Google verwaltet den HSM-Cluster für Sie, sodass Sie sich keine Gedanken über Clustering, Skalierung oder Patching machen müssen. Da Cloud HSM Cloud KMS als Frontend verwendet, können Sie alle Features von Cloud KMS nutzen.
Schlüsselbund erstellen
Wenn Sie einen Schlüssel erstellen, fügen Sie ihn einem Schlüsselbund an einem bestimmten Google CloudSpeicherort hinzu. Sie können einen neuen Schlüsselbund erstellen oder einen vorhandenen verwenden. In diesem Thema erstellen Sie einen neuen Schlüsselbund und fügen ihm einen neuen Schlüssel hinzu.
Erstellen Sie einen Schlüsselbund an einem Google Cloud Standort, der Cloud HSM unterstützt.
Console
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Klicken Sie auf Schlüsselbund erstellen.
Geben Sie unter Schlüsselbundname einen Namen für den Schlüsselbund ein.
Wählen Sie als Schlüsselbundort einen Ort wie
"us-east1"aus.Klicken Sie auf Erstellen.
gcloud
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
-
Führen Sie in Ihrer Umgebung den Befehl
gcloud kms keyrings createaus:gcloud kms keyrings create KEY_RING \ --location LOCATIONErsetzen Sie Folgendes:
KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag
--helpaus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Bevor Sie diesen Code ausführen, sollten Sie sich mit der Verwendung von PHP auf Google Cloud vertraut machen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \
--request "POST" \
--header "authorization: Bearer TOKEN"
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das den Schlüsselbund enthält.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.
Weitere Informationen finden Sie in der KeyRing.create API-Dokumentation.
Schlüssel erstellen
Führen Sie die folgenden Schritte aus, um einen Cloud HSM-Schlüssel für den angegebenen Schlüsselbund und Speicherort zu erstellen.
Console
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Klicken Sie auf den Namen des Schlüsselbunds, für den Sie einen Schlüssel erstellen.
Klicken Sie auf Schlüssel erstellen.
Wählen Sie unter Welchen Schlüsseltyp möchten Sie erstellen? die Option Generierter Schlüssel aus.
Geben Sie im Feld Schlüsselname den Namen für den Schlüssel ein.
Klicken Sie auf das Drop-down-Menü Schutzstufe und wählen Sie HSM oder HSM für einzelne Mandanten aus.
Wenn Sie HSM für einzelnen Mandanten ausgewählt haben, wählen Sie die HSM-Instanz für einzelnen Mandanten aus, in der Sie den Schlüssel erstellen möchten.
Klicken Sie auf das Drop-down-Menü Zweck und wählen Sie Symmetrisches Ver-/Entschlüsseln aus.
Übernehmen Sie die Standardwerte für Rotationszeitraum und Beginnt am.
Klicken Sie auf Erstellen.
gcloud
Wenn Sie Cloud KMS über die Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder auf die neueste Version aktualisieren.
Führen Sie den Befehl kms keys create mit der Schutzstufe hsm aus, um einen Multi-Tenant-Cloud HSM-Schlüssel zu erstellen.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm"
Ersetzen Sie Folgendes:
KEY_NAME: Der Name, den Sie für den Schlüssel verwenden möchten.KEY_RING: der Name des Schlüsselbunds, in dem Sie den Schlüssel erstellen möchtenLOCATION: der Speicherort des Schlüsselbunds
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.
Wenn Sie einen Single-Tenant Cloud HSM-Schlüssel erstellen möchten, führen Sie den Befehl kms keys create mit der Schutzstufe hsm-single-tenant aus und geben Sie die Single-Tenant Cloud HSM-Instanz an, in der Sie den Schlüssel erstellen möchten. Die Cloud HSM-Instanz für einzelne Mandanten muss sich am selben Standort wie der Schlüsselbund befinden.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm-single-tenant" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
Ersetzen Sie Folgendes:
KEY_NAME: Der Name, den Sie für den Schlüssel verwenden möchten.KEY_RING: der Name des Schlüsselbunds, in dem Sie den Schlüssel erstellen möchtenLOCATION: der Speicherort des SchlüsselbundsPROTECTION_LEVEL: Das Schutzlevel des Schlüssels, den Sie erstellen möchten.INSTANCE_PROJECT: Die Kennung des Projekts, in dem sich Ihre Single-Tenant Cloud HSM-Instanz befindet.INSTANCE_NAME: Der Name der Single-Tenant Cloud HSM-Instanz, in der Sie den Schlüssel erstellen möchten. Weitere Informationen zu Cloud HSM-Instanzen für einzelne Mandanten finden Sie unter Cloud HSM-Instanz für einzelne Mandanten erstellen und verwalten.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Bevor Sie diesen Code ausführen, sollten Sie sich mit der Verwendung von PHP auf Google Cloud vertraut machen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Verwenden Sie zum Erstellen eines mandantenfähigen Cloud HSM-Schlüssels die Methode CryptoKey.create mit der Schutzstufe HSM:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM", "algorithm": "ALGORITHM" }}'
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das den Schlüsselbund enthält.LOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältKEY_NAME: der Name des SchlüsselsALGORITHM: der Algorithmus, den Sie verwenden möchten, z. B.GOOGLE_SYMMETRIC_ENCRYPTION. Eine Liste aller unterstützten Algorithmen finden Sie unter Schlüsselzwecke und Algorithmen.
Verwenden Sie zum Erstellen eines Cloud HSM-Schlüssels für einzelne Mandanten die Methode CryptoKey.create mit der Schutzstufe HSM_SINGLE_TENANT:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM_SINGLE_TENANT", "algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das den Schlüsselbund enthält.LOCATION: der Cloud KMS-Speicherort des Schlüsselbunds.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältKEY_NAME: der Name des SchlüsselsALGORITHM: der Algorithmus, den Sie verwenden möchten, z. B.GOOGLE_SYMMETRIC_ENCRYPTION. Eine Liste aller unterstützten Algorithmen finden Sie unter Schlüsselzwecke und Algorithmen.INSTANCE_PROJECT: die Kennung des Projekts, in dem sich Ihre Cloud HSM-Instanz mit einem einzelnen Mandanten befindet.INSTANCE_NAME: Der Name der Single-Tenant Cloud HSM-Instanz, in der Sie den Schlüssel erstellen möchten. Weitere Informationen zu Cloud HSM-Instanzen für einzelne Mandanten finden Sie unter Cloud HSM-Instanz für einzelne Mandanten erstellen und verwalten.
Daten verschlüsseln
Mit dem erstellten Schlüssel können Sie Text oder binären Inhalt verschlüsseln.
gcloud
Wenn Sie Cloud KMS über die Befehlszeile verwenden möchten, müssen Sie zuerst die aktuelle Version der Google Cloud CLI installieren oder ein Upgrade darauf durchführen.
gcloud kms encrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--plaintext-file FILE_TO_ENCRYPT \
--ciphertext-file ENCRYPTED_OUTPUT
Ersetzen Sie Folgendes:
KEY_NAME: Der Name des Schlüssels, den Sie für die Verschlüsselung verwenden möchten.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION: der Cloud KMS-Speicherort, der den Schlüsselbund enthält.FILE_TO_ENCRYPT: der Pfad zur Datei, die Sie verschlüsseln möchten.ENCRYPTED_OUTPUT: der Pfad, unter dem Sie die verschlüsselte Ausgabe speichern möchten.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Wenn Sie diesen Code ausführen möchten, müssen Sie sich zuerst mit der Verwendung von PHP in Google Cloud vertraut machen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Wenn Sie JSON und die REST API verwenden, müssen Inhalte base64-codiert sein, bevor sie von Cloud KMS verschlüsselt werden können.
Um Daten zu verschlüsseln, stellen Sie eine POST-Anfrage und geben Sie die entsprechenden Projekt- und Schlüsselinformationen an. Geben Sie den Base64-codierten Text, der verschlüsselt werden soll, im Feld plaintext des Anfragetexts an.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das den Schlüsselbund und den Schlüssel enthält, die Sie für die Verschlüsselung verwenden möchten.LOCATION: der Cloud KMS-Speicherort, der den Schlüsselbund enthält.KEY_RING: der Schlüsselbund, der den Schlüssel enthält, den Sie für die Verschlüsselung verwenden möchten.KEY_NAME: der Name des Schlüssels, den Sie für die Verschlüsselung verwenden möchten.PLAINTEXT_TO_ENCRYPT: die Klartextdaten, die Sie verschlüsseln möchten. Der Klartext muss base64-codiert sein, bevor Sie die Methodeencryptaufrufen.
Hier ist ein Beispiel für eine Nutzlast mit Base64-codierten Daten:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Geheimtext entschlüsseln
Um verschlüsselten Inhalt zu entschlüsseln, müssen Sie den gleichen Schlüssel verwenden, mit dem auch der Inhalt verschlüsselt wurde.
gcloud
Wenn Sie Cloud KMS über die Befehlszeile verwenden möchten, müssen Sie zuerst die aktuelle Version der Google Cloud CLI installieren oder ein Upgrade darauf durchführen.
gcloud kms decrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file FILE_TO_DECRYPT \
--plaintext-file DECRYPTED_OUTPUT
Ersetzen Sie Folgendes:
KEY_NAME: der Name des Schlüssels, den Sie für die Entschlüsselung verwenden möchten.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION: der Cloud KMS-Speicherort, der den Schlüsselbund enthält.FILE_TO_DECRYPT: der Pfad zur Datei, die Sie entschlüsseln möchten.DECRYPTED_OUTPUT: der Pfad, unter dem Sie die entschlüsselte Ausgabe speichern möchten.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Bevor Sie diesen Code ausführen, sollten Sie sich mit der Verwendung von PHP auf Google Cloud vertraut machen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Der entschlüsselte Text, der von Cloud KMS in der JSON-Datei zurückgegeben wird, ist base64-codiert.
Um verschlüsselte Daten zu entschlüsseln, senden Sie eine POST-Anfrage und geben Sie die entsprechenden Projekt- und Schlüsselinformationen an. Geben Sie im Feld ciphertext des Anfragetexts den zu entschlüsselnden verschlüsselten Text (auch als Chiffretext bezeichnet) an.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das den Schlüsselbund und den Schlüssel enthält, den Sie für die Entschlüsselung verwenden möchten.LOCATION: der Cloud KMS-Speicherort, der den Schlüsselbund enthält.KEY_RING: der Schlüsselbund, der den Schlüssel enthält, den Sie für die Entschlüsselung verwenden möchten.KEY_NAME: der Name des Schlüssels, den Sie für die Entschlüsselung verwenden möchten.ENCRYPTED_DATA: Die verschlüsselten Daten, die Sie entschlüsseln möchten.
Hier ist ein Beispiel für eine Nutzlast mit Base64-codierten Daten:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Nächste Schritte
Beim Verschlüsselungsbeispiel in diesem Thema wurde ein symmetrischer Schlüssel mit dem Schutzniveau HSM verwendet. Führen Sie die Schritte unter Daten mit einem asymmetrischen Schlüssel verschlüsseln und entschlüsseln mit diesen Änderungen aus, um eine Codierung mit einem asymmetrischen Schlüssel mit dem Schutzniveau HSM durchzuführen:
- Erstellen Sie den Schlüsselbund in einer der unterstützten Regionen für Cloud HSM.
- Erstellen Sie den Schlüssel mit dem Schutzniveau HSM.
Wenn Sie einen asymmetrischen Schlüssel mit der Schutzstufe HSM für die Signatur mit elliptischen Kurven oder die RSA-Signatur verwenden möchten, folgen Sie der Anleitung unter Signaturen erstellen und validieren mit diesen Änderungen:
- Erstellen Sie den Schlüsselbund in einer der unterstützten Regionen für Cloud HSM.
- Erstellen Sie den Schlüssel mit dem Schutzniveau HSM.
Mit der Verwendung der API beginnen.
Die Cloud KMS API-Referenz ansehen.
Anleitungen für die ersten Schritte beim Erstellen, Rotieren und Festlegen von Berechtigungen für Schlüssel.
Lesen Sie Konzepte, um die Objekthierarchie, die wichtigsten Status und die Schlüsselrotation besser zu verstehen.
Weitere Informationen zu Logging in Cloud KMS. Das Logging basiert auf Vorgängen und gilt für Schlüssel mit HSM- und Software-Schutzstufen.
Weitere Informationen zum Schutz Ihrer Daten durch Cloud HSM finden Sie im Whitepaper zur Cloud HSM-Architektur.
Bekannte Einschränkungen
Die Nachrichtengröße ist auf 8 KiB begrenzt (im Gegensatz zu 64 KiB für Cloud KMS-Softwareschlüssel) für vom Nutzer bereitgestellten Klartext und Geheimtext, einschließlich der zusätzlichen authentifizierten Daten.
Cloud HSM ist nicht in allen multiregionalen Regionen verfügbar. Eine Liste aller Standorte, die Multi-Tenant Cloud HSM unterstützen, finden Sie unter Cloud KMS-Standorte. Wählen Sie dort für den Filter HSM-Unterstützung die Option Unterstützt Multi-Tenant-HSM aus.
Cloud HSM für einzelne Mandanten ist an einer Teilmenge der Standorte verfügbar, an denen Cloud HSM für mehrere Mandanten verfügbar ist. Eine Liste aller Standorte, die Single-Tenant Cloud HSM unterstützen, finden Sie unter Cloud KMS-Standorte. Wählen Sie dort für den Filter HSM-Unterstützung die Option Unterstützt Single-Tenant-HSM aus.
Wenn Sie Cloud HSM-Schlüssel mit Integrationen für kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Key integrations, CMEK-Integrationen) in anderen Diensten von Google Cloud verwenden, müssen die Standorte, die Sie für die Dienste verwenden, genau mit den Speicherorten Ihrer Cloud HSM-Schlüssel übereinstimmen. Dies gilt für regionale, biregionale und multiregionale Standorte.
Weitere Informationen zu CMEK-Integrationen finden Sie im entsprechenden Abschnitt unter Verschlüsselung ruhender Daten.
Schlüsselvorgänge für asymmetrische Schlüssel, die in Cloud HSM gespeichert sind, können im Vergleich zur Verwendung von Cloud KMS-Softwareschlüsseln eine deutlich höhere Latenz verursachen.
Bare-Metal-Rack-HSM
Google Cloud bietet zusätzliche HSM-Optionen, z. B. Einzelmandanten. Bare-Metal-Rack-HSM ist für Kunden verfügbar, die ihre eigenen HSMs in von Google bereitgestellten Räumlichkeiten hosten möchten. Weitere Informationen erhalten Sie von Ihrem Kundenbetreuer.