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:

Kasus penggunaan keamanan tingkat baris untuk region.

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.

Kasus penggunaan keamanan tingkat baris untuk gaji

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