Secret Manager unterstützt die Verwendung von Entitäts-Tags (ETags) für eine optimistische Nebenläufigkeitserkennung.
In einigen Fällen können zwei Prozesse, die dieselbe Ressource parallel aktualisieren, sich gegenseitig beeinträchtigen, wobei der letztere Vorgang die Aktionen des ersten Prozesses überschreibt.
ETags bieten eine Möglichkeit zur optimistischen Nebenläufigkeitserkennung, da sie erkennen können, ob eine Ressource geändert wurde, bevor Maßnahmen für die Ressource durchgeführt werden.
ETags mit Secret Manager verwenden
Die folgenden Ressourcenänderungsanfragen unterstützen ETags:
In einer secrets.patch-Anfrage ist das ETag der Anfrage in die Secret-Daten eingebettet. Alle anderen Anfragen akzeptieren einen optionalen etag
-Parameter.
Wenn ein ETag angegeben wird und mit dem aktuellen Ressourcen-ETag übereinstimmt, wird die Anfrage
succeeds; Andernfalls schlägt sie mit dem Fehler FAILED_PRECONDITION
und dem HTTP-Statuscode fehl.
400. Wenn kein ETag angegeben wird, wird die Anfrage fortgesetzt, ohne den aktuell gespeicherten ETag-Wert zu prüfen.
Ressourcen-ETags werden bei der Ressourcenerstellung (projects.secrets.create, projects.secrets.addVersion) generiert und für jede der oben aufgeführten Änderungsanfragen aktualisiert. Bei einer Änderungsanfrage wird nur das ETag der Ressource aktualisiert, auf die sie angewendet wird. Das heißt, das Aktualisieren einer Secret-Version wirkt sich nicht auf das Secret-ETag aus und umgekehrt.
Auch wenn durch ein Update der Status einer Ressource nicht geändert wird, wird trotzdem der ETag der Ressource aktualisiert.
Dazu ein Beispiel:
-
Nutzer 1 versucht, eine Secret-Version zu aktivieren, ohne zu wissen, dass sie bereits aktiviert ist. Das System verarbeitet dies und ändert nur das ETag der Version.
-
Nutzer 2 versucht mit dem alten ETag, die Version zu deaktivieren.
-
Dies schlägt fehl, da das System das neuere ETag erkennt, was auf einen neueren Intent hinweist. damit die Version aktiviert bleibt.
Auch scheinbar geringfügige Updates sind aufgrund von ETag-Änderungen wichtig. So wird für Datenkonsistenz gesorgt, insbesondere wenn mehrere Nutzer oder Systeme mit derselben Ressource interagieren.
Die Ressource etag
wird in der Antwort zurückgegeben, wenn eine Ressource (Secret oder SecretVersion) enthalten ist.
Secret mit ETags löschen
In diesem Abschnitt wird die Verwendung von ETags beim Löschen eines Secrets beschrieben. Wenn das Secret durch einen anderen Prozess geändert wurde, schlägt der Löschvorgang fehl.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- SECRET_ID: die ID des Secrets oder eine voll qualifizierte Kennzeichnung für das Secret.
- LOCATION: den Speicherort des Geheimnisses in Google Cloud.
- ETAG: das Entitäts-Tag des Secrets. Das ETag muss die umgebenden Anführungszeichen enthalten.
Wenn der ETag-Wert beispielsweise
"abc"
ist, lautet der Shell-Escape-Wert"\"abc\""
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets delete SECRET_ID --location=LOCATION \ --etag "ETAG"
Windows (PowerShell)
gcloud secrets delete SECRET_ID --location=LOCATION ` --etag "ETAG"
Windows (cmd.exe)
gcloud secrets delete SECRET_ID --location=LOCATION ^ --etag "ETAG"
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: der Google Cloud-Speicherort des Secrets.
- PROJECT_ID: die Google Cloud-Projekt-ID.
- SECRET_ID: die ID des Secrets oder eine voll qualifizierte Kennzeichnung für das Secret.
- ETAG: das Entitäts-Tag des Secrets. Das ETag wird als Teil der Abfragezeichenfolge der URL angegeben
und muss URL-codiert sein. Wenn der ETag-Wert beispielsweise
"abc"
lautet, lautet der URL-codierte Wert%22abc%22
, da das Anführungszeichen als%22
codiert ist.
HTTP-Methode und URL:
DELETE https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?etag=ETAG
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 DELETE \
-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?etag=ETAG"
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 DELETE `
-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?etag=ETAG" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{}
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
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Secret Manager Java SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
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.
Secret mit ETags aktualisieren
In diesem Abschnitt wird die Verwendung von ETags beim Aktualisieren eines Secrets beschrieben. Wenn das Secret durch einen anderen Prozess geändert wurde, schlägt der Aktualisierungsvorgang fehl.
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.
- KEY: der Labelname.
- VALUE: der entsprechende Labelwert.
- ETAG: das Entitäts-Tag des Secrets. Das ETag muss die umgebenden Anführungszeichen enthalten.
Wenn der ETag-Wert beispielsweise
"abc"
ist, lautet der Shell-Escape-Wert"\"abc\""
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --update-labels "KEY=VALUE" \ --etag "ETAG"
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --update-labels "KEY=VALUE" ` --etag "ETAG"
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --update-labels "KEY=VALUE" ^ --etag "ETAG"
Die Antwort gibt das Secret zurück.
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 eine voll qualifizierte Kennzeichnung für das Secret.
- ETAG: das Entitäts-Tag des Secrets. Das ETag wird als Feld für das Secret angegeben und muss die umgebenden Anführungszeichen enthalten. Wenn der ETag-Wert beispielsweise
"abc"
ist, lautet der JSON-Escape-Wert{"etag":"\"abc\""}
. - KEY: der Labelname.
- VALUE: der entsprechende Labelwert.
HTTP-Methode und URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=labels
JSON-Text der Anfrage:
{"etag":"ETAG", "labels":{"KEY": "VALUE"}}
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=labels"
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=labels" | 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", "labels": { "KEY": "VALUE" }, "etag": "\"162145a4f894d5\"" }
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
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Secret Manager Java SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
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.
Secret-Version mit ETags aktualisieren
In diesem Abschnitt wird die Verwendung von ETags beim Aktualisieren einer Secret-Version beschrieben. Wenn die Secret-Version durch einen anderen Prozess geändert wurde, schlägt der Aktualisierungsvorgang fehl.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- VERSION_ID: die ID der Secret-Version.
- SECRET_ID: die ID des Secrets oder eine voll qualifizierte Kennzeichnung für das Secret.
- LOCATION: der Google Cloud-Speicherort des Secrets.
- ETAG: das Entitäts-Tag. Das ETag muss die umgebenden Anführungszeichen enthalten.
Wenn der ETag-Wert beispielsweise
"abc"
ist, lautet der Shell-Escape-Wert"\"abc\""
.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud secrets versions disable VERSION_ID \ --secret SECRET_ID \ --location=LOCATION \ --etag "ETAG"
Windows (PowerShell)
gcloud secrets versions disable VERSION_ID ` --secret SECRET_ID ` --location=LOCATION ` --etag "ETAG"
Windows (cmd.exe)
gcloud secrets versions disable VERSION_ID ^ --secret SECRET_ID ^ --location=LOCATION ^ --etag "ETAG"
Die Antwort gibt das Secret zurück.
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- LOCATION: der Google Cloud-Speicherort des Secrets
- PROJECT_ID: die Google Cloud-Projekt-ID
- SECRET_ID: die ID des Secrets oder die voll qualifizierte Kennzeichnung für das Secret
- VERSION_ID: die ID der Secret-Version
- ETAG: das Entitäts-Tag der Secret-Version. Das ETag wird als Feld für die SecretVersion angegeben und muss die umgebenden Anführungszeichen enthalten. Wenn der ETag-Wert beispielsweise
"abc"
war, wäre der JSON-Escaping-Wert{"etag":"\"abc\""}
.
HTTP-Methode und URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable
JSON-Text der Anfrage:
{"etag":"ETAG"}
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/SECRET_ID/versions/VERSION_ID:disable"
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/SECRET_ID/versions/VERSION_ID:disable" | Select-Object -Expand Content
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID", "createTime": "2024-09-04T06:41:57.859674Z", "state": "DISABLED", "etag": "\"1621457b3c1459\"" }
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
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Secret Manager Java SDK installieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.
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.
Das folgende Codebeispiel beschreibt, wie eine Secret-Version mit ETags aktiviert wird. Sie können auch ETags angeben, bei anderen Secret-Mutationsvorgängen, z. B. beim Deaktivieren oder Löschen von Secret-Versionen Weitere Informationen finden Sie in den Codebeispielen für Secret Manager.
Nächste Schritte
- Rotationspläne erstellen
- Regionales Secret bearbeiten
- Benachrichtigungen für ein regionales Secret einrichten