Dukungan Spark untuk keamanan OneLake (RLS dan CLS)

Fabric Spark terintegrasi dengan keamanan OneLake sehingga kebijakan keamanan tingkat baris (RLS) dan keamanan tingkat kolom (CLS) yang ditentukan sekali di OneLake secara konsisten diberlakukan saat pengguna membaca tabel Delta lakehouse dari buku catatan Spark dan definisi pekerjaan Spark. Pengguna terus menulis kueri Spark SQL atau DataFrame standar; Spark secara transparan memfilter hasilnya sehingga setiap pengguna hanya melihat baris dan kolom yang diizinkan untuk diakses.

Artikel ini menjelaskan cara kerja Spark dengan keamanan OneLake, termasuk arsitektur penegakan, alur persiapan data, pengalaman pengguna, serta skenario dan batasan yang didukung.

Note

Untuk penulisan kebijakan dan model lintas mesin, lihat Keamanan tingkat baris di OneLake dan Keamanan tingkat kolom di OneLake.

Sekilas konsep

  • Satu sumber kebenaran. Aturan RLS dan daftar kolom CLS ditentukan sekali di lakehouse melalui peran keamanan OneLake. Spark tidak menyimpan atau menduplikasi kebijakan.
  • Akses efektif yang tidak bergantung pada mesin. OneLake mengembalikan akses efektif yang telah dikompilasi sebelumnya untuk pengguna yang meminta, termasuk kolom yang diizinkan dan metadata filter baris RLS. Spark menggunakan akses efektif tersebut pada waktu kueri.
  • Pemfilteran yang hanya menggunakan delta. Lapisan platform OneLake dan Fabric hanya menerapkan RLS dan CLS ke tabel Delta parquet. Objek non-Delta dengan aturan yang diterapkan diblokir oleh platform daripada difilter oleh Spark.
  • Pengabaian peran istimewa. Karena perilaku platform OneLake dan Fabric, ruang kerja Admin, Member, dan peran Contributor tidak dibatasi oleh RLS atau CLS. Pemfilteran berlaku untuk Penampil dan untuk pengguna yang diberikan akses melalui peran keamanan OneLake.

Cara Spark memberlakukan keamanan OneLake

Ketika pengguna mengajukan kueri yang mengakses tabel lakehouse yang aman, Spark menyiapkan rencana eksekusi yang menggabungkan kueri pengguna dengan akses keamanan efektif OneLake untuk pengguna tersebut. Penegakan terjadi selama eksekusi, bukan sebagai langkah pasca-filter dalam kode pengguna, sehingga tidak dapat dilewati oleh API alternatif atau bacaan berbasis jalur.

Model eksekusi dengan dua konteks

Fabric Spark menggunakan dua konteks eksekusi untuk menjaga evaluasi kebijakan terisolasi dari kode pengguna:

  • Konteks pengguna. Menjalankan notebook pengguna atau definisi pekerjaan Spark dengan identitas pengguna. Konteks ini merancang kueri dan menggunakan output yang telah difilter, tetapi tidak pernah memiliki akses langsung dan tidak difilter ke tabel yang diamankan.
  • Konteks sistem (keamanan). Konteks istimewa yang dikelola Microsoft yang menyelesaikan akses efektif pengguna terhadap OneLake, membaca file Delta yang mendasar, menerapkan pemfilteran baris RLS dan proyeksi CLS, dan hanya mengembalikan baris dan kolom yang diizinkan untuk dilihat pengguna.

Konteks sistem muncul di hub Pemantauan sebagai SparkSecurityControl pekerjaan yang berjalan bersama sesi notebook pengguna. Nama pekerjaan dan pengalaman pemantauan adalah perilaku platform Fabric. Pekerjaan ini diharapkan dan menunjukkan bahwa penegakan keamanan OneLake aktif.

Alur kueri untuk tabel yang terjamin keamanannya

  1. Pengguna menjalankan kueri di buku catatan Spark, misalnya SELECT * FROM lakehouse.sales.
  2. Spark menyelesaikan tabel melalui katalog lakehouse dan mendeteksi bahwa keamanan OneLake diaktifkan.
  3. Spark meminta akses efektif untuk pengguna saat ini dari OneLake. Respons mencakup daftar kolom yang diizinkan (CLS) dan metadata filter baris RLS.
  4. Konteks keamanan sistem membaca file Delta, hanya memproyeksikan kolom yang diizinkan, dan menerapkan keamanan tingkat baris (RLS) dengan melakukan pemfilteran baris menggunakan gaya bitmap atau gaya vektor penghapusan selama eksekusi.
  5. Hasil yang difilter diserahkan kembali ke konteks pengguna, yang menyelesaikan kueri pengguna lainnya (gabungan, agregasi, menulis ke target yang tidak aman, dan sebagainya) melalui data yang sudah difilter.

Apa yang terjadi untuk setiap jenis kebijakan

Policy Apa yang dikembalikan Spark Notes
Hanya RLS Semua kolom, tetapi hanya baris yang diizinkan oleh aturan RLS. Pemfilteran baris diterapkan dalam konteks keamanan dengan menggunakan pemfilteran gaya bitmap atau gaya vektor penghapusan; pengguna tidak dapat melihat logika filter.
Hanya CLS Hanya kolom yang diizinkan; semua baris. SELECT * berhasil dan mengembalikan daftar kolom yang diizinkan ketika setidaknya satu kolom diizinkan. Jika tidak ada kolom yang diizinkan, Spark akan gagal dalam kueri.
RLS + CLS dalam peran yang sama Baris yang diizinkan diproyeksikan ke kolom yang diizinkan. Didukung selama kedua aturan tersebut memiliki peran yang sama .
RLS dalam peran A, CLS dalam peran B (pengguna yang sama) Kueri gagal. Lapisan platform OneLake dan Fabric tidak mendukung pengguna menjadi anggota dari dua peran di mana satu mendefinisikan RLS dan yang lain mendefinisikan CLS. Lihat Keamanan tingkat baris dan Keamanan tingkat kolom.
Objek non-Delta Akses diblokir. Lapisan platform OneLake dan Fabric menerapkan RLS dan CLS hanya untuk tabel parquet Delta; objek lain dalam peran aman diblokir.

Untuk aturan penulisan kanonis dan sintaks ekspresi RLS, lihat artikel keamanan tingkat baris dan keamanan tingkat kolom .

Cara Spark menyiapkan data untuk pengguna

Keamanan OneLake dirancang agar transparan kepada konsumen data. Pengguna terus menggunakan API yang sudah mereka ketahui, dan Spark menangani resolusi dan pemfilteran kebijakan atas nama mereka.

Spark SQL

-- Returns only rows and columns the current user is authorized to see.
SELECT product_category, SUM(amount) AS total
FROM sales.transactions
GROUP BY product_category;

PySpark DataFrame

df = spark.read.table("sales.transactions")
df.filter("region = 'EMEA'").groupBy("product_category").sum("amount").show()

Dalam kedua contoh, transactions data tabel yang dimuat ke dalam DataFrame sudah difilter oleh keamanan OneLake. Transformasi berikutnya hanya beroperasi melalui data yang difilter.

Akses file langsung diblokir

Akses jalur langsung melewati resolusi kebijakan katalog lakehouse. Saat keamanan OneLake diaktifkan pada tabel, lapisan platform OneLake dan Fabric memblokir pola berikut untuk pengguna yang tidak memiliki hak istimewa:

  • spark.read.format("delta").load("abfss://...")
  • DeltaTable.forPath(spark, "abfss://...")
  • OneLake REST/SDK membaca terhadap folder Tables/<table> dari tabel yang diamankan.

Pengguna harus mengakses tabel aman melalui nama tabel lakehouse (misalnya spark.read.table("lakehouse.table") atau Spark SQL) sehingga Spark dapat mengatasi dan menerapkan akses yang efektif.

Pengalaman pengguna

  • Pemfilteran transparan. Tidak diperlukan penulisan ulang kueri atau sintaks khusus. Notebook yang sama berfungsi untuk pengguna dengan peran yang berbeda dan mengembalikan data khusus peran.
  • Hasil yang konsisten di seluruh mesin. Aturan RLS dan proyeksi CLS yang sama yang diterapkan di Spark juga diterapkan di titik akhir analitik SQL, model semantik yang dibangun di Direct Lake, dan mesin pihak ketiga resmi. Lihat Ringkasan integrasi keamanan OneLake.
  • Peran istimewa melihat semuanya. Sebagai perilaku platform OneLake dan Fabric, ruang kerja Admin, Member, dan Contributor pengguna terus melihat data yang tidak difilter, yang berguna untuk pengembangan alur, pemeliharaan tabel (OPTIMIZE, VACUUM), dan pemecahan masalah.
  • Pemantauan. Pekerjaan SparkSecurityControl yang muncul di hub Pemantauan sesuai dengan konteks sistem yang melakukan penegakan kebijakan. Nama pekerjaan dan entri hub Pemantauan adalah bagian dari operasi platform Fabric.

Tempat penampung cuplikan layar: Pusat pemantauan menampilkan tugas SparkSecurityControl bersama sesi notebook pengguna.

Pertimbangan performa

  • Pemfilteran baris RLS. RLS diterapkan dekat dengan pemindaian Delta dengan menggunakan pemfilteran gaya bitmap atau gaya vektor penghapusan dan, jika didukung, menggunakan Native Execution Engine. Desain ini meminimalkan baris yang muncul dalam konteks pengguna.
  • Pemangkasan kolom. Daftar kolom CLS dikombinasikan dengan proyeksi pengguna. Hanya persimpangan yang dibaca dari penyimpanan Delta.
  • Penggunaan cache yang efektif. Spark menyimpan kebijakan dan metadata akses efektif dalam cache per kueri, dan membersihkannya ketika eksekusi kueri berakhir.
  • Penggunaan partisi dan statistik. Pemangkasan partisi Delta Standar dan penghindaran data terus diterapkan dengan pemfilteran baris RLS, sehingga kueri terhadap tabel yang dipartisi tetap efisien.

Skenario yang didukung

  • Membaca tabel Delta lakehouse di buku catatan Spark dan definisi pekerjaan Spark melalui katalog lakehouse (<lakehouse>.<table>).
  • API Spark SQL dan PySpark/Scala DataFrame terhadap tabel yang aman.
  • Gabungan, agregasi, dan transformasi hilir di tabel yang telah diamankan.
  • Menulis dari sumber aman ke keluaran yang tidak aman. Tabel output yang ditulis di luar lakehouse yang aman hanya berisi data yang sudah difilter yang diizinkan untuk dibaca oleh pengguna yang menulis.
  • Akses lakehouse lintas ruang kerja melalui pintasan, di mana keamanan OneLake diaktifkan pada lakehouse sumber.

Mengaktifkan Katalog OneLake Spark

Agar RLS dan CLS diberlakukan dengan Spark, Katalog OneLake Spark harus diaktifkan untuk sesi Spark. Ini dilakukan oleh layanan job berdasarkan lakehouse default yang ditetapkan untuk sesi Spark. Katalog OneLake Spark akan diaktifkan jika:

  • Lakehouse default untuk sesi Spark memiliki skema yang diaktifkan, atau
  • Tidak ada lakehouse default yang ditetapkan untuk sesi Spark.

Dalam kasus tersebut, jika lakehouse default harus tanpa skema yang diaktifkan, OneLake Spark Catalog dapat diaktifkan melalui properti Spark di Environment. Atur properti spark.sql.fabric.catalog.enable-schemaless-lakehouses Spark ke true dan pilih lingkungan tersebut saat menjalankan pekerjaan atau buku catatan Spark.

Keterbatasan

Keamanan RLS dan CLS di Spark mematuhi pembatasan keamanan keseluruhan OneLake. Perilaku dan batasan penting meliputi:

  • Lapisan platform OneLake dan Fabric menerapkan RLS dan CLS hanya untuk tabel Delta parquet. Objek non-Delta dalam peran aman diblokir.
  • Lapisan platform OneLake dan Fabric memblokir pembacaan jalur langsung (abfss://, DeltaTable.forPath) terhadap tabel aman untuk pengguna yang tidak memiliki hak istimewa.
  • Lapisan platform OneLake dan Fabric tidak mendukung pengguna menjabat dua peran di mana satu mendefinisikan RLS dan lainnya mendefinisikan CLS pada tabel yang terpengaruh.
  • Dalam perilaku platform OneLake dan Fabric, peran Admin, Member, dan Contributor dalam ruang kerja mengabaikan RLS dan CLS.
  • Menulis ke output yang tidak aman dari sumber-sumber yang aman didukung serta beroperasi pada data yang sudah difilter sebelumnya. Menulis (INSERT/UPDATE/DELETE/MERGE) ke target aman mungkin tidak didukung untuk pengguna yang tunduk pada RLS atau CLS; gunakan identitas istimewa untuk penulisan ETL ke dalam tabel aman.