Nachrichtenverschlüsselung konfigurieren

In diesem Dokument wird erläutert, wie Sie die vom Kunden verwaltete Verschlüsselung konfigurieren Schlüssel (CMEK) für Pub/Sub.

Pub/Sub verschlüsselt Nachrichten mit Standardmäßig gehören Google- und von Google verwaltete Schlüssel. Es ist keine zusätzliche Einrichtung erforderlich, um von Google verwaltete Verschlüsselungsschlüssel zu verwenden.

Informationen zu CMEK

CMEKs sind Verschlüsselungsschlüssel, die Ihnen gehören und in denen Sie verwaltet und gespeichert werden. Cloud Key Management Service (Cloud KMS) Wenn Sie mehr Kontrolle über die Verschlüsselungsschlüssel zum Schutz von Pub/Sub können Sie CMEKs verwenden. Einige Organisationen verlangen auch die Verwendung von CMEKs:

Mit CMEKs haben Sie die volle Kontrolle über Ihre Verschlüsselungsschlüssel, Lebenszyklus-, Rotations- und Zugriffsrichtlinien. Beim Konfigurieren Pub/Sub mit einem CMEK verschlüsselt, verschlüsselt der Dienst alle Daten mit dem angegebenen Schlüssel. Cloud KMS-Nutzung für Für einen CMEK können je nach Nutzungsmustern zusätzliche Kosten anfallen.

Jede Nachricht wird mit den folgenden Status und Ebenen verschlüsselt:

Auf der Anwendungsebene verschlüsselt Pub/Sub eingehende Nachrichten einzeln, sobald die Nachricht empfangen wird. Diese Implementierung fügt folgende Funktionen hinzu:

CMEK für Pub/Sub

Pub/Sub verwendet das Envelope-Verschlüsselungsmuster mit CMEK. Bei diesem Ansatz werden die Nachrichten nicht von Cloud KMS verschlüsselt. Cloud KMS wird stattdessen zum Verschlüsseln von Data Encryption Keys (DEKs) verwendet, die von Pub/Sub für jedes Thema erstellt wurden. Diese DEKs werden von Pub/Sub nur verschlüsselt oder verpackt gespeichert. Bevor ein DEK gespeichert wird, sendet der Dienst den DEK an Cloud KMS, um mit dem im Thema angegebenen Schlüsselverschlüsselungsschlüssel KEK verschlüsselt zu werden. Etwa alle sechs Stunden wird für jedes Thema ein neuer DEK generiert.

Bevor Pub/Sub Nachrichten für ein Abo veröffentlicht, werden sie mit dem neuesten DEK verschlüsselt, der für das Thema generiert wurde. Pub/Sub entschlüsselt die Nachrichten kurz vor der Zustellung. an Abonnenten.

Hinweise

Sie können CMEK für Pub/Sub mithilfe der der Google Cloud Console oder der Google Cloud CLI.

Führen Sie die folgenden Schritte aus:

  • Aktivieren Sie die Cloud KMS API.

  • Erstellen Sie einen Schlüsselbund und einen Schlüssel in Cloud KMS. Schlüssel und Schlüssel Ringe können nicht gelöscht werden.

Eine Anleitung dazu, wie Sie diese Aufgaben ausführen, finden Sie in der Kurzanleitung zu Cloud KMS

Da Pub/Sub-Ressourcen global sind, empfehlen wir Ihnen dringend, globale Cloud KMS-Schlüssel zu verwenden, um CMEK-fähige Themen zu konfigurieren. Abhängig von den Standorten der Publisher und Abonnenten eines Themas kann die Verwendung eines regionalen Cloud KMS-Schlüssels zu unnötigen Abhängigkeiten von regionenübergreifenden Netzwerkverbindungen führen.

Erforderliche Rollen und Berechtigungen zum Konfigurieren von CMEK

Pub/Sub nutzt eine Google Cloud Dienst-Agent für Zugriff auf Cloud KMS. Der Dienst-Agent wird intern gepflegt von Pub/Sub für jedes Projekt und ist auf standardmäßig die Seite Dienstkonten in der Google Cloud Console aufrufen.

Der Pub/Sub-Dienst-Agent hat die Form service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com

Pub/Sub erfordert bestimmte Berechtigungen zum Verschlüsseln und Daten mit CMEK entschlüsseln

So richten Sie den erforderlichen Zugriff ein:

  • Gewähren Sie dem Pub/Sub-Dienst-Agent die Verschlüsseler/Entschlüsseler für kryptografische Schlüssel von Cloud KMS Rolle (roles/cloudkms.cryptoKeyEncrypterDecrypter).

    gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ersetzen Sie Folgendes:

    • CLOUD_KMS_KEY_NAME: Der Name des Cloud KMS-Schlüssels.

      Der Schlüssel hat das Format projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

      Ein Beispiel dafür ist projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key.

    • PROJECT_NUMBER: die Projektnummer des Pub/Sub-Projekt

Weitere Informationen zum Gewähren von IAM-Rollen finden Sie unter Rollen für eine Ressource zuweisen

Thema mit CMEK konfigurieren

Sie können CMEK für ein Thema über die Google Cloud Console oder gcloud CLI verwenden können.

Console

So erstellen Sie ein Thema mit CMEK:

  1. Öffnen Sie in der Google Cloud Console die Pub/Sub-Seite Themen.

    Themen aufrufen

  2. Klicken Sie auf Thema erstellen.

  3. Geben Sie im Feld Themen-ID eine ID für das Thema ein.

    Weitere Informationen zur Benennung von Themen finden Sie in den Benennungsrichtlinien.

  4. Klicken Sie unter Verschlüsselung auf Cloud KMS-Schlüssel.

  5. Wählen Sie den Schlüsseltyp aus. Wenn Sie die Option Wählen Sie ein vom Kunden verwaltetes Konto im Drop-down-Menü für den Schlüssel auswählen, müssen Sie die Cloud KMS API für für das Projekt.

  6. Klicken Sie auf Thema erstellen.

gcloud

  1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Führen Sie den Befehl gcloud pubsub topics create-Befehl:

        gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
        

    Ersetzen Sie Folgendes:

    • TOPIC_ID: Die ID oder der Name des Themas.

      Weitere Informationen zum Benennen eines Themas finden Sie unter . Richtlinien zum Benennen von Themen, Abos, Schemas oder Snapshots

    • ENCRYPTION_KEY: ID des CMEK, der für das Thema verwendet werden soll.

      Das Format dafür ist projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

CMEK für ein Thema aktualisieren

Sie können den mit einem Pub/Sub-Thema. Sie können den CMEK mit der gcloud CLI aktualisieren. Diese Änderung gilt jedoch nicht rückwirkend.

Nachrichten, die vor der Änderung des Schlüssels im Thema veröffentlicht wurden, bleiben mit den ursprünglichen Schlüssel. Wenn ein Thema ohne CMEK erstellt wurde, können Sie später einen hinzufügen. Vorhandene Nachrichten sind weiterhin mit der standardmäßigen, von Google verwalteten Verschlüsselung. Beim Ändern des CMEK eines Themas werden zuvor veröffentlichte Schlüssel nicht neu verschlüsselt Nachrichten. Diese Nachrichten sind weiterhin mit dem Schlüssel geschützt, ursprünglich mit verschlüsselt wurde.

Pub/Sub hat einen Caching-Mechanismus für Schlüssel, der etwa 5 Minuten. Es kann bis zu dieser Dauer dauern, Pub/Sub, um die neue Schlüsselversion zu erkennen und zu verwenden.

Audit-Logs

Cloud KMS erstellt Audit-Logs, wenn Keys aktiviert, deaktiviert oder von Pub/Sub zum Verschlüsseln und Entschlüsseln von Nachrichten verwendet werden. Dies ist bei Debugging-Problemen mit Veröffentlichungs- oder Lieferungsverfügbarkeit hilfreich.

Cloud KMS-Schlüssel werden Audit-Logs für Pub- und Sub-Themaressourcen angehängt. Pub/Sub enthält keine weiteren Cloud KMS-bezogenen Informationen.

Preise und Kosten

Für die folgenden Pub/Sub-Anfragen fallen für die Verwendung von CMEK Gebühren für den Zugriff auf den Cloud KMS-Dienst an, basierend auf den Pub/Sub-Preisen:

  • Für jedes CMEK-Thema wird ein neuer DEK verschlüsselt und alle sechs Stunden gespeichert.

  • Der Schlüssel wird verwendet, um DEKs alle sechs Minuten zu entschlüsseln. Die Entschlüsselung erfolgt dreimal, einmal für jede Zone in der Region, in der der Pub/Sub-Dienst ausgeführt wird.

Betrachten Sie beispielsweise ein Thema mit:

  • Mindestens einem Abo

  • Publisher- und Abonnentenclients in derselben Region

Die Anzahl der kryptografischen Vorgänge in Cloud KMS lässt sich so schätzen:

1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours
 + 3 key accesses for DECRYPT
   * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes
   = 21,720 Cloud KMS key access events
Angesichts einer Preisstruktur, in der kryptografische Vorgänge 0,03 $pro 10.000 Vorgänge kostet, würde die obige Nutzung etwa 0,07 $kosten. Die aktuellste Version finden Sie unter Cloud KMS-Preise. Preisinformationen.

In der Praxis können Schlüssel je nach Zugriffsmustern mehr oder weniger häufig abgerufen werden. Verwenden Sie diese Zahlen nur als Schätzungen.

Monitoring und Fehlerbehebung

Probleme mit dem Schlüsselzugriff können folgende Auswirkungen haben:

  • Verzögerungen bei der Nachrichtenübermittlung

  • Publish-Fehler

Beobachten Sie Fehler bei Veröffentlichungs- und Pull-Anfragen mithilfe der folgenden Messwerte, gruppiert nach response_class und response_code:

  • topic/send_request_count
  • subscription/pull_request_count
  • subscription/streaming_pull_response_count

StreamingPull-Antwort weist eine Fehlerrate von 100% auf. Dies ist ein Hinweis darauf, dass der Stream beendet wurde und nicht, dass Anfragen fehlschlagen. Suchen Sie nach dem Antwortcode FAILED_PRECONDITION, um StreamingPull zu beobachten.

Die Veröffentlichung und Zustellung von Nachrichten können aus verschiedenen Gründen mit FAILED_PRECONDITION-Fehlern fehlschlagen.

Bei Push-Abos gibt es keine Möglichkeit, CMEK-spezifische Zustellungsprobleme direkt zu erkennen. Stattdessen können Sie:

  • die Größe und das Alter des Rückstands eines Push-Abos mit subscription/num_unacked_messages prüfen.

  • subscription/oldest_unacked_message_age auf ungewöhnliche prüfen.

  • Veröffentlichungsfehler und CMEK-Audit-Logs verwenden, um Probleme zu erkennen.

Schlüssel deaktivieren und neu aktivieren

Es gibt zwei Möglichkeiten, zu verhindern, dass Pub/Sub Ihre Nachrichtendaten entschlüsselt:

Obwohl keiner der beiden Vorgänge den sofortigen Widerruf bestätigt, IAM-Änderungen werden in der Regel schneller weitergegeben. Weitere Informationen Weitere Informationen finden Sie unter Konsistenz von Cloud KMS-Ressourcen und Weitergabe von Zugriffsänderungen

Wenn Pub/Sub nicht auf einen Cloud KMS-Schlüssel zugreifen kann, tritt bei der Veröffentlichung und Zustellung von Nachrichten mit "StreamingPull" oder "pull" ein Fehler mit FAILED_PRECONDITION-Fehlern auf. Die Zustellung von Nachrichten an Push-Endpunkte wird beendet. Wenn Sie die Zustellung und Veröffentlichung fortsetzen möchten, stellen Sie den Zugriff auf den Cloud KMS-Schlüssel wieder her.

Sobald der Cloud KMS-Schlüssel für Pub/Sub verfügbar ist, ist die Veröffentlichung innerhalb von 12 Stunden verfügbar und die Nachrichtenzustellung wird innerhalb von 2 Stunden fortgesetzt.

Obwohl zeitweise Ausfälle von weniger als einer Minute für Cloud KMS ist es unwahrscheinlich, Veröffentlichung und Bereitstellung erheblich unterbrechen, Cloud KMS erweitert die Nichtverfügbarkeit hat denselben Effekt wie der Widerruf eines Schlüssels.