Mengontrol akses dengan IAM Conditions
Dokumen ini menjelaskan cara menggunakan IAM Conditions untuk mengontrol akses ke resource BigQuery.
Dengan IAM Conditions, Anda dapat memberikan akses ke resource BigQuery hanya jika kondisi tertentu terpenuhi. Misalnya, Anda dapat memberikan akses ke resource untuk durasi terbatas atau secara berkala selama jam-jam tertentu. Anda dapat menambahkan Kondisi IAM di level resource organisasi, folder, project, dan set data. Kebijakan izin dengan ketentuan diwarisi oleh resource turunan. Untuk mengetahui informasi selengkapnya tentang tingkat resource, lihat hierarki resource.
Kondisi IAM berguna untuk memberikan izin Identity and Access Management (IAM) ke banyak resource terkait secara bersamaan, termasuk resource yang belum ada. Untuk memberikan izin ke grup resource BigQuery yang tidak terkait, pertimbangkan untuk menggunakan tag 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 cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk menerapkan Kondisi IAM ke resource BigQuery. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk menerapkan Kondisi IAM ke resource BigQuery:
-
Menetapkan akses IAM bersyarat di tingkat project:
resourcemanager.projects.setIamPolicy
-
Tetapkan 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 di set data
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Di panel Explorer, luaskan project Anda dan pilih set data.
Klik > Permissions.
SharingDi samping peran terkait, klik condition:
TITLE
untuk melihat kondisi untuk peran tersebut.
bq
Untuk melihat atau memperbarui kebijakan akses kondisional 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 dalam 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
di 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, lihat 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 Explorer, luaskan project Anda dan pilih set data.
Di panel detail, klik > Permissions.
SharingKlik
Add Principal.Di kolom New principals, masukkan akun utama.
Di daftar Select a role, pilih peran yang telah ditetapkan atau peran khusus.
Klik Tambahkan kondisi IAM.
Tambahkan kondisi ke kolom
condition
menggunakan atribut kondisi.Di panel Tambahkan kondisi IAM, klik Simpan.
Di panel Berikan akses ke
DATASET
, klik Simpan.
bq
Untuk melihat atau memperbarui kebijakan akses kondisional di Cloud Shell, Anda harus menggunakan Cloud Shell versi 503.0.0 atau yang lebih baru.
Untuk memberikan akses kondisional 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
ke 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
resource set data.
Untuk set data yang memiliki kebijakan akses bersyarat, pengguna dapat memperbarui
setelan akses bersyarat 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 Explorer, luaskan project Anda dan pilih set data.
Di panel detail, klik > Permissions.
SharingPilih akun utama yang aksesnya ingin Anda cabut.
Klik
Delete.Pada dialog Hapus akun utama?, klik Hapus.
bq
Untuk melihat atau memperbarui kebijakan akses kondisional di Cloud Shell, Anda harus menggunakan Cloud Shell versi 503.0.0 atau yang lebih baru.
Untuk menghapus akses kondisional ke set data menggunakan Cloud Shell, ikuti petunjuk di Mencabut akses ke set data.
Anda dapat menghapus entri dengan kondisi dari bagian access
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
dari resource set data.
Untuk set data yang memiliki kebijakan akses bersyarat, pengguna dapat memperbarui
setelan akses bersyarat menggunakan alur baca, ubah, dan update
standar tanpa menentukan parameter permintaan accessPolicyVersion
.
Atribut kondisi
Anda dapat menetapkan Kondisi IAM 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 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 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 aksesnya Anda berikanROUTINE_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.service
untuk akurasi yang lebih tinggi. Karena jenis yang tidak didukung diwakili oleh string kosong, kondisi negatif mungkin cocok dengan berbagai resource. Untuk mengetahui informasi selengkapnya, lihat kondisi negatif. - Kondisi IAM tingkat set data hanya boleh digunakan untuk peran yang berlaku untuk 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.user
ataubigquery.jobUser
. - Jangan gunakan kondisi
resource.type == 'bigquery.googleapis.com/Dataset'
untuk kebijakan tingkat set data, karena tidak memengaruhi otorisasi. Atribut ini dimaksudkan untuk mengontrol akses ke resource sub-set data seperti tabel, tampilan, rutinitas, dan model. - Sertakan
resource.type
,resource.name
, danresource.service
dalam 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.startsWith
dengan 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.startsWith
untuk 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 pada 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 izin tampilan yang diizinkan, rutinitas yang diotorisasi, atau set data yang diizinkan dengan Kondisi IAM.
- Jika
accessPolicyVersion
yang tidak kompatibel digunakan saat melihat resource dengan kondisi, binding mungkin berisiwithcond
diikuti dengan nilai hash. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalahwithcond
dalam kebijakan dan penetapan peran. - Pengguna dengan akses kondisional ke set data atau tabel tidak dapat mengubah izin untuk resource tersebut melalui konsol Google Cloud. Perubahan izin hanya didukung melalui alat bq dan BigQuery API.
- Kontrol akses tingkat baris dan tingkat kolom tidak didukung secara langsung melalui Kondisi IAM. 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 kondisional tidak dapat menjalankan fungsi karakter pengganti tabel.
Contoh
Berikut adalah contoh kasus penggunaan untuk Kondisi IAM 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 Google Cloud Console 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.