Saat melihat kebijakan izin, Anda mungkin melihat nama peran yang menyertakan
string withcond
, diikuti dengan nilai hash. Misalnya, Anda mungkin melihat
nama peran seperti roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8
.
Halaman ini menjelaskan kapan dan mengapa Anda melihat string withcond
dalam kebijakan
izin. Juga merekomendasikan tindakan yang harus Anda lakukan jika melihat string ini.
Versi kebijakan dan binding peran bersyarat
Kebijakan izinkan dapat ditampilkan dalam berbagai bentuk. Setiap formulir dikenal sebagai versi kebijakan izinkan.
Dalam kebijakan izinkan yang menggunakan versi 1
, beberapa binding peran dapat berisi
string withcond
dalam nama peran, yang diikuti dengan nilai hash:
{
"bindings": [
{
"members": [
"user:dana@example.com"
],
"role": "roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8"
}
],
"etag": "BwUjMhCsNvY=",
"version": 1
}
Format ini menunjukkan bahwa binding peran bersifat kondisional. Dengan kata lain, peran hanya diberikan jika kondisi tertentu terpenuhi.
Kebijakan izin versi 1
tidak menampilkan ketentuan ini. Jika Anda melihat string
withcond
dan nilai hash, berarti binding peran menyertakan kondisi yang
tidak dapat Anda lihat.
Solusi: Tentukan kebijakan versi 3
Untuk memastikan Anda dapat melihat dan memperbarui seluruh kebijakan izin, termasuk
kondisinya, Anda harus selalu menentukan versi 3
saat
mendapatkan atau menetapkan kebijakan izin. Untuk menentukan versi 3
,
selesaikan tugas di bagian berikut.
Mengupdate alat gcloud
Jika Anda menggunakan Google Cloud CLI, jalankan gcloud version
untuk memeriksa nomor versinya. Output-nya mencakup string yang mirip dengan Google Cloud CLI 279.0.0
.
Jika nomor versi kurang dari 263.0.0, jalankan gcloud components update
untuk mengupdate gcloud CLI. Pada versi 263.0.0 dan yang lebih baru, gcloud CLI secara otomatis menetapkan versi kebijakan izinkan yang mendukung kondisi.
Mengupdate library klien
Jika aplikasi Anda menggunakan pustaka klien, ikuti langkah-langkah berikut:
Temukan nama dan nomor versi untuk library klien, lalu periksa daftar library klien yang mendukung versi kebijakan izinkan.
Jika sudah menggunakan library klien versi terbaru dan mendukung versi kebijakan izin, Anda tidak perlu mengupdate library klien. Lanjutkan ke langkah berikutnya.
Jika Anda menggunakan library klien versi lama, dan versi yang lebih baru mendukung mengizinkan versi kebijakan, update library klien Anda ke versi terbaru.
Jika menggunakan library klien yang tidak mendukung izin versi kebijakan, Anda dapat menambahkan library klien lain yang mendukung versi kebijakan izinkan ke aplikasi Anda. Gunakan library klien tersebut untuk menangani kebijakan izinkan. Atau, Anda dapat menggunakan IAM REST API secara langsung.
Perbarui kode apa pun di aplikasi Anda yang mendapatkan dan menetapkan kebijakan izinkan:
- Saat Anda mendapatkan kebijakan izinkan, selalu
tentukan versi
3
dalam permintaan. Saat Anda menetapkan kebijakan izinkan, selalu setel
version
di bidang kebijakan izinkan untuk3
, dan sertakanetag
lapangan dalam permintaan Anda.
- Saat Anda mendapatkan kebijakan izinkan, selalu
tentukan versi
Mengupdate panggilan REST API
Jika aplikasi Anda menggunakan IAM REST API secara langsung, update kode apa pun yang mendapatkan dan menetapkan kebijakan yang diizinkan:
- Saat Anda mendapatkan kebijakan izinkan, selalu
tentukan versi
3
dalam permintaan. Saat Anda menetapkan kebijakan izinkan, selalu setel
version
di bidang kebijakan izinkan untuk3
, dan sertakanetag
lapangan dalam permintaan Anda.
Memperbarui alat pengelolaan untuk kebijakan
Jika Anda menyimpan salinan lokal kebijakan izin—misalnya, jika Anda menyimpannya di sistem kontrol versi dan memperlakukannya sebagai kode—pastikan semua alat yang Anda gunakan memenuhi kriteria berikut:
- Semua permintaan untuk mendapatkan atau menyetel kebijakan izinkan menentukan versi
3
- Semua permintaan untuk menetapkan kebijakan izinkan menyertakan kolom
etag
dalam permintaan
Jika alat tidak memenuhi kriteria ini, periksa versi terbaru alat tersebut.
Selain itu, pastikan alat pengelolaan Anda mempertahankan pemberian peran bersyarat, bukan menambahkan pemberian peran duplikat yang tidak menyertakan kondisi. Misalnya, perhatikan skenario berikut ini:
Anda memberikan peran Buat Akun Layanan (
roles/iam.serviceAccountCreator
) kepada penggunavikram@example.com
di foldermy-folder
. Kebijakan izinkan untuk folder tersebut terlihat mirip dengan contoh ini:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator" } ], "etag": "BuFmmMhCsNY=", "version": 1 }
Anda menggunakan alat untuk mengambil kebijakan izinkan dan menyimpannya di sistem kontrol versi.
Anda menambahkan kondisi sehingga
vikram@example.com
hanya dapat membuat akun layanan selama minggu kerja normal, berdasarkan tanggal dan waktu di Berlin, Jerman. Kebijakan izinkan yang diperbarui terlihat mirip dengan contoh ini:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator", "condition": { "title": "work_week_only", "expression": "request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5" } } ], "etag": "BwWcR/B3tNk=", "version": 3 }
Anda menggunakan alat untuk mengambil kebijakan izinkan yang telah diperbarui. Alat ini tidak menentukan versi kebijakan izinkan saat meminta kebijakan izinkan, sehingga Anda menerima kebijakan izinkan versi
1
dengan nama peran yang diubah:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379" } ], "etag": "BwWcR/B3tNk=", "version": 1 }
Pada tahap ini, alat pengelolaan dapat memutuskan bahwa binding dari
vikram@example.com
ke peran roles/iam.serviceAccountCreator
telah
hilang, dan harus memulihkan binding peran asli ke kebijakan
izin:
Hindari: Binding peran tambahan tanpa kondisi
{
"bindings": [
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379"
},
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator"
}
],
"etag": "BwWd3HjhKxE=",
"version": 1
}
Perubahan ini salah. Hal ini memberikan peran
roles/iam.serviceAccountCreator
ke vikram@example.com
, terlepas dari hari
dalam seminggu. Akibatnya, kondisi pada binding peran pertama tidak berpengaruh.
Jika alat pengelolaan Anda mencoba membuat perubahan seperti ini, jangan setujui perubahan tersebut. Sebagai gantinya, Anda harus mengupdate alat pengelolaan untuk menentukan versi
3
dalam permintaan.
Langkah berikutnya
- Pelajari kebijakan izin lebih lanjut.
- Cari tahu cara menentukan versi kebijakan izinkan saat Anda mendapatkan kebijakan izin atau menetapkan kebijakan izin.
- Pahami cara memberikan akses secara bersyarat dengan Kondisi IAM.