Auf dieser Seite wird erläutert, wie Sie Ereignisbenachrichtigungen für Ihre Secrets in Secret Manager konfigurieren und verwenden.
Übersicht
Secret Manager wird in Pub/Sub eingebunden, um Ereignisbenachrichtigungen bei Änderungen bereitzustellen sowohl für Secrets als auch für Secret-Versionen. Sie können diese Benachrichtigungen verwenden, um Workflows zu initiieren, wie z. B. Neustart einer Anwendung, wenn eine neue Secret-Version hinzugefügt wird, oder die Benachrichtigung von Sicherheitstechnikern, wenn ein Secret gelöscht wird. Weitere Informationen zur Verwendung dieser Benachrichtigungen zum Starten von Workflows finden Sie in der Pub/Sub-Dokumentation
Funktionsweise von Ereignisbenachrichtigungen in Secret Manager
Secrets können mit einer Liste von bis zu 10 Pub/Sub-Themen konfiguriert werden. Immer wenn ein Vorgang ausgeführt wird, der das Secret oder eine seiner Versionen ändert, veröffentlicht Secret Manager automatisch eine Nachricht in jedem Pub/Sub-Thema für dieses Secret.
Aufrufe mit Get
, List
und Access
führen nicht zu Nachrichtenveröffentlichungen.
Pub/Sub-Nachrichten haben eine Reihe von Attribut-Schlüssel/Wert-Paaren, die Metadaten zum Ereignis enthalten, sowie ein Daten-Feld, das eine vollständige JSON-Serialisierung der Secret
- oder SecretVersion
-Ressource enthält, die erstellt oder geändert wurde. Diese JSON-Datei ist ein UTF-8-codierter String, der die Secret
- oder SecretVersion
-Ressource genau in der Form darstellt, die von der öffentlichen Secret Manager API angegeben wurde, codiert in JSON, wie in der proto3-JSON-Zuordnung angegeben.
Ereignistypen
Im Folgenden finden Sie eine Liste der Ereignistypen, die von Secret Manager unterstützt werden.
Ereignistyp | Beschreibung |
---|---|
SECRET_CREATE |
Wird gesendet, wenn ein neues Secret erstellt wurde. |
SECRET_UPDATE |
Wird gesendet, wenn ein neues Secret erfolgreich aktualisiert wurde. |
SECRET_DELETE |
Wird gesendet, wenn ein Secret gelöscht wird, entweder aufgrund einer vom Nutzer initiierten Anfrage oder des Ablaufs eines Secrets. |
SECRET_VERSION_ADD |
Wird gesendet, wenn eine neue Secret-Version erfolgreich hinzugefügt wurde. |
SECRET_VERSION_ENABLE |
Wird gesendet, wenn eine Secret-Version aktiviert wird. |
SECRET_VERSION_DISABLE |
Wird gesendet, wenn eine Secret-Version deaktiviert wird. |
SECRET_VERSION_DESTROY |
Wird gesendet, wenn eine Secret-Version gelöscht wird. |
SECRET_VERSION_DESTROY_SCHEDULED |
Wird bei einer Löschung gesendet Verzögerungsdauer wird für das Secret konfiguriert und der Nutzer versucht, eine Secret-Version zu löschen. |
SECRET_ROTATE |
Wird gesendet, wenn ein Secret rotiert werden muss. Weitere Informationen finden Sie unter Weitere Informationen finden Sie unter Rotationspläne erstellen. |
TOPIC_CONFIGURED |
Dies ist eine Testnachricht ohne Text und andere Attribute als Eine Wenn Themen für ein Secret aktualisiert werden, wird eine |
Benachrichtigungsformat
Benachrichtigungen, die an ein Pub/Sub-Thema gesendet werden, bestehen aus zwei Teilen:
-
Attribute: Eine Reihe von Schlüssel/Wert-Paaren, die das Ereignis beschreiben.
-
Daten: Ein String, der die Metadaten des geänderten Objekts enthält
Attribute
Attribute sind Schlüssel/Wert-Paare, die in Benachrichtigungen enthalten sind, die von Secret Manager an Ihr Pub/Sub-Thema gesendet werden. Alle Benachrichtigungen außer TOPIC_CONFIGURED
Testnachrichten
immer die folgenden Schlüssel/Wert-Paare enthalten, unabhängig von den Daten der Benachrichtigung:
Beispiel | Beschreibung | |
---|---|---|
eventType |
SECRET_CREATE |
Die Art des Ereignisses, das gerade aufgetreten ist. Eine Liste möglicher Werte finden Sie unter Ereignistypen. |
dataFormat |
JSON_API_V1 |
Das Format der Objektdaten. |
secretId |
projects/p/secrets/my-secret |
Der vollständige Ressourcenname des Secrets, bei dem das Ereignis aufgetreten ist. |
timestamp |
2021-01-20T11:17:45.081104-08:00 |
Zeit, zu der das Ereignis aufgetreten ist. |
Darüber hinaus enthalten Benachrichtigungen manchmal die folgenden Schlüssel/Wert-Paare:
Beispiel | Beschreibung | |
---|---|---|
versionId |
projects/p/secrets/my-secret/versions/456 |
Der Name der Secret-Version, bei der das Ereignis aufgetreten ist.
Dies ist nur bei Ereignisbenachrichtigungen für |
deleteType |
REQUESTED |
Gibt an, ob der Löschvorgang von einem Nutzer (REQUESTED ) oder aufgrund eines Secret-Ablaufs (EXPIRATION ) angefordert wurde. Nur für SECRET_DELETE -Ereignisbenachrichtigungen vorhanden.
|
Daten
Das Datenfeld ist ein UTF-8-String, der die Metadaten des geänderten Objekts enthält. Daten sind entweder eine Secret- oder Secret-Version.
Bei SECRET_DELETE
-Benachrichtigungen stellen die im Datenfeld enthaltenen Metadaten die Objektmetadaten vor dem Löschvorgang dar. Bei allen anderen Benachrichtigungen repräsentieren die im Datenfeld enthaltenen Metadaten die Objektmetadaten nach der Änderung.
Beschränkungen
Ereignisbenachrichtigungen sind nur in Secret Manager verfügbar v1 API und Google Cloud CLI.
Hinweis
Sie können alle Ressourcen im selben Projekt oder Secrets und Pub/Sub speichern. Themen in separaten Projekten.
-
Führen Sie die folgenden Schritte aus, um Secret Manager einzurichten:
-
Erstellen oder verwenden Sie ein vorhandenes Projekt für Ihre Secret Manager-Ressourcen.
-
Führen Sie gegebenenfalls die Schritte aus der Seite Secret Manager API aktivieren
-
-
Führen Sie die folgenden Schritte aus, um Pub/Sub einzurichten:
-
Erstellen oder verwenden Sie ein vorhandenes Projekt für Ihre Pub/Sub-Ressourcen.
-
-
Authentifizieren Sie sich mit dem folgenden Befehl bei Google Cloud:
$ gcloud auth login --update-adc
Dienst-Agent-Identität erstellen
So erstellen Sie eine Dienst-Agent-Identität für jedes Projekt, das Secrets mit Ereignisbenachrichtigungen erfordert:
-
Führen Sie den folgenden Befehl aus, um eine Dienstidentität mit der Google Cloud CLI zu erstellen:
$ gcloud beta services identity create \ --service "secretmanager.googleapis.com" \ --project "PROJECT_ID"
Dieser Befehl gibt den Namen eines Dienstkontos im folgenden Format zurück:
service-PROJECT_ID@gcp-sa-secretmanager.iam.gserviceaccount.com
-
Erteilen Sie diesem Dienstkonto die Berechtigung, in den konfigurierten Pub/Sub-Themen zu veröffentlichen für Ihre Geheimnisse.
-
Speichern Sie den Namen des Dienstkontos als Umgebungsvariable mit dem folgenden Befehl:
# This is from the output of the command above $ export SM_SERVICE_ACCOUNT="service-...."
Die Umgebungsvariablen für das Secret Manager-Projekt, das Pub/Sub-Projekt und das Secret Manager-Dienstkonto festgelegt werden, während Sie dieses Verfahren durchgehen.
Pub/Sub-Themen erstellen
Folgen Sie der Pub/Sub-Kurzanleitung, um Themen in Ihrem Pub/Sub-Projekt in der Google Cloud Console zu erstellen. Alternativ können Sie Themen auch mit dem folgenden Befehl in der Google Cloud CLI erstellen:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- PROJECT_ID: die Google Cloud-Projekt-ID, die das Secret enthält
- PUBSUB_PROJECT_ID: die ID des Projekts, in dem Abos erstellt werden sollen
- PUBSUB_TOPIC_NAME: der Name des Themas
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Windows (PowerShell)
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Windows (cmd.exe)
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Wiederholen Sie diese Schritte mehrmals, wenn Sie mehrere Pub/Sub-Themen für das Secret erstellen möchten.
Gewähren Sie dem Dienstkonto für Secret Manager die Berechtigung, in den Themen zu veröffentlichen
Sie können dem Secret Manager-Dienstkonto Berechtigungen über die Google Cloud Console oder die Google Cloud CLI gewähren.
Mit dem folgenden Befehl wird dem Pub/Sub-Thema die Rolle „Pub/Sub-Publisher“ (roles/pubsub.publisher
) zugewiesen:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- PUBSUB_TOPIC_NAME: der Name des Themas
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud pubsub topics create add-iam-policy-binding PUBSUB_TOPIC_NAME \ --member "serviceAccount:${SM_SERVICE_ACCOUNT}" \ --role "roles/pubsub.publisher"
Windows (PowerShell)
gcloud pubsub topics create add-iam-policy-binding PUBSUB_TOPIC_NAME ` --member "serviceAccount:${SM_SERVICE_ACCOUNT}" ` --role "roles/pubsub.publisher"
Windows (cmd.exe)
gcloud pubsub topics create add-iam-policy-binding PUBSUB_TOPIC_NAME ^ --member "serviceAccount:${SM_SERVICE_ACCOUNT}" ^ --role "roles/pubsub.publisher"
Pub/Sub-Abos erstellen
Wenn Sie die zu einem Thema veröffentlichten Nachrichten ansehen möchten, müssen Sie auch ein Abo für das Thema erstellen. Folgen Pub/Sub-Kurzanleitung zum Erstellen von Abos in Ihrem Pub/Sub-Projekt in der Google Cloud Console. Alternativ können Sie Erstellen Sie mit dem folgenden Befehl Themen in der Google Cloud CLI:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- PUBSUB_PROJECT_ID: die ID des Projekts, in dem Abos erstellt werden sollen
- PUBSUB_SUBSCRIPTION_NAME: der Name des Abos
- PUBSUB_TOPIC_NAME: der Name des Themas
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME \ --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Windows (PowerShell)
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME ` --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Windows (cmd.exe)
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME ^ --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Secret mit konfigurierten Themen erstellen
Erstellen Sie ein Secret mit einer Liste von bis zu 10 konfigurierten Themen. Alle in einem Secret konfigurierten Themen erhalten Ereignisbenachrichtigungen, wenn das Secret oder eine seiner Versionen geändert wird.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
- PUBSUB_TOPIC_NAME: der Name des Themas
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME --location=LOCATION
Windows (PowerShell)
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME --location=LOCATION
Windows (cmd.exe)
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME --location=LOCATION
Secret-Themen aktualisieren
Ändern Sie die für ein Secret konfigurierten Pub/Sub-Themen, indem Sie das Secret mit den neuen Ressourcennamen der Pub/Sub-Themen aktualisieren. Mit der Google Cloud CLI können Sie ein oder mehrere Themen zu einem Secret hinzufügen oder daraus entfernen oder auch alle Themen aus dem Secret löschen.
Themen hinzufügen
Verwenden Sie den folgenden Befehl, um einem Secret ein oder mehrere Themen hinzuzufügen:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
- PROJECT_ID: die Google Cloud-Projekt-ID, die das Secret enthält
- PUBSUB_PROJECT_ID: die ID des Projekts, in dem Abos erstellt werden sollen
- PUBSUB_TOPIC_1_NAME und PUBSUB_TOPIC_2_NAME: die Namen der Themen, die dem Secret hinzugefügt werden
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --project PROJECT_ID \ --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --project PROJECT_ID ` --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --project PROJECT_ID ^ --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Themen entfernen
Verwenden Sie den folgenden Befehl, um ein oder mehrere Themen aus einem Secret zu entfernen:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- SECRET_ID: die ID des Secrets oder eine voll qualifizierte Kennung für das Secret
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
- PROJECT_ID: das Google Cloud-Projekt, das das Secret enthält
- PUBSUB_PROJECT_ID: die ID des Projekts, in dem Abos erstellt werden sollen
- PUBSUB_TOPIC_1_NAME und PUBSUB_TOPIC_2_NAME: die Namen der Themen, die Sie entfernen aus dem Secret
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --project PROJECT_ID \ --remove-topics "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2__NAME
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --project PROJECT_ID ` --remove-topics "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2__NAME
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --project PROJECT_ID ^ --remove-topics "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2__NAME
Themen löschen
Verwenden Sie den folgenden Befehl, um alle Themen aus einem Secret zu entfernen:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
- PROJECT_ID: das Google Cloud-Projekt, das das Secret enthält
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --project PROJECT_ID \ --clear-topics
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --project PROJECT_ID ` --clear-topics
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --project PROJECT_ID ^ --clear-topics
Ereignisbenachrichtigungen mit Cloud Run-Funktionen verarbeiten
Ereignisbenachrichtigungen können zum Initiieren von Workflows verwendet werden, indem Cloud Run-Funktionen erstellt werden, die die Pub/Sub-Nachrichten verarbeiten. Weitere Informationen finden Sie in der Dokumentation zu Cloud Run-Funktionen. Der folgende Beispielcode gilt für eine Cloud Run-Funktion, die eventType
, secretId
und Metadaten ausgibt, wenn ein Ereignis im Thema veröffentlicht wird.
C#
Um diesen Code auszuführen, müssen Sie eine C#-Entwicklungsumgebung einrichten und das Secret Manager C# SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using Google.Events.Protobuf.Cloud.PubSub.V1; using System; using System.Threading; using System.Threading.Tasks; // Triggered from a message on a Cloud Pub/Sub topic. // The printed value will be visible in Cloud Logging // (https://cloud.google.com/functions/docs/monitoring/logging). namespace PubSubSample { public class Function : ICloudEventFunction<MessagePublishedData> { public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken) { string eventType = data.Message.Attributes["eventType"]; string secretId = data.Message.Attributes["secretId"]; string secretMetadata = data.Message.TextData; Console.WriteLine($"Received {eventType} for {secretId}. New metadata: {secretMetadata}."); return Task.CompletedTask; } } }
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Secret Manager Go SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für Secret Manager finden Sie unter Secret Manager-Clientbibliotheken
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Secret Manager zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Um diesen Code auszuführen, müssen Sie zuerst eine Node.js-Entwicklungsumgebung einrichten und das Cloud KMS Node.js SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
/** * Triggered from a message on a Cloud Pub/Sub topic. * The printed value will be visible in Cloud Logging * (https://cloud.google.com/functions/docs/monitoring/logging). * * @param {!Object} event Event payload. * @param {!Object} context Metadata for the event. */ exports.smEventsFunction = (event, context) => { const eventType = event.attributes.eventType; const secretID = event.attributes.secretId; const secretMetadata = Buffer.from(event.data, 'base64').toString(); console.log(`Received ${eventType} for ${secretID}. New metadata: ${secretMetadata}.`); };
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Secret Manager Python SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Secret Manager Ruby SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
require "functions_framework" require "base64" # Triggered from a message on a Cloud Pub/Sub topic. # The printed value will be visible in Cloud Logging # (https://cloud.google.com/functions/docs/monitoring/logging). FunctionsFramework.cloud_event "sm_events_function" do |event| message = event.data["message"] event_type = message["attributes"]["eventType"] secret_id = message["attributes"]["secretId"] message_data = Base64.decode64 message["data"] FunctionsFramework.logger.info "Received %s for %s. New metadata: %s." % [event_type, secret_id, message_data] end
Eine Liste aller Ereignistypen finden Sie unter Ereignistypen.
Falsch konfigurierte Themen
Wenn Pub/Sub-Themen bei einem Erstellungs- oder Aktualisierungsvorgang einem Secret hinzugefügt werden, Secret Manager kann aufgrund einer Fehlkonfiguration keine Nachrichten zum Thema veröffentlichen. Der Vorgang mit einer Fehlermeldung, die angibt, warum die Veröffentlichung fehlgeschlagen ist. Dies kann beispielsweise der Fall sein, wenn das Thema nicht existiert oder das Secret Manager-Dienstkonto nicht zur Veröffentlichung berechtigt ist.
Wenn Pub/Sub-Themen einem Secret hinzugefügt und anschließend das Thema so geändert wird,
dass Secret Manager keine Nachrichten mehr veröffentlichen kann (z. B. wenn das Thema gelöscht wird oder
wenn die Berechtigungen für das Secret Manager-Dienstkonto entfernt werden), schreibt Secret Manager
Logs in Secret Manager Secret
mit einer Meldung, die angibt, warum die Veröffentlichung fehlgeschlagen ist.