Mit Secret Manager können Sie regelmäßige Rotationen Ihrer Secrets planen. Dazu sendet Secret Manager Benachrichtigungen an Pub/Sub-Themen, die mit Ihren Secrets verknüpft sind, basierend auf der von Ihnen angegebenen Rotationshäufigkeit und -zeit. Auf dieser Seite wird beschrieben, wie Sie diese Rotationspläne einrichten.
Funktionsweise von Benachrichtigungen zur Schlüsselrotation
Secret Manager löst eine SECRET_ROTATE
-Nachricht an die angegebenen Pub/Sub-Themen an der next_rotation_time
des Secrets aus. Es gibt zwei Möglichkeiten, diesen Zeitstempel zu ermitteln:
-
Benutzerdefiniert: Sie können die
next_rotation_time
beim Erstellen oder Aktualisieren des Secrets angeben. -
Rotationszeitraum: Wenn Sie eine
rotation_period
definieren, berechnet Secret Manager automatisch dienext_rotation_time
. Secret Manager sendet dieSECRET_ROTATE
-Nachricht nach Ablauf der angegebenenrotation_period
und aktualisiert dann dienext_rotation_time
, um die nächste Rotation zu planen.
Sie müssen einen Pub/Sub-Abonnenten konfigurieren, um die SECRET_ROTATE
-Nachrichten zu empfangen und darauf zu reagieren.
Möglicherweise müssen Sie auch zusätzliche Workflows als Reaktion auf diese Benachrichtigungen einrichten, z. B. eine neue Version des Secrets erstellen und die Änderungen in Ihren Anwendungen bereitstellen.
Anforderungen und Überlegungen für Zeitpläne für die Geheimschlüsselrotation
-
Pub/Sub-Themen müssen für das Secret konfiguriert werden. Informationen zum Erstellen eines Pub/Sub-Themas und -Abos finden Sie in der Pub/Sub-Kurzanleitung. Informationen zum Konfigurieren von Themen für ein Secret finden Sie unter Ereignisbenachrichtigungen für Secret Manager.
-
next_rotation_time
muss festgelegt werden, wennrotation_period
angegeben ist. -
next_rotation_time
darf nicht auf weniger als fünf Minuten in der Zukunft festgelegt werden. -
Die
rotation_period
darf nicht kürzer als eine Stunde sein. Eine Anleitung zur Formatierung von Zeitstempeln finden Sie in der Referenz zu „datetime“ in Google Cloud. -
Secret Manager wiederholt fehlgeschlagene Versuche, Nachrichten zu senden, automatisch. Wir können jedoch nicht garantieren, dass die Nachrichten zugestellt werden, wenn es Fehlkonfigurationen im Zusammenhang mit dem Secret, der Themenkonfiguration, Berechtigungen oder Kontingenten gibt.
-
Aktive Rotationen müssen abgeschlossen sein, bevor eine andere Rotation gestartet werden kann, um zu verhindern, dass gleichzeitige Rotationen zu unerwartetem Verhalten führen. Benachrichtigungen gelten als aktiv, während Secret Manager versucht, die Nachricht an Pub/Sub zu senden. Geplante Rotationen werden übersprungen, wenn eine Rotation aktiv ist. Secret Manager wiederholt fehlgeschlagene Versuche, eine Nachricht zu senden, automatisch bis zu sieben Tage lang. Danach wird die Rotation abgebrochen.
Rotation für ein Secret konfigurieren
Sie können einen Rotationsplan mit der Google Cloud Console, der Google Cloud CLI oder der Secret Manager API konfigurieren.
Console
-
Rufen Sie in der Google Cloud Console die Seite Secret Manager auf.
-
Klicken Sie auf der Seite Secret Manager auf den Tab Regionale Secrets und dann auf Regionales Secret erstellen.
-
Geben Sie auf der Seite Regionales Secret erstellen im Feld Name einen Namen für das Secret ein.
-
Geben Sie einen Wert für das Secret ein (z. B.
abcd1234
). Sie können auch eine Textdatei mit dem Secret-Wert über die Option Datei hochladen hochladen. Dadurch wird die Secret-Version automatisch erstellt. -
Wählen Sie in der Liste Region den Speicherort für das regionale Secret aus.
-
Klicken Sie im Bereich Rotation das Kästchen Rotationszeitraum festlegen an.
-
Wählen Sie in der Liste Rotationszeitraum eine der Standardoptionen aus oder wählen Sie Benutzerdefiniert aus, um einen eigenen Rotationszeitplan zu konfigurieren.
-
Geben Sie im Feld Ab dem das Startdatum und die Startzeit des Rotationszeitraums ein.
-
Klicken Sie auf Secret erstellen.
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.
- NEXT_ROTATION_TIME: der Zeitstempel, zu dem die erste Rotation abgeschlossen werden soll, im ISO 8601-Format, z. B.
2021-06-01T09:00:00Z
. - ROTATION_PERIOD: Intervall in Sekunden, nach dem der Schlüssel rotiert wird. Wenn Sie den Schlüssel beispielsweise alle 259.200 Sekunden rotieren möchten, legen Sie den Wert
2592000s
fest. - FULL_TOPIC_NAME: der vollständige Name Ihres Pub/Sub-Themas im Format
projects/your-project-id/topics/your-topic-name
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets create SECRET_ID --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME" \ --rotation-period="ROTATION_PERIOD" \ --topics="FULL_TOPIC_NAME"
Windows (PowerShell)
gcloud secrets create SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME" ` --rotation-period="ROTATION_PERIOD" ` --topics="FULL_TOPIC_NAME"
Windows (cmd.exe)
gcloud secrets create SECRET_ID --location=LOCATION ^ --next-rotation-time="NEXT_ROTATION_TIME" ^ --rotation-period="ROTATION_PERIOD" ^ --topics="FULL_TOPIC_NAME"
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
- PROJECT_ID: die Google Cloud-Projekt-ID
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
- TOPIC_NAME: der Name des Themas
HTTP-Methode und URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
JSON-Text der Anfrage:
{ "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"}, "rotation": { "next_rotation_time": "2021-06-01T09:00:00Z", "rotation_period" : '2592000s' }, }
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Rotationseinstellungen eines Secrets aktualisieren
Sie können die folgenden Rotationseinstellungen aktualisieren, wenn Sie eine Aktualisierungsanfrage stellen:
-
rotation
: Dies bezieht sich auf die gesamte Rotationskonfiguration des Secrets. -
rotation.next_rotation_time
: Diese Option richtet sich speziell an den Zeitstempel, der angibt, wann die nächste Rotation erfolgen könnte. -
rotation.rotation_period
: Hiermit wird die Dauer zwischen den einzelnen Rotationen angegeben.
Verwenden Sie eine der folgenden Methoden, um die Rotationseinstellungen des Secrets zu aktualisieren:
Console
-
Rufen Sie in der Google Cloud Console die Seite Secret Manager auf.
-
Klicken Sie auf der Seite Secret Manager auf den Tab Regionale Secrets.
-
Suchen Sie das Secret, das Sie bearbeiten möchten, und klicken Sie auf das zugehörige Menü
Aktionen. Klicken Sie im Menü Aktionen auf Bearbeiten. -
Gehen Sie zum Abschnitt Rotation. Aktualisieren Sie bei Bedarf die Rotationsdauer und klicken Sie auf Secret aktualisieren.
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.
- NEXT_ROTATION_TIME: der Zeitstempel, zu dem die erste Rotation abgeschlossen werden soll, im ISO 8601-Format, z. B.
2021-06-01T09:00:00Z
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME"
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME"
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --next-rotation-time="NEXT_ROTATION_TIME"
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: den Speicherort des Geheimnisses in Google Cloud.
- PROJECT_ID: die Google Cloud-Projekt-ID.
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret.
- NEXT_ROTATION_TIME: der Zeitstempel, zu dem die erste Rotation abgeschlossen werden soll, im ISO 8601-Format, z. B.
2021-06-01T09:00:00Z
.
HTTP-Methode und URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
JSON-Text der Anfrage:
{ "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"} }
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Rotation für ein Secret deaktivieren
Sie haben folgende Möglichkeiten, die Secret-Rotation zu deaktivieren:
Console
-
Rufen Sie in der Google Cloud Console die Seite Secret Manager auf.
-
Klicken Sie auf der Seite Secret Manager auf den Tab Regionale Secrets.
-
Suchen Sie das Secret, das Sie bearbeiten möchten, und klicken Sie auf das zugehörige Menü
Aktionen. Klicken Sie im Menü Aktionen auf Bearbeiten. -
Gehen Sie zum Abschnitt Rotation. Entfernen Sie das Häkchen aus dem Kästchen Rotationszeitraum festlegen und klicken Sie dann auf Secret aktualisieren.
gcloud
next_rotation_time
eines Secrets entfernen
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
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-next-rotation-time
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-next-rotation-time
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-next-rotation-time
So entfernen Sie den Rotationsplan eines Secrets. Dadurch werden sowohl die next_rotation_time
als auch die rotation_period
entfernt.
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
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-rotation-schedule
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-rotation-schedule
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-rotation-schedule
REST
Nächste Rotationszeit eines Secrets entfernen
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
- PROJECT_ID: die Google Cloud-Projekt-ID
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
HTTP-Methode und URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
JSON-Text der Anfrage:
{}
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
So entfernen Sie den Rotationsplan eines Secrets. Dadurch werden sowohl die nächste Rotationszeit als auch der Rotationszeitraum entfernt.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: den Speicherort des Geheimnisses in Google Cloud
- PROJECT_ID: die Google Cloud-Projekt-ID
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
HTTP-Methode und URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation
JSON-Text der Anfrage:
{}
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }