In diesem Dokument wird beschrieben, wie Sie vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK) für Pub/Sub konfigurieren.
Pub/Sub verschlüsselt Nachrichten standardmäßig mit von Google verwalteten Schlüsseln. Für die Verwendung von von Google verwalteten Verschlüsselungsschlüsseln ist keine zusätzliche Einrichtung erforderlich.
CMEK
CMEKs sind Verschlüsselungsschlüssel, deren Eigentümer Sie sind und die im Cloud Key Management Service (Cloud KMS) verwaltet und gespeichert werden. Wenn Sie mehr Kontrolle über die Verschlüsselungsschlüssel benötigen, die zum Schutz von Pub/Sub-Daten verwendet werden, können Sie CMEKs verwenden. Einige Organisationen schreiben auch die Verwendung von CMEKs vor.
Mit CMEKs haben Sie die volle Kontrolle über Ihre Verschlüsselungsschlüssel und können deren Lebenszyklus, Rotation und Zugriffsrichtlinien verwalten. Wenn Sie Pub/Sub mit einem CMEK konfigurieren, verschlüsselt der Dienst alle Daten automatisch mit dem angegebenen Schlüssel. Je nach Nutzungsmuster können bei der Verwendung von Cloud KMS für CMEK zusätzliche Kosten anfallen.
Jede Nachricht wird in den folgenden Status und Ebenen verschlüsselt:
-
- Hardware-Ebene
- Infrastrukturebene
- Anwendungsebene:
Auf der Anwendungsebene verschlüsselt Pub/Sub eingehende Nachrichten einzeln, sobald die Nachricht empfangen wird. Diese Implementierung fügt folgende Funktionen hinzu:
- Nachrichten werden über interne Rechenzentrumslinks verschlüsselt
- Aktiviert vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK)
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 mit der Google Cloud Console oder der Google Cloud CLI konfigurieren.
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üsselbunde können nicht gelöscht werden.
Eine Anleitung dazu, wie Sie diese Aufgaben ausführen, finden Sie in der Schnellstartanleitung für 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 verwendet einen Google Cloud-Dienst-Agent für den Zugriff auf Cloud KMS. Der Dienst-Agent wird für jedes Projekt intern von Pub/Sub verwaltet und ist standardmäßig nicht auf der Seite Dienstkonten in der Google Cloud Console sichtbar.
Der Pub/Sub-Dienst-Agent hat das Format service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
Für Pub/Sub sind bestimmte Berechtigungen erforderlich, um Daten mit CMEK zu verschlüsseln und zu entschlüsseln.
Führen Sie die folgenden Schritte aus, um den erforderlichen Zugriff einzurichten:
Weisen Sie dem Pub/Sub-Dienst-Agent die Rolle „Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler“ (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) zu.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-Projekts.
Weitere Informationen zum Zuweisen von IAM-Rollen finden Sie unter Rollen für eine Ressource zuweisen.
Ein Thema mit CMEK konfigurieren
Sie können CMEK für ein Thema mit der Google Cloud Console oder der gcloud CLI konfigurieren.
Console
So erstellen Sie ein Thema mit CMEK:
Öffnen Sie in der Google Cloud Console die Pub/Sub-Seite Themen.
Klicken Sie auf Thema erstellen.
Geben Sie im Feld Themen-ID eine ID für das Thema ein.
Weitere Informationen zur Benennung von Themen finden Sie in den Benennungsrichtlinien.
Klicken Sie unter Verschlüsselung auf Cloud KMS-Schlüssel.
Wählen Sie den Schlüsseltyp aus. Wenn das Drop-down-Menü Vom Kunden verwalteten Schlüssel auswählen nicht angezeigt wird, prüfen Sie, ob Sie die Cloud KMS API für das Projekt aktiviert haben.
Klicken Sie auf Thema erstellen.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
Führen Sie den Befehl
gcloud pubsub topics create
aus, um ein Thema mit CMEK zu erstellen: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 von Themen finden Sie unter Richtlinien für die Benennung von Themen, Abos, Schemas oder Snapshots.
-
ENCRYPTION_KEY: ID des CMEK, das 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 CMEK, der mit einem Pub/Sub-Thema verknüpft ist, ändern. Sie können die CMEK mit der gcloud CLI aktualisieren. Diese Änderung gilt jedoch nicht rückwirkend.
Nachrichten, die vor der Schlüsseländerung für das Thema veröffentlicht wurden, bleiben mit dem ursprünglichen Schlüssel verschlüsselt. Wenn ein Thema ohne CMEK erstellt wurde, können Sie es später hinzufügen. Vorhandene Nachrichten werden weiterhin mit der standardmäßigen von Google verwalteten Verschlüsselung geschützt. Wenn Sie den CMEK eines Themas ändern, werden zuvor veröffentlichte Nachrichten nicht noch einmal verschlüsselt. Diese Nachrichten sind weiterhin mit dem Schlüssel geschützt, mit dem sie ursprünglich verschlüsselt wurden.
Pub/Sub hat einen Cachemechanismus für Schlüssel, der etwa 5 Minuten lang hält. Es kann bis zu dieser Dauer dauern, bis Pub/Sub die neue Schlüsselversion erkennt und verwendet.
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 kann so geschätzt werden:
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
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.
Der Cloud KMS-Schlüssel kann deaktiviert sein. Weitere Informationen finden Sie auf dieser Seite unter Schlüssel deaktivieren und wieder aktivieren.
Wenn Sie extern verwaltete Schlüssel über Cloud EKM verwenden, lesen Sie die Cloud EKM-Fehlerreferenz.
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:
Empfohlen:Deaktivieren Sie den Cloud KMS-Schlüssel, den Sie dem Thema mit Pub/Sub zugeordnet haben. Dieser Ansatz betrifft nur die Pub/Sub-Themen und -Abos, die mit diesem bestimmten Schlüssel verknüpft sind.
Widerrufen Sie die Rolle Pub/Sub CryptoKey-Verschlüsseler/Entschlüsseler aus dem Pub/Sub-Dienstkonto (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
) mit IAM. Dieser Ansatz betrifft alle Pub/Sub-Themen des Projekts und die Abos, die Nachrichten enthalten, die mit CMEK verschlüsselt wurden.
Obwohl keiner der Vorgänge eine sofortige Zugriffssperre garantiert, werden IAM-Änderungen im Allgemeinen schneller übernommen. 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 sporadische Ausfälle von Cloud KMS von weniger als einer Minute die Veröffentlichung und Bereitstellung wahrscheinlich nicht wesentlich unterbrechen, hat eine längere Nichtverfügbarkeit von Cloud KMS denselben Effekt wie die Sperrung von Schlüsseln.