Erste Schritte mit Cloud KMS

Cloud KMS ist ein in der Cloud gehosteter Schlüsselverwaltungsdienst, mit dem Sie kryptografische Schlüssel für Ihre Clouddienste wie lokal verwalten können. Die Unterstützung für Verschlüsselung, Entschlüsselung, Signierung und Überprüfung wird mit verschiedenen Schlüsseltypen und Quellen unterstützt, einschließlich Cloud HSM für hardwaregestützte Schlüssel.

In diesem Tutorial lernen Sie die erweiterten Features von Cloud Security and Privacy APIs kennen, darunter:

  • Sichere Cloud Storage-Buckets einrichten
  • Schlüssel und verschlüsselte Daten mit Cloud KMS verwalten
  • Cloud Storage-Audit-Logs aufrufen

Sie nehmen gekürzte Daten aus dem Enron Corpus, verschlüsseln sie und laden sie in Cloud Storage.

Sie werden lernen,

  • Daten mit dem Key Management Service (KMS) verschlüsseln und Verschlüsselungsschlüssel verwalten

Sie sind zur Nutzung

  • Cloud KMS
  • Cloud Storage
  • Cloud SDK

Umgebung im eigenen Tempo einrichten

Wenn Sie noch kein Google-Konto haben (Gmail oder Google Apps), müssen Sie eines erstellen. Melden Sie sich unter console.cloud.google.com in der Google Cloud Platform Console an und erstellen Sie ein neues Projekt:

Screenshot von 2016-02-10 12:45:26.png

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. In diesem Codelab wird sie später als PROJECT_ID bezeichnet.

Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen zu nutzen.

Das Durchlaufen dieses Codelabs sollte nicht mehr als ein paar Dollar kosten. Es kann aber auch sein, dass Sie mehr Ressourcen brauchen oder sie weiterlaufen möchten (siehe Abschnitt „Bereinigen“ am Ende dieses Dokuments).

Neuen Google Cloud Platform-Nutzern steht ein kostenloser Testzeitraum im Wert von 300 $ zur Verfügung.

Cloud Shell starten

In diesem Codelab nutzen 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:

Die Bereitstellung und Verbindung mit der Umgebung dauert nur wenige Minuten. Wenn der Vorgang abgeschlossen ist, wird in etwa Folgendes angezeigt:

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 Google Cloud, wodurch Netzwerkleistung und Authentifizierung deutlich verbessert werden. Sofern nicht anders angegeben, führen Sie alle Befehle in dieser Shell aus.

Erstellen Sie einen Cloud Storage-Bucket, um Daten für diese Anleitung zu speichern. Weil die Cloud Storage-Bucket-Namen global eindeutig sein müssen, stellen Sie dem Bucket-Namen Ihre Projekt-ID voran:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Erstellen Sie anschließend den Bucket:

$ gsutil mb gs://${BUCKET_NAME}

Der Enron Corpus ist eine große Datenbank mit über 600.000 E-Mails,die von 158 Mitarbeitern der Enron Corporation generiert wurden. Diese Daten wurden in den Cloud Storage-Bucket gs://enron_emails/ kopiert.

Laden Sie eine der E-Mail-Dateien lokal herunter:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

Prüfen Sie, ob die heruntergeladene Datei tatsächlich eine E-Mail-Adresse ist:

$ tail 1.

Die E-Mail enthält eine Nachricht wie die

Attached is the Delta position for 1/18...
# ...

Zusätzlich zu E-Mails enthält die Gruppe auch Bilder. In dieser Anleitung werden sowohl die Nur-Text-E-Mails als auch Bilder verwendet.

Bevor Sie Cloud KMS verwenden können, müssen Sie den Dienst in Ihrem Projekt aktivieren. Dieser Vorgang 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. Mit diesem Befehl wird der Erfolg gemeldet.

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 Standort. Erstellen Sie einen Schlüsselbund namens my-keyring in der Region global:

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

Erstellen Sie jetzt einen kryptografischen Schlüssel mit dem Namen enron-emails und dem Zweck „encryption“ im gerade erstellten Schlüsselbund.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

Öffnen Sie die Benutzeroberfläche für kryptografische Schlüssel und sehen Sie die neu erstellten Ressourcen. Diese Option finden Sie im Hauptmenü unter IAM &Verwaltung.

Sie können Schlüsselbunde und kryptografische Schlüssel in der Cloud Console aufrufen und verwalten.

Verschlüsseln Sie den Inhalt der zuvor heruntergeladenen E-Mail mit Cloud KMS. In dieser Anleitung wird das gcloud-Befehlszeilentool verwendet. Sie können Daten aber auch mit der Cloud KMS API verschlüsseln.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

Dadurch wird auf dem Laufwerk 1.enc eine neue Datei mit dem Inhalt der verschlüsselten Datei erstellt. Nachdem die Daten mit Cloud KMS verschlüsselt wurden, laden Sie die verschlüsselte Datei in den Cloud Storage-Bucket hoch.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS ist in Google Cloud Identity and Access Management (IAM) eingebunden. Die Cloud KMS-IAM-Rollen sind in zwei Kategorien unterteilt:

  • Berechtigung zum Verwalten von Schlüsseln
  • Berechtigung zur Verwendung von Schlüsseln

Mit der Rolle roles/cloudkms.admin kann der Inhaber beispielsweise Schlüsselbunde und kryptografische Schlüssel erstellen, IAM-Richtlinien festlegen und Verwaltungsvorgänge ausführen. Mit roles/cloudkms.cryptoKeyEncrypterDecrypter wird dem Inhaber die Verschlüsselungs- und Entschlüsselungsdaten gewährt, jedoch keine Verwaltungsberechtigungen.

IAM-Rollen werden von ihrer übergeordneten Ressource übernommen. Wenn jemand die Rolle „roles/cloudkms.admin“ für das Google Cloud-Projekt hat, ist er Administrator aller Schlüssel in diesem Projekt. Wenn roles/cloudkms.admin einen Schlüsselbund hat, sind sie Administratoren aller Schlüssel in diesem Schlüsselbund. Wenn roles/cloudkms.admin auf einem einzelnen Kryptoschlüssel vorhanden ist, ist er nur Administrator dieses Schlüssels.

Verwenden Sie für diese Übung Ihre Identität:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

Weisen Sie der Identität die Möglichkeit zu, Cloud KMS-Ressourcen im oben erstellten Schlüsselbund zu verwalten, indem Sie das gcloud-Befehlszeilentool verwenden:

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

Die Rolle roles/cloudkms.admin umfasst nicht die Berechtigung zur Verwendung der Schlüssel, sondern nur zur Verwaltung. So gewähren Sie Ihrer Identität die Möglichkeit, Daten mit dem kryptografischen Schlüssel enron-emails zu verschlüsseln und zu entschlüsseln:

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Beachten Sie, dass der erste Befehl die Rolle roles/cloudkms.admin für den Schlüsselbund gewährt, die alle untergeordneten Crypto-Schlüsselressourcen enthalten würde. Mit dem zweiten Befehl wird zwar roles/cloudkms.cryptoKeyEncrypterDecrypter gewährt, aber nur der enron-emails-Kryptoschlüssel.

Sie können die Rollen auch in der Cloud KMS-UI in der Cloud Console ansehen und zuweisen.

Sie können auch eine Sammlung von Dateien verschlüsseln, indem Sie Skripts verwenden. In diesem Beispiel werden alle E-Mails für allen-p gestreamt, verschlüsselt und die resultierenden verschlüsselten Werte in den Cloud Storage-Bucket hochgeladen:

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

Dadurch werden alle Dateien im angegebenen Verzeichnis im Cloud Storage-Beispiel-Bucket wiederholt, mit Cloud KMS verschlüsselt und in Google Cloud Storage hochgeladen.

Nachdem das Skript abgeschlossen ist, können Sie sich die verschlüsselten Dateien in der Cloud Storage-UI ansehen. Auf dem Bildschirm sollte Folgendes zu sehen sein:

Cloud-Audit-Logging bieten zwei Logstreams – Administratoraktivitätslogs und Datenzugriffslogs. Sie werden von Google Cloud-Diensten generiert, um Ihnen zu helfen, die Frage zu beantworten, wer in Ihren Google Cloud Platform-Projekten die Fragen gestellt hat.

Klicken Sie auf den Schlüsselbund und wählen Sie Aktivität ansehen aus, um die Aktivität für eine Ressource in KMS anzusehen. So gelangen Sie auf die UI für die Cloud-Aktivität. Dort sollten Sie die Erstellung des KeyRing sowie alle daran vorgenommenen Änderungen sehen können.

Sie haben erfolgreich Daten mit Cloud KMS verschlüsselt und verschlüsselte Daten in Cloud Storage gespeichert.

Clean-up

Geben Sie die Ressourcen kostenlos, die in dieser Anleitung erstellt wurden. Löschen Sie den zuvor erstellten Cloud Storage-Bucket:

$ gsutil rm -r gs://${BUCKET_NAME}

Cloud KMS-Ressourcen können nicht gelöscht werden. Sie können das Schlüsselmaterial jedoch löschen, damit es nicht noch einmal verwendet werden kann:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

Behandelte Themen

  • Cloud KMS-Berechtigungen mit Cloud IAM verwalten
  • Daten mit Cloud KMS verschlüsseln
  • Verschlüsselte Daten mit Cloud Storage speichern
  • Mit Cloud-Audit-Logging alle Aktivitäten für Schlüssel und Schlüsselbunde aufrufen

Weitere Informationen

  • Mit Cloud KMS eine Spalte in einer Datenbank wie BigQuery verschlüsseln
  • Automatischen Rotationszeitplan für Cloud KMS-Schlüssel festlegen

Weitere Informationen

Lizenz

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