Ablaufende Secrets erstellen und verwalten

In diesem Thema wird die Unterstützung für ablaufende Secrets in Secret Manager erläutert.

Überblick

Standardmäßig sind in Secret Manager gespeicherte Secrets vorhanden, bis sie von einem Nutzer gelöscht werden. Wenn ein Secret nur für eine bekannte, begrenzte Zeit gespeichert werden soll, können Sie eine Ablaufzeit anhängen. Nach der konfigurierten Ablaufzeit eines Secrets wird es automatisch gelöscht.

Wenn keine Notwendigkeit zum Löschen des Secrets besteht, können Sie IAM-Bedingungen oder den Versionsstatus "Deaktiviert" verwenden, um den Zugriff auf sichere Weise zu widerrufen.

Wenn Sie eine Ablaufzeit eingeben, kann dies entweder als Zeitstempel oder als Dauer ausgedrückt werden. Beim Abrufen von Secret-Metadaten wird die Ablaufzeit immer als Zeitstempel zurückgegeben, unabhängig davon, wie sie angegeben wurde.

Ein Ablauf kann jederzeit einem Secret hinzugefügt, aktualisiert oder entfernt werden.

Beschränkungen

  • Der Ablauf von Secrets ist nur in der Secret Manager v1 API und über das gcloud-Befehlszeilentool verfügbar.

  • Der Ablaufzeitpunkt eines Secrets darf nicht weniger als 60 Sekunden oder nicht mehr als 100 Jahre entfernt sein.

Abgelaufene Secrets sicher verwenden

Wenn ein Secret in Secret Manager abläuft, wird es unwiderruflich gelöscht. Die beste Möglichkeit zum Erkennen von Secrets, die bald ablaufen, ist die Verwendung von IAM-Bedingungen, um vor dem Ablauf Berechtigungen aus den Konten zu entfernen, die das Secret verwenden.

Hängen Sie dazu, wenn Sie Berechtigungen für ein Secret gewähren, eine zeitbasierte Bedingung an die Bindung an. Die Bindung sollte ablaufen, wenn das Secret voraussichtlich nicht mehr verwendet wird, aber früh genug, sodass die entfernten Berechtigungen bemerkt werden, bevor das Secret abläuft. Wenn Workflows, von denen man glaubte, dass sie das Secret nicht mehr verwenden, nach dem Widerrufen von Berechtigungen nicht mehr funktionieren, können Berechtigungen wieder hinzugefügt werden, um das Problem schnell zu beheben. Wenn mehr Zeit benötigt wird, kann der Secret-Ablauf aktualisiert oder sogar entfernt werden.

Angenommen, ein Dienstkonto soll planmäßig über einen Zeitraum von 30 Tagen täglich auf ein Secret zugreifen. Der Secret-Ablauf kann dann auf 60 Tage ab der Erstellung festgelegt werden und eine bedingte IAM-Bindung kann verwendet werden, um dem Dienstkonto für 45 Tage die Rolle "Zugriffsperson für Secret" zuzuweisen. Wenn das Dienstkonto versucht, nach 45 Tagen auf das Secret zuzugreifen, wird der Fehler "Berechtigung verweigert" zurückgegeben und die Workflows, die das Secret erfordern, würden fehlschlagen. Ein Administrator kann dem Dienstkonto dann wieder die Rolle "Zugriffsperson für Secret" zuweisen, um das Problem während der Untersuchung schnell zu beheben, da das Secret selbst weitere 15 Tage lang nicht gelöscht werden würde.

Darüber hinaus ist es möglich, Benachrichtigungen basierend auf Logwarnungen zu Secrets zu erstellen, die bald ablaufen. Weitere Informationen finden Sie unter Ablauf-Logging.

Zeitstempel und Dauer angeben

  • Zeitstempelwerte müssen als RFC 3339 formatiert sein, z. B. 2100-01-01T09:00:00-05:00.

  • Werte für die Dauer müssen als Anzahl von Sekunden mit dem Suffix "s" formatiert werden, z. B. 86400s.

Ablaufendes Secret erstellen

So erstellen Sie ein ablaufendes Secret mit einem Zeitstempel:

gcloud

Um Secret Manager in der Befehlszeile zu verwenden, installieren Sie zuerst das Cloud SDK Version 338.0.0 oder höher oder aktualisieren Sie darauf. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --expire-time "TIMESTAMP"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication": {"automatic": {}},
  "expire_time": "TIMESTAMP"
}
EOF

So erstellen Sie ein ablaufendes Secret mit einer Dauer:

gcloud

Um Secret Manager in der Befehlszeile zu verwenden, installieren Sie zuerst das Cloud SDK Version 338.0.0 oder höher oder aktualisieren Sie darauf. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --ttl "DURATION"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication": {"automatic": {}},
  "ttl": "DURATION"
}
EOF

Ablauf eines Secrets aktualisieren

Auf jedes Secret kann ein neuer Ablauf angewendet werden, unabhängig davon, ob es bereits einen hat. Für jedes Secret kann jeweils nur ein Ablauf konfiguriert werden. Das Aktualisieren des Ablaufs eines Secrets, das bereits einen hat, überschreibt den vorhandenen Ablauf.

So aktualisieren Sie den Ablauf eines Secrets mithilfe eines Zeitstempels:

gcloud

Um Secret Manager in der Befehlszeile zu verwenden, installieren Sie zuerst das Cloud SDK Version 338.0.0 oder höher oder aktualisieren Sie darauf. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets update "SECRET_ID" \
    --expire-time "TIMESTAMP"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "expire_time": "TIMESTAMP"
}
EOF

So aktualisieren Sie die Ablaufzeit eines Secrets mithilfe einer Dauer:

gcloud

Um Secret Manager in der Befehlszeile zu verwenden, installieren Sie zuerst das Cloud SDK Version 338.0.0 oder höher oder aktualisieren Sie darauf. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets update "SECRET_ID" \
    --ttl "DURATION"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "ttl": "DURATION"
}
EOF

Ablauf eines Secrets entfernen

So entfernen Sie die Ablaufzeit eines Secrets:

gcloud

Um Secret Manager in der Befehlszeile zu verwenden, installieren Sie zuerst das Cloud SDK Version 338.0.0 oder höher oder aktualisieren Sie darauf. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets update "SECRET_ID" \
    --remove-expiration

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

Wenn Sie expire_time oder ttl in updateMask aufnehmen, aber für beides keine Werte angeben, wird der Ablauf entfernt.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary '{}'

Ablauf-Logging

Cloud-Audit-Logs werden nicht erzeugt, wenn ein Secret automatisch abläuft. Stattdessen schreibt Secret Manager Logs in bestimmten Intervallen bis zum Ablauf eines Secrets in die Secret Manager-Secret-Ressource.

Logzeit Secret-Ereignistyp
30 Tage vor Ablauf EXPIRES_IN_30_DAYS
7 Tage vor Ablauf EXPIRES_IN_7_DAYS
1 Tag vor Ablauf EXPIRES_IN_1_DAY
6 Stunden vor Ablauf EXPIRES_IN_6_HOURS
1 Stunde vor Ablauf EXPIRES_IN_1_HOUR
Beim Ablauf EXPIRED

Informationen zum Aufrufen dieser Logs finden Sie in der Kurzanleitung zum Logging. Sie können logbasierte Messwerte erstellen und damit Benachrichtigungen für bevorstehende Ablaufzeiten erstellen.

Nächste Schritte