Pengantar keamanan tingkat baris BigQuery
Dokumen ini menjelaskan konsep keamanan tingkat baris, cara kerjanya di BigQuery, kapan harus menggunakan keamanan tingkat baris untuk mengamankan data Anda, dan detail lainnya.
Apa yang dimaksud dengan keamanan tingkat baris?
Keamanan tingkat baris memungkinkan Anda memfilter data dan memberikan akses ke baris tertentu dalam tabel berdasarkan kondisi pengguna yang memenuhi syarat.
BigQuery mendukung kontrol akses di tingkat project, set data, dan tabel, serta keamanan tingkat kolom melalui tag kebijakan. Keamanan tingkat baris memperluas prinsip hak istimewa terendah dengan mengaktifkan kontrol akses terperinci ke subset data dalam tabel BigQuery, melalui kebijakan akses tingkat baris.
Satu tabel dapat memiliki beberapa kebijakan akses tingkat baris. Kebijakan akses tingkat baris dapat ada berdampingan di tabel dengan keamanan tingkat kolom serta tingkat set data, tingkat tabel, dan kontrol akses tingkat project.
Cara kerja keamanan tingkat baris
Pada tingkat yang tinggi, keamanan tingkat baris melibatkan pembuatan kebijakan akses tingkat baris pada tabel BigQuery target. Kebijakan ini berfungsi sebagai filter untuk menyembunyikan atau menampilkan baris data tertentu, bergantung pada apakah pengguna atau grup tercantum dalam daftar yang diizinkan atau tidak. Setiap pengguna atau grup yang tidak secara spesifik disertakan dalam daftar yang diizinkan akan ditolak aksesnya.
Pengguna yang diotorisasi, dengan peran Identity and Access Management (IAM) BigQuery Admin atau BigQuery DataOwner, dapat membuat kebijakan akses tingkat baris di tabel BigQuery.
Saat membuat kebijakan akses tingkat baris, Anda menentukan tabel berdasarkan nama dan
pengguna atau grup mana (disebut grantee-list
) yang dapat mengakses data baris
tertentu. Kebijakan ini juga menyertakan data tempat Anda ingin memfilter, yang disebut
filter_expression
. filter_expression
berfungsi seperti klausa WHERE
dalam kueri standar.
Untuk mengetahui petunjuk cara membuat dan menggunakan kebijakan akses tingkat baris, lihat Mengelola keamanan tingkat baris.
Lihat referensi DDL untuk mengetahui sintaksis, penggunaan, dan opsi lengkap saat membuat kebijakan akses tingkat baris.
Contoh kasus penggunaan
Contoh berikut menunjukkan potensi kasus penggunaan untuk keamanan tingkat baris.
Memfilter data baris berdasarkan region
Pertimbangkan kasus saat tabel dataset1.table1
berisi baris yang dimiliki
region yang berbeda (ditunjukkan dengan kolom region
).
Anda dapat membuat dan mengisi tabel contoh menggunakan kueri berikut:
CREATE TABLE IF NOT EXISTS dataset1.table1 (partner STRING, contact STRING, country STRING, region STRING); INSERT INTO dataset1.table1 (partner, contact, country, region) VALUES ('Example Customers Corp', 'alice@examplecustomers.com', 'Japan', 'APAC'), ('Example Enterprise Group', 'bob@exampleenterprisegroup.com', 'Singapore', 'APAC'), ('Example HighTouch Co.', 'carrie@examplehightouch.com', 'USA', 'US'), ('Example Buyers Inc.', 'david@examplebuyersinc.com', 'USA', 'US');
Keamanan tingkat baris memungkinkan pemilik data atau administrator menerapkan kebijakan. Pernyataan berikut menerapkan kebijakan yang membatasi pengguna dalam grup email APAC agar hanya melihat partner dari wilayah APAC:
CREATE ROW ACCESS POLICY apac_filter ON dataset1.table1 GRANT TO ("group: sales-apac@example.com") FILTER USING (region="APAC" );
Perilaku yang dihasilkan adalah pengguna dalam grup sales-apac@example.com
hanya dapat
melihat baris yang memuat nilai region
APAC
.
Pernyataan berikut menerapkan kebijakan yang membatasi individu dan grup agar hanya melihat partner dari wilayah Amerika Serikat:
CREATE ROW ACCESS POLICY us_filter ON dataset1.table1 GRANT TO ("group:sales-us@example.com", "user: jon@example.com") FILTER USING (region="US");
Perilaku yang dihasilkan adalah pengguna dalam grup sales-us@example.com
dan
pengguna jon@example.com
hanya dapat melihat baris yang nilai region
-nya adalah US
.
Gambar berikut menunjukkan cara dua kebijakan akses sebelumnya membatasi pengguna dan grup mana yang dapat melihat baris mana dalam tabel:
Pengguna yang tidak berada dalam grup APAC
atau US
tidak akan melihat baris apa pun.
Memfilter data baris berdasarkan data sensitif
Sekarang, pertimbangkan kasus penggunaan yang berbeda, yaitu Anda memiliki tabel yang berisi informasi gaji.
Anda dapat membuat dan mengisi tabel contoh menggunakan kueri berikut:
CREATE OR REPLACE TABLE dataset1.table1 (name STRING, department STRING, salary INT64, email STRING); INSERT INTO dataset1.table1 ( name, department, salary, email) VALUES ('Jim D', 'HR', 100000, 'jim@example.com'), ('Anna K', 'Finance', 100000, 'anna@example.com'), ('Bruce L', 'Engineering', 100000, 'bruce@example.com'), ('Carrie F', 'Business', 100000, 'carrie@example.com');
Kebijakan akses baris dalam pernyataan berikut membatasi pembuatan kueri untuk anggota
domain perusahaan. Selain itu, penggunaan fungsi SESSION_USER()
hanya membatasi akses ke baris milik pengguna yang menjalankan kueri, berdasarkan alamat email penggunanya.
CREATE ROW ACCESS POLICY salary_personal ON dataset1.table1 GRANT TO ("domain:example.com") FILTER USING (Email=SESSION_USER());
Gambar berikut menunjukkan cara kebijakan akses baris membatasi tabel yang berisi informasi
gaji. Dalam contoh ini, pengguna bernama Jim, dengan alamat email jim@example.com
.
Memfilter data baris berdasarkan tabel pencarian
Untuk memberikan masukan atau meminta dukungan terkait fitur ini, kirim email ke bigquery-row-level-security-support@google.com.Dengan dukungan subkueri, kebijakan akses baris dapat mereferensikan tabel lain dan menggunakannya sebagai tabel pencarian. Data yang digunakan dalam aturan pemfilteran dapat disimpan dalam tabel dan satu kebijakan akses baris subkueri dapat menggantikan beberapa kebijakan akses baris yang dikonfigurasi. Untuk memperbarui kebijakan akses baris, Anda hanya perlu memperbarui tabel pencarian, yang menggantikan beberapa kebijakan akses baris. Anda tidak perlu memperbarui setiap kebijakan akses baris.
Kapan menggunakan keamanan tingkat baris vs. metode lainnya
Tampilan yang sah, kebijakan akses tingkat baris, dan menyimpan data dalam tabel terpisah semuanya memberikan tingkat keamanan, performa, dan kenyamanan yang berbeda. Memilih mekanisme yang tepat untuk kasus penggunaan Anda penting untuk memastikan tingkat keamanan yang tepat bagi data Anda.
Perbandingan dengan tampilan yang diotorisasi: kerentanan
Keamanan tingkat baris dan yang menerapkan akses tingkat baris dengan tampilan yang diotorisasi dapat memiliki kerentanan, jika digunakan dengan tidak benar.
Saat Anda menggunakan kebijakan tampilan yang sah atau akses tingkat baris untuk keamanan tingkat baris, sebaiknya pantau aktivitas mencurigakan menggunakan logging audit.
Side channels, seperti durasi kueri, dapat membocorkan informasi tentang baris yang berada di tepi shard penyimpanan. Serangan seperti itu mungkin memerlukan pengetahuan tentang cara sharding tabel, atau kueri dalam jumlah besar.
Untuk mengetahui informasi selengkapnya tentang cara mencegah serangan side-channel tersebut, lihat Praktik terbaik untuk keamanan tingkat baris.
Perbandingan tampilan yang diizinkan, keamanan tingkat baris, dan tabel terpisah
Tabel berikut membandingkan fleksibilitas, performa, dan keamanan tampilan yang diotorisasi, kebijakan akses tingkat baris, dan tabel terpisah.
Metode | Pertimbangan keamanan | Rekomendasi |
---|---|---|
Tampilan yang diberi otorisasi |
Direkomendasikan untuk fleksibilitas. Dapat rentan terhadap kueri yang dibuat dengan cermat, durasi kueri, dan jenis serangan side-channel lainnya. | Tampilan yang sah adalah pilihan yang tepat jika Anda perlu berbagi data dengan orang lain dan fleksibilitas serta performa itu penting. Misalnya, Anda dapat menggunakan tampilan yang diizinkan untuk berbagi data dalam grup kerja. |
Kebijakan akses tingkat baris | Direkomendasikan untuk menyeimbangkan fleksibilitas dan keamanan. Dapat rentan terhadap serangan side-channel durasi kueri. | Kebijakan akses tingkat baris adalah pilihan yang tepat jika Anda perlu berbagi data dengan orang lain dan ingin memberikan keamanan tambahan atas tampilan atau irisan tabel. Misalnya, Anda dapat menggunakan kebijakan akses tingkat baris untuk berbagi data dengan orang-orang yang semuanya menggunakan dasbor yang sama, meskipun beberapa orang memiliki akses ke lebih banyak data daripada yang lain. |
Tabel terpisah | Direkomendasikan untuk keamanan. Pengguna tidak dapat menyimpulkan data tanpa akses ke tabel. | Tabel terpisah adalah pilihan yang baik saat Anda perlu berbagi data dengan orang lain dan harus menjaga data tetap terisolasi. Misalnya, Anda dapat menggunakan tabel terpisah untuk berbagi data dengan partner dan vendor pihak ketiga, saat jumlah total baris harus dirahasiakan. |
Membuat dan mengelola kebijakan akses tingkat baris
Untuk mendapatkan informasi tentang cara membuat, mengupdate (membuat ulang), mencantumkan, melihat, dan menghapus kebijakan akses tingkat baris pada tabel, serta cara membuat kueri tabel dengan kebijakan akses tingkat baris, lihat Menggunakan keamanan akses tingkat baris.
Kuota
Untuk mengetahui informasi lebih lanjut tentang kuota dan batas keamanan tingkat baris, lihat Kuota dan batas BigQuery.
Harga
Keamanan tingkat baris disertakan dengan BigQuery tanpa biaya tambahan. Namun, kebijakan akses tingkat baris dapat memengaruhi biaya menjalankan kueri dengan cara berikut:
Penagihan tambahan dapat disebabkan oleh kebijakan akses tingkat baris, terutama kebijakan yang menyertakan subkueri yang mereferensikan tabel lain.
Filter kebijakan akses tingkat baris tidak berpartisipasi dalam pemangkasan kueri pada tabel yang dipartisi dan dikelompokkan. Hal ini tidak berarti bahwa kueri membaca lebih banyak data selama eksekusi kueri utama. Tindakan ini tidak memanfaatkan predikat kebijakan akses baris untuk memangkas lebih lanjut.
Dengan filter kebijakan akses tingkat baris, tidak semua filter pengguna diterapkan lebih awal. Hal ini dapat meningkatkan data yang dibaca dari tabel dan dapat membaca serta menagih lebih banyak baris.
Untuk mengetahui informasi selengkapnya tentang harga kueri BigQuery, lihat harga BigQuery.
Batasan
Untuk mengetahui informasi tentang batas keamanan tingkat baris, lihat Batas keamanan tingkat baris BigQuery. Bagian berikut mendokumentasikan batasan keamanan tingkat baris tambahan.
Batasan performa
Beberapa fitur BigQuery tidak dipercepat saat menggunakan tabel yang berisi kebijakan akses tingkat baris, seperti BigQuery BI Engine dan tampilan terwujud.
Keamanan tingkat baris tidak berpartisipasi dalam pruning kueri, yang merupakan fitur tabel berpartisi. Untuk mengetahui informasi selengkapnya, lihat Tabel berpartisi dan dikelompokkan. Batasan ini tidak memperlambat eksekusi kueri utama.
Anda mungkin mengalami sedikit penurunan performa saat membuat kueri tabel dengan keamanan tingkat baris.
Untuk mengetahui informasi lebih lanjut tentang cara keamanan tingkat baris berinteraksi dengan beberapa fitur dan layanan BigQuery, baca Menggunakan keamanan tingkat baris dengan fitur BigQuery lainnya.
Batasan lainnya
Fitur ini mungkin tidak tersedia saat menggunakan pemesanan yang dibuat dengan edisi BigQuery tertentu. Untuk mengetahui informasi selengkapnya tentang fitur apa saja yang diaktifkan di setiap edisi, lihat Pengantar edisi BigQuery.
Kebijakan akses baris tidak kompatibel dengan Legacy SQL. Kueri tabel dengan kebijakan akses tingkat baris harus menggunakan GoogleSQL. Kueri SQL lama ditolak dengan error.
Anda tidak dapat menerapkan kebijakan akses tingkat baris pada kolom JSON.
Anda tidak dapat menerapkan kebijakan akses tingkat baris ke tabel yang mereferensikan tabel lain yang memiliki keamanan tingkat baris.
Beberapa fitur BigQuery tidak kompatibel dengan keamanan tingkat baris. Untuk mengetahui informasi selengkapnya, lihat Menggunakan keamanan tingkat baris.
Operasi non-kueri, termasuk tugas akun layanan, yang memerlukan akses penuh ke data tabel dapat menggunakan keamanan tingkat baris dengan filter
TRUE
. Contohnya mencakup pembuatan salinan tabel, alur kerja dataproc, dan lainnya. Untuk mengetahui informasi selengkapnya, lihat Menggunakan keamanan tingkat baris.Membuat, mengganti, atau menghapus kebijakan akses tingkat baris harus dilakukan dengan pernyataan DDL. Untuk mencantumkan dan melihat kebijakan akses tingkat baris, Anda dapat melakukannya melalui konsol Google Cloud atau alat command line bq.
Melihat pratinjau atau menjelajahi tabel tidak kompatibel dengan keamanan tingkat baris.
Pengambilan sampel tabel tidak kompatibel dengan keamanan tingkat baris.
Hasil kebijakan subkueri tingkat atas dibatasi hingga 100 MB. Batas ini berlaku per kebijakan akses tingkat baris.
Jika predikat kebijakan akses tingkat baris tidak dapat dievaluasi karena penghapusan tabel yang dirujuk, kueri akan gagal.
Kebijakan akses tingkat baris subkueri hanya mendukung tabel BigQuery, tabel eksternal BigLake, dan tabel yang dikelola BigLake.
Pemantauan dan log audit
Jika data dalam tabel yang memiliki satu atau beberapa kebijakan akses tingkat baris dibaca, kebijakan akses tingkat baris yang diizinkan untuk akses baca dan tabel terkait yang dirujuk dalam subkueri akan muncul di informasi otorisasi IAM untuk permintaan baca tersebut.
Pembuatan dan penghapusan kebijakan akses tingkat baris dicatat dalam log audit, dan dapat
diakses melalui Cloud Logging. Log audit
menyertakan nama kebijakan akses tingkat baris. Namun, definisi
filter_expression
dan grantee_list
dari kebijakan akses
tingkat baris dihilangkan dari log, karena mungkin berisi informasi pengguna atau
informasi sensitif lainnya. Listingan dan tampilan kebijakan akses tingkat baris tidak dicatat dalam log
audit.
Untuk mengetahui informasi lebih lanjut tentang logging di BigQuery, lihat Pengantar pemantauan BigQuery.
Untuk mengetahui informasi selengkapnya tentang logging di Google Cloud, lihat Cloud Logging.
Langkah berikutnya
Untuk mengetahui informasi tentang cara mengelola keamanan tingkat baris, lihat Menggunakan keamanan tingkat baris.
Untuk mengetahui informasi tentang cara kerja keamanan tingkat baris dengan fitur dan layanan BigQuery lainnya, baca Menggunakan keamanan tingkat baris dengan fitur BigQuery lainnya.
Untuk mengetahui informasi tentang praktik terbaik terkait keamanan tingkat baris, lihat Praktik Terbaik untuk keamanan tingkat baris di BigQuery.