Secrets rotieren

In diesem Thema wird das Verwalten von Rotationsbenachrichtigungen für Secrets über Secret Manager erläutert.

Überblick

Secret Manager unterstützt Rotationspläne für Secrets. Secret Manager sendet Nachrichten an Pub/Sub-Themen, die für das Secret basierend auf der bereitgestellten Rotationshäufigkeit und Rotationszeit konfiguriert wurden. In dieser Anleitung wird beschrieben, wie Sie einmalige oder regelmäßige Zeitpläne für Ihre Secrets einrichten, um Benachrichtigungen zu erhalten, wenn es Zeit ist, das Secret zu rotieren.

Regelmäßige Rotation von Secrets hilft bei Folgendem:

  • Zeitraum begrenzen, für die ein gehacktes Secret gültig bleibt und eine Sicherheitslücke verursacht
  • Kontinuierlich einen Rotationsworkflow ausführen, um die Prozesszuverlässigkeit zu gewährleisten

Funktionsweise

Secret Manager sendet zur next_rotation_time des Secrets eine SECRET_ROTATE-Nachricht an die Pub/Sub-Themen, die für das Secret konfiguriert wurden. Es gibt zwei Möglichkeiten, diesen Zeitstempel festzulegen:

  1. Wird vom Nutzer beim Erstellen oder Aktualisieren des Secrets bereitgestellt.

  2. Wenn eine rotation_period angegeben ist, sendet Secret Manager eine SECRET_ROTATE-Nachricht nach der verstrichenen rotation_period. next_rotation_time wird auf die neue Rotationszeit aktualisiert.

Sie müssen einen Pub/Sub-Abonnenten konfigurieren, um die SECRET_ROTATE-Nachrichten zu empfangen und darauf zu reagieren. Implementieren Sie bei Bedarf zusätzliche Workflows, z. B. das Hinzufügen einer neuen Secret-Version und das Auslösen von Anwendungsbereitstellungen.

Hinweise

  • Das Verwalten von Rotationsrichtlinien ist nur in der Secret Manager v1 API und im gcloud-Befehlszeilentool verfügbar.

  • Pub/Sub-Themen müssen für das Secret konfiguriert werden. Informationen zum Erstellen eines Pub/Sub-Themas und -Abos finden Sie unter 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, wenn rotation_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 „gcloud datetime“.

  • Fehler bei der Zustellung: Secret Manager wiederholt automatisch fehlgeschlagene Versuche, eine Nachricht zu senden. Secret Manager gibt keine Garantien für die Übermittlung, wenn eine Secret- oder Themenkonfiguration, Berechtigungen oder Kontingente falsch konfiguriert sind.

  • 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.

Beispiele

Rotation für ein Secret konfigurieren

Erstellen Sie ein Secret mit einer next_rotation_time, das ab dem 1. Juni 2021 alle 30 Tage rotiert wird:

gcloud

$ gcloud secrets create secret-id \
    --replication-policy "automatic" \
    --next-rotation-time="2021-06-01T09:00:00Z" \
    --rotation-period="2592000s" \
    --topics=full-topic-name"

API

 curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets?secretId=${SECRET_ID}" \
  --request "POST" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-binary @- <<EOF
{
"replication":{
  "automatic":{}
},
"topics": {"name" : "projects/${PROJECT_ID}/topics/${TOPIC_NAME}"},
"rotation":
  {
    "next_rotation_time": "2021-06-01T09:00:00Z",
    "rotation_period" : '2592000s'
  },
}
EOF

Rotationseinstellungen eines Secrets aktualisieren

Gültige updateMask-Pfade für die Rotation sind: rotation, rotation.next_rotation_time, rotation.rotation_period.

So aktualisieren Sie die next_rotation_time eines Secrets:

gcloud

$ gcloud secrets update secret-id \
  --next-rotation-time "2022-06-01T09:00:00Z"

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {
    "next_rotation_time": "2040-06-01T09:00:00Z"
  }
  EOF

Rotation für ein Secret deaktivieren

So entfernen Sie die next_rotation_time eines Secrets:

gcloud

$ gcloud secrets update secret-id \
  --remove-next-rotation-time

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF

So entfernen Sie den Rotationsplan eines Secrets. Dadurch werden sowohl die next_rotation_time als auch die rotation_period entfernt:

gcloud

$ gcloud secrets update secret-id \
  --remove-rotation-schedule

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF