Daten mit Cloud KMS verschlüsseln und entschlüsseln

1. Übersicht

Cloud KMS ist ein in der Cloud gehosteter Schlüsselverwaltungsdienst, mit dem Sie kryptografische Schlüssel für Ihre Cloud-Dienste genauso verwalten können wie lokal bei Ihnen vor Ort. Er bietet Unterstützung für Verschlüsselung, Entschlüsselung, Signierung und Überprüfung mit einer Vielzahl von Schlüsseltypen und ‑quellen, einschließlich Cloud HSM für auf Hardware gesicherte Schlüssel. In dieser Anleitung wird gezeigt, wie Sie Daten mit symmetrischen Cloud KMS-Schlüsseln verschlüsseln und entschlüsseln.

Lerninhalte

  • Cloud KMS API aktivieren
  • Cloud KMS-Schlüsselbund erstellen
  • Cloud KMS-Crypto-Schlüssel für die symmetrische Verschlüsselung/Entschlüsselung erstellen
  • Symmetrischen Cloud KMS-Crypto-Schlüssel rotieren

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie eines erstellen.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird später in diesem Codelab als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.

Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Folgen Sie bitte der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren können, damit nach Abschluss dieser Anleitung keine Gebühren anfallen. Neue Nutzer von Google Cloud kommen für das Programm für den kostenlosen Testzeitraum mit einem Guthaben von 300$ infrage.

Cloud Shell starten

In diesem Codelab verwenden Sie Cloud Shell, eine kostenlose virtualisierte Umgebung, die in Google Cloud ausgeführt wird. Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf der Google Cloud, wodurch Netzwerkleistung und Authentifizierung deutlich verbessert werden. Sofern nicht anders angegeben, führen Sie alle Befehle über diese Shell aus.

3. Cloud KMS-Dienst aktivieren

Bevor Sie Cloud KMS verwenden können, müssen Sie den Dienst in Ihrem Projekt aktivieren. Dies muss nur einmal pro Projekt durchgeführt werden. Führen Sie den folgenden Befehl aus, um den Cloud KMS-Dienst zu aktivieren:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

Die Aktivierung kann bis zu einer Minute dauern. Der Befehl meldet Erfolg, wenn er abgeschlossen ist.

4. KMS-Schlüssel erstellen

Erstellen Sie einen Cloud KMS-Schlüsselbund. In Cloud KMS ist ein Schlüsselbund eine logische Sammlung von kryptografischen Schlüsseln. Der Schlüsselbund enthält Metadaten zu den Schlüsseln, z. B. ihren Speicherort. Erstellen Sie in der Region global einen Schlüsselbund mit dem Namen my-keyring:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Erstellen Sie nun im soeben erstellten KeyRing einen CryptoKey mit dem Namen my-symmetric-key und dem Zweck encryption.

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. Daten verschlüsseln

Erstellen Sie eine Datei mit den zu verschlüsselnden Daten und verschlüsseln Sie die Daten in der Datei mit dem Befehlszeilentool gcloud:

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

Die verschlüsselten Daten (auch als „Chiffretext“ bezeichnet) werden in data.txt.enc auf der Festplatte gespeichert. Wenn Sie die Datei data.txt.enc öffnen, werden Sie feststellen, dass sie seltsame, nicht druckbare Zeichen enthält. Das liegt daran, dass die resultierenden Daten im Binärformat vorliegen.

Wenn Sie den Chiffretext in einer Datenbank speichern oder als Teil einer HTTP-Anfrage übertragen, müssen Sie die Daten möglicherweise codieren. Ein gängiger Codierungsmechanismus ist Base64.

Cloud KMS speichert keinen der von Ihnen bereitgestellten Klartext. Sie müssen dieses Chiffrat an einem sicheren Ort speichern, da es zum Abrufen des Klartextwerts erforderlich ist.

6. Daten entschlüsseln

Entschlüsseln Sie den Chiffretext aus der Datei mit dem gcloud-Befehlszeilentool:

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Das Befehlszeilentool gcloud liest den Chiffretext aus der Datei und entschlüsselt ihn mit Cloud KMS. In diesem Beispiel wird das Argument --plaintext-file als - angegeben. Damit wird gcloud angewiesen, das Ergebnis im Terminal auszugeben.

In der Konsole wird my-contents ausgegeben, was dem oben gezeigten Nur-Text-Wert aus der Datei entspricht.

7. Schlüssel rotieren

In Cloud KMS ist ein CryptoKey eigentlich eine Sammlung von CryptoKey-Versionen. Sie können neue Versionen kryptografischer Schlüssel erstellen, um eine Schlüsselrotation durchzuführen. Cloud KMS kann auch Schlüssel automatisch nach einem Zeitplan rotieren.

Wenn Sie einen Schlüssel manuell rotieren möchten, erstellen Sie eine neue CryptoKey-Version und legen Sie sie als primäre Version fest:

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

Für alle zukünftigen Anfragen zum Verschlüsseln von Daten wird dieser neue Schlüssel verwendet. Die älteren Schlüssel sind weiterhin verfügbar, um Daten zu entschlüsseln, die zuvor mit diesen Schlüsseln verschlüsselt wurden. Cloud KMS ermittelt automatisch den geeigneten Entschlüsselungsschlüssel anhand des bereitgestellten Geheimtexts. Sie müssen nicht angeben, welche Version des kryptografischen Schlüssels für die Entschlüsselung verwendet werden soll.

Wenn Sie verhindern möchten, dass mit einer älteren Version eines kryptografischen Schlüssels verschlüsselte Geheimtextwerte mit Cloud KMS entschlüsselt werden, können Sie diese Version des kryptografischen Schlüssels deaktivieren oder löschen. Das Deaktivieren ist ein reversibler Vorgang, das Löschen hingegen nicht. So deaktivieren Sie eine Version:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. Glückwunsch!

Sie haben die Cloud KMS API aktiviert, einen symmetrischen Verschlüsselungsschlüssel erstellt und Daten verschlüsselt und entschlüsselt. Cloud KMS ist ein leistungsstarkes Produkt und die Verschlüsselung/Entschlüsselung ist nur ein kleiner Teil der Funktionen.

Aufräumen

Wenn Sie fertig sind, sollten Sie Ihr Projekt löschen.

  • Rufen Sie die Cloud Platform Console auf.
  • Wählen Sie das Projekt aus, das Sie beenden möchten, und klicken Sie oben auf „Löschen“. Das Projekt wird zum Löschen geplant.

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.