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:
- projects.secrets.patch
- projects.secrets.delete
- projects.secrets.versions.enable
- projects.secrets.versions.disable
- projects.secrets.versions.destroy
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, memperbarui versi secret tidak memengaruhi secret ETag, dan sebaliknya.
Pembaruan resource tanpa operasi juga akan memperbarui ETag resource. Misalnya, pertimbangkan skenario berikut: Pemanggil mengeluarkan permintaan untuk mengaktifkan versi secret yang sudah diaktifkan, tanpa sepengetahuan mereka. Permintaan berhasil diproses, tidak mengubah status versi, tetapi mengubah ETag versi. Pemanggil lain, yang menggunakan ETag lama, mencoba menonaktifkan versi yang sama. Permintaan mereka gagal, karena kami menangkap intent untuk mengaktifkan versi sebelum permintaan penonaktifan di ETag yang diubah.
Resource etag
ditampilkan dalam respons setiap kali resource (Secret
atau SecretVersion) disertakan.
Penggunaan
Menghapus secret dengan etag
Ini menunjukkan penggunaan etag saat menghapus secret. Jika secret telah diubah oleh proses lain, operasi penghapusan akan gagal.
gcloud
Untuk menggunakan Secret Manager di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi 378.0.0 atau yang lebih tinggi. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Etag harus menyertakan tanda kutip di sekitarnya. Misalnya, jika nilai etag adalah "abc"
, nilai yang di-escape shell akan menjadi "\"abc\""
.
gcloud beta secrets delete "SECRET_ID" \
--etag "ETAG"
Anda juga dapat menentukan etag selama operasi mutasi secret lainnya:
API
Contoh ini menggunakan curl untuk menunjukkan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Etag ditentukan sebagai bagian dari string kueri 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
.
curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?etag=ETAG" \
--request "DELETE" \
--header "Authorization: Bearer ACCESS_TOKEN"
Memperbarui secret dengan etag
Ini menunjukkan penggunaan etags saat memperbarui secret. Jika secret telah diubah oleh proses lain, operasi update akan gagal.
gcloud
Untuk menggunakan Secret Manager di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi 378.0.0 atau yang lebih tinggi. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Etag harus menyertakan tanda kutip di sekitarnya. Misalnya, jika nilai etag adalah "abc"
, nilai yang di-escape shell akan menjadi "\"abc\""
.
gcloud beta secrets update "SECERT_ID" \
--update-labels "foo=bar" \
--etag "ETAG"
Anda juga dapat menentukan etag selama operasi mutasi secret lainnya:
API
Contoh ini menggunakan curl untuk menunjukkan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
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\""}
.
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"}}'
Memperbarui versi secret dengan etag
Ini menunjukkan penggunaan etag saat memperbarui versi secret. Jika versi secret telah diubah oleh proses lain, operasi update akan gagal.
gcloud
Untuk menggunakan Secret Manager di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi 378.0.0 atau yang lebih tinggi. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Etag harus menyertakan tanda kutip di sekitarnya. Misalnya, jika nilai etag adalah "abc"
, nilai yang di-escape shell akan menjadi "\"abc\""
.
gcloud beta secrets versions disable "VERSION_ID" \
--secret "SECRET_ID" \
--etag "ETAG"
Anda juga dapat menentukan etag selama operasi mutasi versi secret lainnya:
API
Contoh ini menggunakan curl untuk menunjukkan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
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\""}
.
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"}'
Langkah selanjutnya
- Pelajari cara menyiapkan jadwal rotasi untuk secret.
- Pelajari cara mengedit secret.
- Pelajari cara menyiapkan notifikasi pada secret.