Mengontrol akses dengan IAM Conditions
IAM Conditions memungkinkan Anda memberikan akses ke resource BigQuery hanya jika persyaratan tertentu terpenuhi, seperti untuk durasi terbatas atau selama jam yang dijadwalkan. Anda dapat menerapkan akses bersyarat di tingkat organisasi, folder, project, dan set data, dengan kebijakan izin yang otomatis diwarisi oleh resource turunan. Untuk mengetahui detail selengkapnya, lihat hierarki resource.
Aturan ini membantu Anda mengelola izin di beberapa resource terkait secara bersamaan, termasuk aset mendatang. Untuk mengelola akses bagi koleksi resource BigQuery yang tidak terkait, pertimbangkan untuk menggunakan tag Identity and Access Management (IAM).
Sebelum memulai
- Berikan peran IAM kepada pengguna yang berisi izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.
- Aktifkan IAM API.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menerapkan Kondisi IAM ke resource BigQuery, minta administrator Anda untuk memberi Anda peran IAM berikut:
-
Untuk project:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Untuk set data:
BigQuery Data Owner (
roles/bigquery.dataOwner)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk menerapkan IAM Condition ke resource BigQuery. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk menerapkan Kondisi IAM ke resource BigQuery:
-
Tetapkan akses IAM bersyarat di level project:
resourcemanager.projects.setIamPolicy -
Menetapkan akses IAM bersyarat pada set data:
-
bigquery.datasets.setIamPolicy -
bigquery.datasets.update
-
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Jika berencana menggunakan IAM Conditions di seluruh organisasi, Anda juga memerlukan izin untuk mengelola kebijakan organisasi.Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, baca Pengantar IAM.
Mengaktifkan IAM API
Untuk mengaktifkan IAM API, pilih salah satu opsi berikut:
Konsol
Buka halaman Identity and Access Management (IAM) API, lalu aktifkan API tersebut.
gcloud
Jalankan perintah gcloud services enable:
gcloud services enable iam.googleapis.com
Melihat kebijakan akses bersyarat pada set data
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Di panel kiri, klik Explorer:

Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.
Di panel Explorer, luaskan project Anda, klik Datasets, lalu pilih set data.
Klik Sharing > Permissions.
Di samping peran terkait, klik condition:
TITLEuntuk melihat kondisi peran tersebut.
bq
Untuk melihat atau memperbarui kebijakan akses bersyarat di Cloud Shell, Anda harus menggunakan Cloud Shell versi 503.0.0 atau yang lebih baru.
Untuk mendapatkan kebijakan akses yang ada dan menghasilkannya ke file lokal di JSON, gunakan
perintah bq show
di Cloud Shell:
bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE
Ganti kode berikut:
- PROJECT_ID: project ID Anda
- DATASET: nama set data Anda
- PATH_TO_FILE: jalur ke file JSON di komputer lokal Anda
Properti access dalam file JSON resource set data berisi kebijakan akses.
API
Untuk melihat kebijakan akses set data dengan kondisi, panggil
datasets.get dengan
accessPolicyVersion=3 sebagai parameter permintaan.
Properti access dalam resource set data berisi kebijakan akses.
Mengubah akses bersyarat pada resource
Bagian berikut menjelaskan cara menambahkan atau menghapus akses bersyarat ke berbagai resource.
Menambahkan kondisi ke organisasi, folder, atau project
Untuk menambahkan akses bersyarat ke organisasi, folder, atau project di BigQuery, baca artikel Mengizinkan kebijakan dengan kondisi. Saat membuat kondisi, lihat tabel format atribut.
Menambahkan akses bersyarat ke set data
Untuk menambahkan kondisi ke set data, pilih salah satu metode berikut. Saat Anda membuat kondisi, lihat tabel format atribut.
Konsol
Buka halaman BigQuery.
Di panel kiri, klik Explorer:

Di panel Explorer, luaskan project Anda, klik Datasets, lalu pilih set data.
Di panel detail, klik Share > Permissions.
Klik Add Principal.
Di kolom New principals, masukkan akun utama.
Di daftar Select a role, pilih peran yang telah ditetapkan atau peran khusus.
Klik Add IAM condition.
Tambahkan kondisi ke kolom
conditionmenggunakan atribut kondisi.Di panel Add IAM condition, klik Save.
Di panel Grant access to
DATASET, klik Save.
bq
Untuk melihat atau memperbarui kebijakan akses bersyarat di Cloud Shell, Anda harus menggunakan Cloud Shell versi 503.0.0 atau yang lebih baru.
Untuk memberikan akses bersyarat ke set data menggunakan Cloud Shell, ikuti petunjuk untuk memberikan akses ke set data.
Anda dapat menambahkan kondisi akses bersyarat ke bagian access pada file JSON set data.
Misalnya, penambahan berikut ke bagian access pada file JSON set data akan memberikan peran roles/bigquery.dataViewer kepada cloudysanfrancisco@gmail.com hingga 31 Desember 2032:
"access": [ { "role": "roles/bigquery.dataViewer", "userByEmail": "cloudysanfrancisco@gmail.com", "condition": { "title": "Grant roles/bigquery.dataViewer until 2033", "description": "Role expires on December 31, 2032.", "expression": "request.time < timestamp('2032-12-31T12:00:00Z')" } } ]
API
Untuk memberikan akses bersyarat ke set data menggunakan BigQuery API, ikuti petunjuk untuk memberikan akses ke set data dengan accessPolicyVersion=3 dalam parameter permintaan.
Anda dapat menambahkan entri dengan kondisi akses ke properti access.condition dari resource set data.
Untuk set data yang memiliki kebijakan akses bersyarat, pengguna dapat memperbarui
setelan akses tanpa syarat menggunakan alur baca, ubah, dan update
standar tanpa menentukan parameter permintaan accessPolicyVersion.
Menghapus akses bersyarat dari set data
Untuk menghapus kondisi dari set data, pilih salah satu metode berikut. Saat Anda membuat kondisi, lihat tabel format atribut.
Konsol
Buka halaman BigQuery.
Di panel kiri, klik Explorer:

Di panel Explorer, luaskan project Anda, klik Datasets, lalu pilih set data.
Di panel detail, klik Share > Permissions.
Pilih akun utama yang aksesnya ingin Anda cabut.
Klik Delete.
Pada dialog Delete principal?, klik Delete.
bq
Untuk melihat atau memperbarui kebijakan akses bersyarat di Cloud Shell, Anda harus menggunakan Cloud Shell versi 503.0.0 atau yang lebih baru.
Untuk menghapus akses bersyarat ke set data menggunakan Cloud Shell, ikuti petunjuk di bagian Mencabut akses ke set data.
Anda dapat menghapus entri dengan kondisi dari bagian access pada file JSON set data.
API
Untuk mencabut akses bersyarat ke set data menggunakan BigQuery API, ikuti petunjuk untuk mencabut akses ke set data dengan accessPolicyVersion=3 dalam parameter permintaan.
Anda dapat menghapus entri dengan kondisi dari properti access resource set data.
Untuk set data yang memiliki kebijakan akses bersyarat, pengguna dapat memperbarui
setelan akses tanpa syarat menggunakan alur baca, ubah, dan update
standar tanpa menentukan parameter permintaan accessPolicyVersion.
Atribut kondisi
Anda dapat menetapkan IAM Condition pada resource BigQuery, berdasarkan atribut berikut:
request.time: waktu saat pengguna mencoba mengakses resource BigQuery. Untuk mengetahui detail dan contoh selengkapnya, lihat Atribut tanggal/waktu.resource.name: jalur resource BigQuery. Untuk formatnya, lihat tabel dalam Format atribut.resource.type: jenis resource BigQuery. Untuk formatnya, lihat tabel dalam Format atribut.resource.service: layanan Google Cloud yang digunakan resource BigQuery. Untuk mengetahui formatnya, lihat tabel dalam Format atribut.resource.tags: tag yang dilampirkan ke resource BigQuery. Tag hanya didukung di resource set data, tabel, dan tampilan BigQuery. Untuk mengetahui formatnya, lihat tabel dalam Format atribut dan dalam dokumen IAM.
Format atribut
Saat Anda membuat kondisi untuk set data BigQuery, gunakan format berikut:
| Atribut | Nilai |
|---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Mendukung hasTagKey, hasTagKeyId, matchTag, dan matchTagId. Untuk mengetahui informasi selengkapnya, lihat Tag resource. |
Saat Anda membuat kondisi untuk tabel dan tampilan BigQuery, gunakan format berikut:
| Atribut | Nilai |
|---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Mendukung hasTagKey, hasTagKeyId, matchTag, dan matchTagId. Untuk mengetahui informasi selengkapnya, lihat Tag resource. |
Saat Anda membuat kondisi untuk rutinitas BigQuery, gunakan format berikut:
| Atribut | Nilai |
|---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
Saat Anda membuat kondisi untuk model BigQuery, gunakan format berikut:
| Atribut | Nilai |
|---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
Ganti kode berikut:
PROJECT_ID: ID project yang berisi resource yang aksesnya Anda berikanDATASET_ID: ID set data yang aksesnya Anda berikanTABLE_ID: ID tabel atau tampilan yang Anda beri aksesROUTINE_ID: ID rutinitas yang Anda beri aksesMODEL_ID: ID model yang Anda beri akses
Praktik terbaik kondisi
Saat Anda mem-build kondisi di BigQuery, gunakan praktik terbaik berikut:
- Sebaiknya gunakan kondisi positif untuk
resource.type,resource.name, danresource.serviceagar lebih akurat. Karena jenis yang tidak didukung direpresentasikan oleh string kosong, kondisi negatif mungkin cocok dengan berbagai resource. Untuk mengetahui informasi selengkapnya, lihat kondisi negatif. - Kondisi IAM level set data hanya boleh digunakan untuk peran yang berlaku pada resource dalam set data, seperti tabel, tampilan, model, dan rutinitas.
Peran ini tidak boleh digunakan untuk memberikan peran yang beroperasi di tingkat set data atau project, seperti
bigquery.userataubigquery.jobUser. - Jangan gunakan kondisi
resource.type == 'bigquery.googleapis.com/Dataset'untuk kebijakan level set data, karena tidak berpengaruh pada otorisasi. Atribut ini dimaksudkan untuk mengontrol akses ke resource sub-set data seperti tabel, tampilan, rutinitas, dan model. - Sertakan
resource.type,resource.name, danresource.servicedalam kondisi Anda, meskipun tingkat kekhususan tersebut tidak diperlukan. Praktik ini membantu mempertahankan kondisi saat resource dalam alur kerja Anda berubah, sehingga resource lain tidak akan disertakan secara tidak sengaja di masa mendatang. - Saat memberikan izin, sertakan serangkaian izin sesedikit mungkin untuk memastikan Anda tidak memberikan akses yang terlalu permisif secara tidak sengaja.
- Gunakan
resource.name.startsWithdengan hati-hati. Jalur tabel dan tampilan BigQuery diawali dengan project ID dan ID set data induknya. Kondisi yang tidak cukup spesifik dapat memberikan terlalu banyak akses. Namun, Anda dapat menggunakan atributresource.name.startsWithuntuk memungkinkan pengguna menjalankan kueri karakter pengganti pada tabel. Misalnya, akses yang diberikan menggunakan kondisiresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")memungkinkan pengguna menjalankan kueriSELECT * FROM my_dataset.table_prefix*. - Jangan tambahkan kondisi untuk resource BigQuery selain set data, tabel, tampilan, rutinitas, dan model.
- Pastikan Anda memberikan izin yang tepat pada resource yang benar. Misalnya, izin untuk membuat daftar resource (
bigquery.RESOURCE.list) harus diberikan di level induk, tetapi izin untuk menghapus resource (bigquery.RESOURCE.delete) harus diberikan di level resource. Penghapusan set data, tempat semua resource yang ada juga akan dihapus, memerlukan izin penghapusan tabel, model, dan rutin pada set data tersebut. - Perlu diketahui bahwa snapshot tabel dan perjalanan waktu tidak memengaruhi izin.
Kondisi negatif
Kondisi negatif seperti resource.name != resource dapat secara tidak sengaja memberikan akses yang terlalu permisif. Resource BigQuery yang tidak didukung memiliki atribut resource kosong, yang berarti resource tersebut cocok dengan semua kondisi negatif. Resource dalam layanan di luar BigQuery juga mungkin cocok dengan kondisi negatif.
Selain itu, kondisi negatif menimbulkan masalah saat pengguna menjalankan kueri dengan karakter pengganti. Misalnya, pertimbangkan kondisi negatif resource.name != /projects/my_project/datasets/my_dataset/tables/secret. Kondisi ini tampaknya memberikan akses ke semua resource, kecuali tabel bernama secret. Namun, pengguna tetap dapat membuat kueri tabel tersebut menggunakan kueri karakter pengganti, seperti SELECT * from my_project.my_dataset.secre*;.
Selain itu, kondisi negatif pada tabel, rutinitas, dan model mungkin memberikan akses yang terlalu permisif ke set data induknya. Kemudian, pengguna mungkin dapat menghapus resource tersebut karena izin penghapusan dikelola di tingkat set data.
Batasan
- Anda tidak dapat menambahkan pemberian tampilan yang diizinkan, rutinitas yang diizinkan, atau set data yang diizinkan dengan IAM Conditions.
- Jika
accessPolicyVersionyang tidak kompatibel digunakan saat melihat resource dengan kondisi, binding mungkin berisiwithcondyang diikuti dengan nilai hash. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalahwithconddalam kebijakan dan binding peran. - Pengguna dengan akses kondisional ke set data atau tabel tidak dapat mengubah izin untuk resource tersebut melalui konsol Google Cloud . Modifikasi izin hanya didukung melalui alat bq dan BigQuery API.
- Kontrol akses tingkat baris dan tingkat kolom tidak didukung secara langsung melalui IAM Conditions. Namun, pengguna yang memiliki akses kondisional dapat memberikan perannya sebagai Admin BigQuery (
roles/bigquery.admin) pada tabel, kemudian mengubah kebijakan akses baris dan kolom. - Perubahan pada kebijakan IAM dapat memerlukan waktu hingga lima menit untuk diterapkan.
- Pengguna dengan akses kondisional mungkin tidak dapat membuat kueri tampilan
INFORMATION_SCHEMA. - Pengguna yang hanya memiliki akses tabel bersyarat tidak dapat menjalankan fungsi karakter pengganti tabel.
Contoh
Berikut adalah contoh kasus penggunaan untuk IAM Conditions di BigQuery.
Memberikan akses baca ke tabel tertentu
Contoh ini memberikan peran BigQuery Data Viewer kepada cloudysanfrancisco@gmail.com untuk tabel table_1 di set data dataset_1. Dengan peran ini, pengguna dapat membuat kueri tabel dan mengaksesnya melalui alat bq. Pengguna tidak dapat melihat tabel di konsol Google Cloud karena tidak memiliki izin bigquery.tables.list di set data tersebut.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
Memberikan akses daftar ke set data tertentu
Contoh ini memberikan peran BigQuery Metadata Viewer kepada cloudysanfrancisco@gmail.com di set data dataset_2. Dengan peran ini, pengguna dapat mencantumkan semua resource dalam set data, tetapi pengguna tidak dapat menjalankan kueri apa pun pada resource tersebut.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
Memberikan akses kepada pemilik ke semua tabel di semua set data dengan awalan tertentu
Contoh ini memberikan peran Pemilik Data BigQuery kepada cloudysanfrancisco@gmail.com pada semua tabel di semua set data yang dimulai dengan awalan public_:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
Memberi pemilik akses ke semua tabel, model, dan rutinitas di semua set data yang memiliki awalan tertentu
Contoh ini memberikan peran Pemilik Data BigQuery kepada cloudysanfrancisco@gmail.com di semua tabel, model, dan rutinitas di semua set data yang dimulai dengan awalan general_:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
Langkah berikutnya
- Pelajari lebih lanjut cara mengonfigurasi akses sementara menggunakan IAM Conditions.
- Pelajari lebih lanjut cara mengonfigurasi akses berbasis resource menggunakan IAM Conditions.