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:
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.
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.
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.
Erstellen Sie den Nutzer
key-admin
. Zum Erstellen von Nutzern benötigen Sie die Rolleroles/resourcemanager.organizationAdmin
für das Projekt my-kms-project.Erteilen Sie
key-admin
die Identitäts- und Zugriffsverwaltungsrolleroles/cloudkms.admin
.key-admin
kann Schlüssel erstellen und verwalten.Erstellen Sie den Nutzer
key-user
.Gewähren Sie
key-user
die IAM-Rolleroles/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.
- Erstellen Sie einen Storage-Bucket namens
my-bucket
. - 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.
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
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.
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
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.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.
[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.
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.
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.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.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.
[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
- Weitere Informationen zu Secrets verwalten.
- Weitere Informationen zur Aufgabentrennung.
- Informationen zum Zuweisen, Ändern und Widerrufen des Zugriffs auf Ressourcen
- Dienstkonto erstellen