Secret Manager mendukung penggunaan tag entity (ETag) untuk kontrol konkurensi optimis.
Dalam beberapa kasus, dua proses yang memperbarui resource yang sama secara paralel dapat mengganggu satu sama lain, di mana proses yang terakhir akan menimpa upaya proses yang pertama.
ETag menyediakan sarana untuk kontrol konkurensi optimis dengan memungkinkan proses untuk melihat apakah resource telah dimodifikasi sebelum mengambil tindakan pada resource tersebut.
Menggunakan ETag dengan Secret Manager
Permintaan modifikasi 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 modifikasi yang tercantum di atas. Permintaan modifikasi hanya memperbarui ETag resource yang berlaku. Artinya, memperbarui versi secret tidak memengaruhi ETag secret, dan begitu juga sebaliknya, memperbarui 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 rahasia tanpa menyadari bahwa versi tersebut sudah diaktifkan. Sistem memproses ini, dan hanya mengubah ETag versi.
-
Pengguna 2, yang menggunakan ETag lama, mencoba menonaktifkan versi.
-
Hal ini gagal karena sistem mengenali ETag yang lebih baru, yang menunjukkan maksud yang lebih baru untuk mengaktifkan versi tersebut.
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.
etag
resource 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 memenuhi syarat sepenuhnya 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 adalah"\"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: Google Cloud project ID.
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret.
- ETAG: tag entity secret. ETag ditentukan sebagai bagian dari string kueri URL
dan harus dienkode URL. Misalnya, jika nilai ETag adalah
"abc"
, nilai yang dienkode URL adalah%22abc%22
karena karakter kutipan 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 memenuhi syarat sepenuhnya 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 adalah"\"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 menampilkan rahasia.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION: Google Cloud lokasi secret.
- PROJECT_ID: Google Cloud project ID.
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret.
- ETAG: tag entity secret. ETag ditentukan sebagai kolom di
Secret
dan harus menyertakan tanda petik di sekitarnya. Misalnya, jika nilai ETag adalah
"abc"
, nilai yang di-escape JSON adalah{"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.
Contoh kode di sini menjelaskan cara menonaktifkan versi secret dengan ETag. Anda juga dapat menentukan ETag selama operasi mutasi rahasia lainnya, seperti saat mengaktifkan versi yang dinonaktifkan atau menghancurkan versi rahasia. Lihat contoh kode untuk Secret Manager.
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- VERSION_ID: ID versi secret.
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya 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 adalah"\"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 menampilkan rahasia.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION: Google Cloud lokasi secret
- PROJECT_ID: Google Cloud project ID
- 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 adalah{"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.