Nachrichtenverschlüsselung konfigurieren

Pub/Sub verschlüsselt Nachrichten standardmäßig mit von Google verwalteten Verschlüsselungsschlüsseln. Es ist keine Einrichtung oder Konfiguration erforderlich und die Art des Zugriffs auf den Dienst muss nicht geändert werden. Jede Nachricht wird in 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:

Vom Kunden verwaltete Verschlüsselungsschlüssel verwenden

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.

Pub/Sub verwendet ein Google Cloud-Dienstkonto für den Zugriff auf Cloud KMS. Das Dienstkonto wird für jedes Projekt intern von Pub-Sub verwaltet und ist in Ihrer Liste der Dienstkonten nicht sichtbar. Das Dienstkonto hat das Format service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com. Damit die CMEK-Funktion funktioniert, müssen Sie diesem Konto die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler in Identity and Access Management zuweisen.

Themen konfigurieren

Sie können CMEK über die Google Cloud Console oder das gcloud-Befehlszeilentool konfigurieren. Die folgenden Voraussetzungen müssen erfüllt sein:

Unter Schnellstartanleitung für Cloud KMS finden Sie eine Anleitung dazu, wie Sie diese Aufgaben ausführen.

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.

Google Cloud Console verwenden

Im Dialogfeld für die Themenerstellung der Google Cloud Console können Sie Ihre Verschlüsselungsschlüssel hinzufügen. Informationen zum Zugriff auf dieses Dialogfeld finden Sie in der Kurzanleitung zur Google Cloud Console.

Wenn das Drop-down-Menü "Vom Kunden verwalteten Schlüssel auswählen" nicht angezeigt wird, vergewissern Sie sich, dass Sie die KMS API für das Projekt aktiviert haben.

Die Google Cloud Console

  • Die IAM-Konfiguration wird vereinfacht, während das Pub/Sub-Dienstkonto die entsprechenden Berechtigungen hat.

  • Ermöglicht die Konfiguration der Verschlüsselung im Dialogfeld zur Themenerstellung.

Befehlszeile verwenden

Dieses Beispiel veranschaulicht, wie Sie mit der Google Cloud CLI CMEK für ein Thema konfigurieren:


   # Grant the Pub/Sub service account the Cloud KMS CryptoKey
   # Encrypter/Decrypter role. This service account is different
   # from the service account you are using to authorize requests to Google Cloud.

   gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\
      "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
      --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

   # Create a topic that uses customer-managed encryption, using the
   # --topic-encryption-key argument to specify the Cloud KMS key to use
   # for protecting message data.

   KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key
   alias pubsub="gcloud pubsub"
   pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID

   # Confirm that the topic is configured for customer-managed encryption,
   # indicated by the presence of the kmsKeyName specified on the topic.

   pubsub topics describe $TOPIC_NAME
     

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 pricing:

  • 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
Bei einer Preisstruktur, bei der kryptografische Vorgänge 0,03 $pro 10.000 Vorgänge kosten, würde die obige Nutzung etwa 0,07 $kosten. Die aktuellen Preisinformationen finden Sie unter Cloud KMS-Preise.

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 metrics, 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 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 vorübergehende Ausfälle von weniger als einer Minute bei Cloud KMS die Veröffentlichung und Bereitstellung wahrscheinlich nicht deutlich unterbrechen, hat die verlängerte Nichtverfügbarkeit von Cloud KMS den gleichen Effekt wie der Schlüsselwiderruf.