Anwendungsdaten verschlüsseln

In diesem Thema wird gezeigt, wie Sie mit dem Cloud Key Management Service Anwendungsdaten auf einem Client direkt verschlüsseln können, bevor sie über ein Netzwerk übertragen werden.

In diesem Beispiel werden die verschlüsselten Daten an Google Cloud übertragen und in einem Cloud Storage-Bucket gespeichert. Cloud Storage unterstützt auch die automatische serverseitige Verschlüsselung mit vom Kunden verwalteten Verschlüsselungsschlüsseln, wodurch der gesamte Prozess automatisiert wird. Zum Schutz von Anwendungsdaten vor der Übertragung an Google Cloud empfehlen wir die Verwendung der Tink-Bibliothek.

Die Tink-Bibliothek ist eine mehrsprachige, plattformübergreifende Bibliothek, die einfache und missbrauchssichere APIs für gängige kryptografische Aufgaben bietet. Damit können Daten verschlüsselt werden, bevor sie in Google Cloud-Datenspeicher gelangen. Außerdem werden Java, Python, C++, Go, Objective-C und andere Sprachen sowie Objektspeicher- und relationale Datenbankdienste unterstützt.

In dieser Anleitung verschlüsseln Sie eine Datei mit Cloud KMS, bevor Sie sie in einen Bucket hochladen. Als Nächstes laden Sie dieselben Daten herunter und entschlüsseln sie, auf dem Client lesen kann.

Wenn Sie dieser Anleitung folgen, bleiben Ihre Schlüssel und alle kryptografischen Vorgänge in Google Cloud und Sie müssen Cloud KMS für die Entschlüsselung verwenden. Mit der rohen symmetrischen Verschlüsselung können Sie Daten lokal verschlüsseln oder entschlüsseln oder verschlüsselte Daten zwischen verschiedenen Bibliotheken und Dienstanbietern verschieben, ohne sie zuerst entschlüsseln zu müssen.

Hinweis

Innerhalb Ihrer Google Cloud-Organisation benötigen Sie Berechtigungen zum Erstellen neuer Projekte, zum Aktivieren der Abrechnung, zum Erstellen von Nutzern und zum Verwalten der Berechtigungen in diesen Projekten. Mit der Rolle roles/resourcemanager.organizationAdmin erhalten Sie diese Berechtigungen.

Einrichtung

Wir empfehlen die Verwendung von zwei Projekten und zwei Nutzern, um die Aufgabentrennung sicherzustellen. Wenn Sie die Schritte in dieser Anleitung befolgen, unterscheiden sich die Nutzer und Dienste, die Verschlüsselungsschlüssel verwalten, von den Nutzern und Diensten, die sie verwenden. Ein Projekt enthält und verwaltet die Schlüssel, während das andere Projekt die verschlüsselten Daten in einem Cloud Storage-Bucket speichert und bei Bedarf entschlüsselt.

Projekte erstellen

Sie erstellen Projekte in der Google Cloud Console. Eine detaillierte Anleitung finden Sie unter Kurzanleitung zur Verwendung der Cloud Console.

Innerhalb der Organisation:

  1. Erstellen Sie ein Google Cloud-Projekt, das den Cloud Storage-Bucket enthält, der zum Speichern der Secrets verwendet wird. Die Secrets werden im Bucket als Objekte gespeichert. In den folgenden Schritten wird dieses Projekt als my-storage-project bezeichnet.

  2. Optional können Sie ein zweites Google Cloud-Projekt erstellen, mit dem die Cloud KMS-Schlüssel zum Verschlüsseln und Entschlüsseln des Secrets verwaltet werden. In den folgenden Schritten wird dieses Projekt als my-kms-project bezeichnet.

    Sie können aber auch dasselbe Google Cloud-Projekt für my-storage-project und my-kms-project verwenden.

  3. Aktivieren Sie für jedes Projekt die Cloud KMS API und die Abrechnung anhand der Schritte im Abschnitt Vorbereitung der Cloud KMS-Kurzanleitung.

Nutzer erstellen

Sie erstellen Nutzer und weisen ihnen Rollen in der Google Cloud Console zu. Eine detaillierte Anleitung finden Sie unter Kurzanleitung zur Verwendung der Cloud Console.

Hier werden zwei Nutzer erstellt. key-admin verwaltet die Verschlüsselungsschlüssel und key-user kann Daten mit den Schlüsseln verschlüsseln und entschlüsseln.

Führen Sie diesen Vorgang im Projekt my-kms-project aus.

  1. Erstellen Sie den Nutzer key-admin. Zum Erstellen von Nutzern benötigen Sie die Rolle roles/resourcemanager.organizationAdmin für das Projekt my-kms-project.

  2. Erteilen Sie key-admin die Identitäts- und Zugriffsverwaltungsrolle roles/cloudkms.admin. key-admin kann Schlüssel erstellen und verwalten.

  3. Erstellen Sie den Nutzer key-user.

  4. Gewähren Sie key-user die IAM-Rolle roles/cloudkms.cryptoKeyEncrypterDecrypter. key-user kann Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwenden.

Storage-Bucket erstellen

Führen Sie diesen Vorgang im Projekt my-storage-project aus.

  1. Erstellen Sie einen Storage-Bucket namens my-bucket.
  2. Gewähren Sie key-user die Rolle roles/storage.objectAdmin für den Storage-Bucket my-bucket.

Verschlüsselungsschlüssel erstellen

Führen Sie dieses Verfahren als key-admin-Nutzer im my-kms-project-Projekt aus.

  1. Erstellen Sie einen Schlüsselbund namens storage. Der Name des Schlüsselbunds darf innerhalb des Projekts nur einmal verwendet werden. Ein Schlüsselbund kann nicht umbenannt oder gelöscht werden. Verwenden Sie die Google Cloud CLI, um einen Schlüsselring zu erstellen.

    gcloud kms keyrings create storage \
      --location global
    
  2. Erstellen Sie zum Zweck der Verschlüsselung in dem Schlüsselbund storage einen Schlüssel mit dem Namen my-key. Der Name des Schlüssels darf innerhalb des Schlüsselbunds nur einmal verwendet werden. Ein Schlüssel kann nicht umbenannt oder gelöscht werden, es können jedoch seine Schlüsselversionen gelöscht werden. Verwenden Sie Erstellen Sie den Schlüssel über die Google Cloud CLI. Es wird automatisch eine anfängliche Schlüsselversion erstellt, die dann zur Hauptversion wird.

    gcloud kms keys create my-key \
     --location global \
     --keyring storage \
     --purpose encryption
    

Weitere Informationen erhalten Sie unter Schlüsselbunde und Schlüssel erstellen.

Datei mit dem Secret verschlüsseln

Führen Sie diesen Vorgang als key-user-Nutzer aus und verwenden Sie dabei beide Projekte.

  1. Erstellen Sie auf Ihrem lokalen Computer eine Datei namens my-secret.txt, die den Text "This is my secret." enthält.

    echo "This is my secret" > my-secret.txt
    
  2. Verschlüsseln Sie my-secret.txt mit dem Schlüssel my-key im Projekt my-kms-project. Schreiben Sie die verschlüsselte Datei in mysecret.txt.encrypted.

    gcloud kms encrypt \
     --location global \
     --keyring storage \
     --key my-key \
     --plaintext-file my-secret.txt \
     --ciphertext-file my-secret.txt.encrypted
    

    Weitere Informationen zum Verschlüsseln von Daten finden Sie im Abschnitt Daten verschlüsseln der Cloud KMS-Kurzanleitung.

    Verwenden Sie stattdessen raw-encrypt für die symmetrische Rohverschlüsselung.

  3. Laden Sie die verschlüsselte Datei my-secret.txt.encrypted in den Storage-Bucket my-bucket im Projekt my-storage-project hoch. Sie können den folgenden gcloud-Befehl verwenden:

    gcloud storage cp my-secret.txt.encrypted gs://my-storage-bucket
    

    Weitere Informationen zum Hochladen von Objekten in einen Storage-Bucket erhalten Sie hier.

  4. [Optional] Löschen Sie die Klartextdatei my-secret.txt vom lokalen Computer. Dies ist eine bewährte Vorgehensweise für Dateien, die unverschlüsselte vertrauliche Daten enthalten.

Der Storage-Bucket my-storage-bucket enthält jetzt die Datei my-secret.txt.encrypted, die mit dem Schlüssel my-key verschlüsselt wird.

Datei mit dem Secret entschlüsseln

Führen Sie diese Schritte als key-user-Nutzer aus und verwenden Sie dabei beide Projekte.

  1. Laden Sie die Datei my-secret.txt.encrypted aus dem Cloud Storage-Bucket my-bucket herunter. Sie können den folgenden gcloud-Befehl verwenden:

    gcloud storage cp gs://my-storage-bucket/my-secret.txt.encrypted .
    

    Weitere Informationen zum Herunterladen von Objekten aus einem Storage-Bucket finden Sie hier.

  2. Versuchen Sie, die Datei mit einem Befehl wie less oder einem Texteditor zu lesen. Beachten Sie, dass es sich nicht um eine reine Textdatei handelt.

  3. Entschlüsseln Sie my-secret.txt.encrypted und speichern Sie die entschlüsselten Daten in einer neuen Klartextdatei namens my-secret.txt.decrypted. Verwenden Sie dabei denselben Schlüssel, mit dem Sie my-secret.txt verschlüsselt haben.

    gcloud kms decrypt --location global \
     --keyring storage \
     --key my-key \
     --ciphertext-file my-secret.txt.encrypted \
     --plaintext-file my-secret.txt.decrypted
    

    Weitere Informationen zum Entschlüsseln von Daten finden Sie im Abschnitt Daten verschlüsseln der Cloud KMS-Kurzanleitung.

    Verwenden Sie stattdessen raw-decrypt für die symmetrische Rohverschlüsselung.

  4. Lesen Sie die Datei my-secret.txt.decrypted mit dem Befehl cat. Der Inhalt ist mit dem ursprünglichen Inhalt von my-secret.txt identisch.

    cat my-secret.txt.decrypted
    
    This is my secret.
  5. [Optional] Löschen Sie die Dateien my-secret.txt.encrypted und my-secret.txt.decrypted vom lokalen Computer.

Bereinigen

Löschen Sie zum Bereinigen alle Dateien, die Sie auf dem lokalen Computer erstellt haben, und dann die Projekte [MY_KMS_PROJECT] und [MY_STORAGE_PROJECT].

Nächste Schritte