Secret Manager mendukung penggunaan tag entity (ETag) untuk kontrol konkurensi optimis.
Dalam beberapa kasus, dua proses yang mengupdate resource yang sama secara paralel dapat saling mengganggu, dengan proses yang terakhir menimpa upaya proses sebelumnya.
ETag menyediakan sarana untuk kontrol konkurensi optimis dengan memungkinkan proses melihat apakah resource telah diubah sebelum mengambil tindakan pada resource tersebut.
Menggunakan ETag dengan Secret Manager
Permintaan perubahan resource berikut mendukung ETag:
Dalam permintaan secrets.patch, ETag permintaan disematkan dalam data
Secret. Semua permintaan lainnya menerima parameter etag
opsional.
Jika ETag diberikan dan cocok dengan ETag resource saat ini, permintaan akan berhasil; jika tidak, permintaan akan gagal dengan error FAILED_PRECONDITION
dan kode status HTTP 400. Jika ETag tidak diberikan, permintaan akan dilanjutkan tanpa memeriksa nilai ETag yang saat ini disimpan.
ETag resource dibuat saat pembuatan resource (projects.secrets.create, projects.secrets.addVersion) dan diperbarui untuk setiap permintaan perubahan yang tercantum di atas. Permintaan modifikasi hanya memperbarui ETag resource yang berlaku. Artinya, mengupdate versi secret tidak memengaruhi secret ETag, dan demikian pula, mengupdate ETag tidak memengaruhi versi secret.
Meskipun pembaruan tidak mengubah status resource, pembaruan tersebut tetap memperbarui ETag resource.
Perhatikan contoh berikut:
-
Pengguna 1 mencoba mengaktifkan versi secret tanpa menyadari bahwa versi tersebut sudah diaktifkan. Sistem memproses hal ini, tanpa mengubah apa pun kecuali ETag versi.
-
Pengguna 2, yang menggunakan ETag lama, mencoba menonaktifkan versi tersebut.
-
Hal ini gagal karena sistem mengenali ETag yang lebih baru, yang menunjukkan intent terbaru untuk tetap mengaktifkan versi.
Bahkan update yang tampaknya kecil pun penting karena perubahan ETag. Hal ini memastikan konsistensi data, terutama dengan beberapa pengguna atau sistem yang berinteraksi dengan resource yang sama.
Resource etag
ditampilkan dalam respons setiap kali resource
(Secret atau
SecretVersion)
disertakan.
Menghapus secret dengan ETag
Bagian ini menjelaskan penggunaan ETag saat menghapus secret. Jika secret telah diubah oleh proses lain, operasi penghapusan akan gagal.
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang sepenuhnya memenuhi syarat untuk secret.
- LOCATION: Google Cloud lokasi secret.
- ETAG: tag entity secret. ETag harus menyertakan tanda kutip di sekitarnya.
Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape shell akan menjadi"\"abc\""
.
Jalankan perintah berikut:
Linux, macOS, atau 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
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION: Google Cloud lokasi secret.
- PROJECT_ID: project ID Google Cloud .
- SECRET_ID: ID secret atau ID yang sepenuhnya memenuhi syarat untuk secret.
- ETAG: tag entity secret. ETag ditentukan sebagai bagian dari querystring URL dan harus dienkode URL. Misalnya, jika nilai ETag adalah
"abc"
, nilai yang dienkode URL akan menjadi%22abc%22
karena karakter tanda petik dienkode sebagai%22
.
Metode HTTP dan URL:
DELETE https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?etag=ETAG
Isi JSON permintaan:
{}
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
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
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$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
Anda akan melihat respons JSON seperti berikut:
{}
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Secret Manager Go SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Secret Manager Java SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Secret Manager Python SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Memperbarui secret dengan ETag
Bagian ini menjelaskan penggunaan ETag saat memperbarui secret. Jika secret telah diubah oleh proses lain, operasi update akan gagal.
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang sepenuhnya memenuhi syarat untuk secret.
- LOCATION: Google Cloud lokasi secret.
- KEY: nama label.
- VALUE: nilai label yang sesuai.
- ETAG: tag entity secret. ETag harus menyertakan tanda kutip di sekitarnya.
Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape shell akan menjadi"\"abc\""
.
Jalankan perintah berikut:
Linux, macOS, atau 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"
Respons akan menampilkan secret.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION: Google Cloud lokasi secret.
- PROJECT_ID: project ID Google Cloud .
- SECRET_ID: ID secret atau ID yang sepenuhnya memenuhi syarat untuk secret.
- ETAG: tag entity secret. ETag ditentukan sebagai kolom di
Secret
dan harus menyertakan tanda kutip di sekitarnya. Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape JSON akan menjadi{"etag":"\"abc\""}
. - KEY: nama label.
- VALUE: nilai label yang sesuai.
Metode HTTP dan URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=labels
Isi JSON permintaan:
{"etag":"ETAG", "labels":{"KEY": "VALUE"}}
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
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
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$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
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "labels": { "KEY": "VALUE" }, "etag": "\"162145a4f894d5\"" }
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Secret Manager Go SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Secret Manager Java SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Secret Manager Python SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Memperbarui versi secret dengan ETag
Bagian ini menjelaskan penggunaan ETag saat memperbarui versi secret. Jika versi secret telah diubah oleh proses lain, operasi update akan gagal.
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- VERSION_ID: ID versi secret.
- SECRET_ID: ID secret atau ID yang sepenuhnya memenuhi syarat untuk secret.
- LOCATION: Google Cloud lokasi secret.
- ETAG: tag entity. ETag harus menyertakan tanda kutip di sekitarnya.
Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape shell akan menjadi"\"abc\""
.
Jalankan perintah berikut:
Linux, macOS, atau 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"
Respons akan menampilkan secret.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION: Google Cloud lokasi secret
- PROJECT_ID: project ID Google Cloud
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- VERSION_ID: ID versi secret
- ETAG: tag entity versi secret. ETag ditentukan sebagai kolom di
SecretVersion
dan harus menyertakan tanda kutip di sekitarnya. Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape JSON akan menjadi{"etag":"\"abc\""}
.
Metode HTTP dan URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable
Isi JSON permintaan:
{"etag":"ETAG"}
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
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
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$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
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID", "createTime": "2024-09-04T06:41:57.859674Z", "state": "DISABLED", "etag": "\"1621457b3c1459\"" }
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Secret Manager Go SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Secret Manager Java SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Secret Manager Python SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Contoh kode di sini menjelaskan cara mengaktifkan versi secret dengan ETag. Anda juga dapat menentukan ETag selama operasi mutasi secret lainnya, seperti saat menonaktifkan atau menghancurkan versi secret. Lihat contoh kode untuk Secret Manager.