Secret Manager supporta l'utilizzo dei tag entità (ETag) per il controllo della contemporaneità ottimistico.
In alcuni casi, due processi che aggiornano la stessa risorsa in parallelo interferiscono tra loro, mentre quest'ultimo processo sostituisce lo sforzo il primo.
Gli ETag forniscono un mezzo per un controllo ottimistico della contemporaneità, consentendo i processi per vedere se una risorsa è stata modificata prima di intraprendere qualsiasi azione.
Utilizzo degli ETag con Secret Manager
Le seguenti richieste di modifica delle risorse supportano gli ETag:
- projects.secrets.patch
- projects.secrets.delete
- projects.secrets.versions.enable
- projects.secrets.versions.disable
- projects.secrets.versions.destroy
In una richiesta secrets.patch, l'ETag della richiesta è incorporato nel Secret
e i dati di Google Cloud. Tutte le altre richieste accettano un parametro facoltativo etag
.
Se viene fornito un ETag che corrisponde all'ETag della risorsa attuale, la richiesta
succeeds; altrimenti non va a buon fine con un FAILED_PRECONDITION
e un codice di stato HTTP 400. Se non viene fornito un ETag,
la richiesta procede senza controllare il valore ETag attualmente memorizzato.
Gli ETag delle risorse vengono generati al momento della creazione della risorsa (projects.secrets.create, projects.secrets.addVersion) e aggiornati per ciascuna delle richieste di modifica elencate sopra. Una richiesta di modifica aggiorna solo l'ETag della risorsa a cui si applica. Ciò significa che l'aggiornamento di una versione del secret non influisce l'ETag segreto e viceversa.
Un aggiornamento della risorsa che non richiede alcuna operazione aggiorna anche l'ETag della risorsa. Ad esempio: Considera lo scenario seguente: un chiamante invia una richiesta per abilitare un secret che è già abilitata, a sua insaputa. La richiesta viene elaborata correttamente, non modifica lo stato della versione, ma modifica l'ETag della versione. Un altro chiamante, che utilizza l'ETag precedente, tenta di disattivare la stessa versione. La richiesta non va a buon fine perché abbiamo rilevato l'intenzione di attivare la versione precedente alla richiesta di disattivazione nell'ETag modificato.
La risorsa etag
viene restituita nella risposta ogni volta che una risorsa (Secret)
o SecretVersion).
Utilizzo
Elimina un secret con Etag
Questo esempio mostra l'utilizzo di ETag durante l'eliminazione di un secret. Se il secret è stato modificato da un'altra procedura, l'operazione di eliminazione non andrà a buon fine.
gcloud
Per utilizzare Secret Manager nella riga di comando, devi prima Installa o esegui l'upgrade alla versione 378.0.0 o successive di Google Cloud CLI. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.
L'etag deve includere le virgolette. Ad esempio, se il valore etag
era "abc"
, il valore con escape shell sarebbe "\"abc\""
.
gcloud beta secrets delete "SECRET_ID" \
--etag "ETAG"
Puoi anche specificare gli ETag durante altre operazioni di mutazione dei secret:
API
In questi esempi viene utilizzato curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth stampa-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.
L'etag viene specificato come parte della stringa di query dell'URL e deve essere
Codificato come URL. Ad esempio, se il valore dell'etag era "abc"
, il valore codificato nell'URL
sarebbe %22abc%22
perché le virgolette sono codificate come %22
.
curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?etag=ETAG" \
--request "DELETE" \
--header "Authorization: Bearer ACCESS_TOKEN"
Aggiorna un secret con Etag
Questo dimostra l'utilizzo di ETag durante l'aggiornamento di un secret. Se il secret è stato modificato da un altro processo, l'operazione di aggiornamento non andrà a buon fine.
gcloud
Per utilizzare Secret Manager nella riga di comando, devi prima Installa o esegui l'upgrade alla versione 378.0.0 o successive di Google Cloud CLI. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.
L'etag deve includere le virgolette. Ad esempio, se il valore etag
era "abc"
, il valore con escape shell sarebbe "\"abc\""
.
gcloud beta secrets update "SECERT_ID" \
--update-labels "foo=bar" \
--etag "ETAG"
Puoi anche specificare gli ETag durante altre operazioni di mutazione dei secret:
API
Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth stampa-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.
L'etag viene specificato come campo in Secret
e deve includere le virgolette di delimitazione. Ad esempio, se il valore dell'etag era "abc"
, il valore
Il valore con escape JSON sarebbe {"etag":"\"abc\""}
.
curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=labels" \
--request "PATCH" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{"etag":"ETAG", "labels":{"foo": "bar"}}'
Aggiornare una versione del secret con gli ETag
Questo dimostra l'utilizzo di etag durante l'aggiornamento di una versione di un secret. Se la versione del segreto è stata modificata da un altro processo, l'operazione di aggiornamento non andrà a buon fine.
gcloud
Per utilizzare Secret Manager sulla riga di comando, installa o esegui l'upgrade alla versione 378.0.0 o successive di Google Cloud CLI. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.
L'etag deve includere le virgolette. Ad esempio, se il valore etag era "abc"
, il valore con caratteri di escape della shell sarà "\"abc\""
.
gcloud beta secrets versions disable "VERSION_ID" \
--secret "SECRET_ID" \
--etag "ETAG"
Puoi anche specificare gli ETag durante altre operazioni di mutazione della versione del secret:
API
In questi esempi viene utilizzato curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth stampa-access-token. Su Compute Engine o GKE, devi autenticarti con l'ambito cloud-platform.
L'etag è specificato come campo in SecretVersion
e deve includere
tra virgolette. Ad esempio, se il valore dell'etag era "abc"
, il valore
Il valore con escape JSON sarebbe {"etag":"\"abc\""}
.
curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID:disable" \
--request "POST" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{"etag":"ETAG"}'
Passaggi successivi
- Scopri come configurare le pianificazioni della rotazione per i secret.
- Scopri come modificare i secret.
- Scopri come configurare le notifiche su un secret.