OneLake güvenliği (RLS ve CLS) için Spark desteği

Fabric Spark OneLake güvenliği ile tümleştirildiğinden, OneLake'de bir kez tanımlanan satır düzeyi güvenlik (RLS) ve sütun düzeyi güvenlik (CLS) ilkeleri, kullanıcılar Spark not defterlerinden ve Spark iş tanımlarından lakehouse Delta tablolarını okuduğunda tutarlı bir şekilde uygulanır. Kullanıcılar standart Spark SQL veya DataFrame sorguları yazmaya devam eder; Spark, sonucu saydam bir şekilde filtreler ve böylece her kullanıcı yalnızca erişim yetkisine sahip olduğu satırları ve sütunları görür.

Bu makalede Spark'ın zorlama mimarisi, veri hazırlama akışı, kullanıcı deneyimi ve desteklenen senaryolar ve sınırlar dahil olmak üzere OneLake güvenliğiyle nasıl çalıştığı açıklanmaktadır.

Uyarı

İlke yazma ve motorlar arası model için bkz. OneLake'de satır düzeyi güvenlik ve OneLake'de sütun düzeyi güvenlik.

Bir bakışta kavramlar

  • Tek bir gerçek kaynağı. RLS kuralları ve CLS sütun listeleri, OneLake güvenlik rolleri aracılığıyla göl evinde bir kez tanımlanır. Spark ilkeyi depolamaz veya yinelemez.
  • Altyapıdan bağımsız etkili erişim. OneLake, izin verilen sütunlar ve RLS satır filtresi meta verileri de dahil olmak üzere istekte bulunan kullanıcı için önceden derlenmiş etkin erişimi döndürür. Spark bu etkin erişimi sorgu zamanında tüketir.
  • Yalnızca delta filtreleme. OneLake ve Fabric platform katmanı RLS ve CLS'yi yalnızca Delta parquet tablolarına uygular. Kuralları uygulanmış Delta olmayan nesneler Spark tarafından filtrelenmek yerine platform tarafından engellenir.
  • Ayrıcalıklı roller atlanır. OneLake ve Fabric platform davranışı olarak çalışma alanı Admin, Member ve Contributor rolleri RLS veya CLS ile kısıtlanmaz. Filtreleme , Görüntüleyici ve OneLake güvenlik rolleri aracılığıyla erişim izni verilen kullanıcılar için geçerlidir.

Spark, OneLake güvenliğini nasıl uygular?

Kullanıcı, güvenli bir lakehouse tablosunu kapsayan bir sorgu gönderdiğinde, Spark kullanıcının sorgusunu, bu kullanıcı için geçerli olan OneLake güvenlik etkin erişimiyle birleştiren bir yürütme planı hazırlar. Zorlama, kullanıcı kodunda bir filtre sonrası adım olarak değil, yürütme sırasında gerçekleşir; bu nedenle alternatif API'ler veya yol tabanlı okumalarla atlatılamaz.

İki bağlamlı yürütme modeli

Fabric Spark, ilke değerlendirmesini kullanıcı kodundan yalıtılmış tutmak için iki yürütme bağlamı kullanır:

  • Kullanıcı bağlamı. Kullanıcının not defterini veya Spark iş tanımını kullanıcının kimliğiyle çalıştırır. Bu bağlam sorguyu planlar ve filtrelenmiş çıkışı kullanır, ancak hiçbir zaman güvenli tablolara doğrudan, filtrelenmemiş erişimi olmaz.
  • Sistem (güvenlik) bağlamı. Kullanıcının OneLake'e yönelik etkin erişimini çözen, temel Delta dosyalarını okuyan, RLS satır filtreleme ve CLS sütun projeksiyonlarını uygulayan ve sadece kullanıcının görmesine izin verilen satır ve sütunları döndüren, Microsoft tarafından yönetilen ayrıcalıklı bir bağlam.

Sistem bağlamı, İzleme hub'ında kullanıcının defter oturumuyla birlikte çalışan işler şeklinde SparkSecurityControl gösterilir. İş adı ve izleme deneyimi Fabric platform davranışıdır. Bu görevlerin beklenmesi, OneLake güvenlik uygulamasının etkin olduğunu gösterir.

Güvenli tablo için sorgu akışı

  1. Kullanıcı spark not defterinde bir sorgu çalıştırır, örneğin SELECT * FROM lakehouse.sales.
  2. Spark, lakehouse kataloğu aracılığıyla tabloyu çözümler ve OneLake güvenliğinin etkinleştirildiğini algılar.
  3. Spark, geçerli kullanıcı için OneLake'ten etkin erişim isteğinde bulunur. Yanıt, izin verilen sütun listesini (CLS) ve RLS satır filtresi meta verilerini içerir.
  4. Sistem güvenlik bağlamı Delta dosyalarını okur, yalnızca izin verilen sütunları görüntüler ve yürütme sırasında bitmap-stili veya silme vektörü stili satır filtreleme kullanarak Satır Düzeyi Güvenlik (RLS) uygular.
  5. Filtrelenen sonuç, kullanıcının sorgunun geri kalanını (birleştirmeler, toplamalar, güvenli olmayan hedeflere yazmalar vb.) zaten filtrelenmiş veriler üzerinden tamamlayan kullanıcı bağlamlarına geri teslim edilir.

Her ilke türü için ne olur?

Policy Spark'ın geri döndürdüğü Notes
Yalnızca RLS Tüm sütunlar, ancak yalnızca RLS kuralı tarafından izin verilen satırlar. Satır filtreleme, bit eşlem stili veya silme-vektör stili filtreleme kullanılarak güvenlik bağlamında zorlanır; kullanıcılar filtre mantığını gözlemleyemez.
Yalnızca CLS Yalnızca izin verilen sütunlar; tüm satırlar. SELECT * başarılı olur ve en az bir sütuna izin verildiğinde izin verilen sütunları döndürür. Hiçbir sütuna izin verilmiyorsa Spark sorguda başarısız olur.
RLS + CLS aynı rolde İzin verilen satırlar, izin verilen sütunlara dönüştürülmüştür. Her iki kural da aynı role ait olduğu sürece desteklenir.
A rolünde RLS, B rolündeki CLS (aynı kullanıcı) Sorgu başarısız oluyor. OneLake ve Fabric platform katmanı, bir kullanıcının RLS'yi, diğerinin CLS'yi tanımladığı iki rolün üyesi olmayı desteklemez. Bkz. Satır düzeyi güvenlik ve Sütun düzeyi güvenlik.
Delta olmayan nesne Erişim engellendi. OneLake ve Fabric platform katmanı RLS ve CLS'yi yalnızca Delta parquet tablolarına uygular; güvenli bir roldeki diğer nesneler engellenir.

Kurallı yazma kuralları ve RLS ifade söz dizimi için satır düzeyi güvenlik ve sütun düzeyinde güvenlik makalelerine bakın.

Spark, kullanıcılar için verileri nasıl hazırlar?

OneLake güvenliği, veri tüketicisi için şeffaf olacak şekilde tasarlanmıştır. Kullanıcılar zaten bildikleri API'leri kullanmaya devam eder ve Spark ilke çözümlemesini ve filtrelemeyi kendileri adına işler.

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()

Her iki örnekte de DataFrame'e transactions yüklenen tablo verileri zaten OneLake güvenliğine göre filtrelenmiştir. Sonraki dönüştürmeler yalnızca filtrelenen veriler üzerinde çalışır.

Doğrudan dosya erişimi engellendi

Doğrudan yol erişimi lakehouse katalog ilkesi çözümlemesini atlar. Bir tabloda OneLake güvenliği etkinleştirildiğinde, OneLake ve Fabric platform katmanı ayrıcalıklı olmayan kullanıcılar için aşağıdaki desenleri engeller:

  • spark.read.format("delta").load("abfss://...")
  • DeltaTable.forPath(spark, "abfss://...")
  • OneLake REST/SDK, güvenli bir tablonun Tables/<table> klasörünü okur.

Spark'ın etkili erişimi çözümleyebilmesi ve uygulayabilmesi için kullanıcıların güvenli tablolara lakehouse tablo adı (örneğin spark.read.table("lakehouse.table") Spark SQL) üzerinden erişmesi gerekir.

Kullanıcı deneyimi

  • Saydam filtreleme. Sorgu yeniden yazma veya özel söz dizimi gerekmez. Aynı not defteri farklı rollere sahip kullanıcılar için çalışır ve role özgü veriler döndürür.
  • Motorlar arasında tutarlı sonuçlar. Spark'ta uygulanan RLS kuralı ve CLS projeksiyonu, SQL analiz uç noktasına, Direct Lake üzerinde oluşturulan anlamsal modellere ve yetkili üçüncü taraf altyapılarına da uygulanır. Bkz . OneLake güvenlik tümleştirmelerine genel bakış.
  • Ayrıcalıklı roller her şeyi görür. OneLake ve Fabric platform davranışı olarak çalışma alanı Admin, Member ve Contributor kullanıcıları, işlem hattı geliştirme, tablo bakımı (OPTIMIZE, VACUUM) ve sorun giderme için yararlı olan filtrelenmemiş verileri görmeye devam eder.
  • İzleme. SparkSecurityControl İzleme hub'ında görüntülenen işler, politika uygulaması gerçekleştiren sistem bağlamına karşılık gelir. Görev adı ve İzleme merkezi girişi Fabric platform işleminin bir parçasıdır.

Ekran görüntüsü yer tutucusu: Kullanıcının not defteri oturumuyla birlikte SparkSecurityControl işini gösteren izleme hub'ı.

Performansla ilgili dikkat edilmesi gerekenler

  • RLS satır filtreleme. RLS, bit eşlem stili veya silme-vektör stili filtreleme kullanılarak Delta taramasına yakın uygulanır ve desteklendiği durumlarda Yerel Çalıştırma Motoru kullanılır. Bu tasarım, kullanıcı bağlamında oluşan satırları en aza indirir.
  • Sütun kırpma. CLS sütun listeleri kullanıcının projeksiyonuyla birleştirilir. Delta depolama alanından sadece kesişim kısmı okunur.
  • Etkili erişim önbelleği. Spark, ilkeyi ve her sorgu için etkin erişim meta verilerini önbelleğe alır ve sorgu yürütme durdurulduğunda temizler.
  • Bölüm ve istatistik kullanımı. Standart Delta bölüm ayıklama ve veri atlama işlemi RLS satır filtrelemesi ile uygulanmaya devam eder, bu nedenle bölümlenmiş tablolara yönelik sorgular verimli kalır.

Desteklenen senaryolar

  • Spark defterlerindeki Delta tablolarını ve Spark iş tanımlarını lakehouse kataloğu (<lakehouse>.<table>) aracılığıyla okuma.
  • Spark SQL ve PySpark/Scala DataFrame API'leri güvenli tablolara karşı.
  • Güvenli tablolarda birleştirmeler, toplamalar ve aşağı akış dönüşümleri.
  • Güvenli kaynaklardan güvenli olmayan çıkışlara veri aktarır. Güvenli lakehouse dışında yazılan çıkış tabloları yalnızca yazma kullanıcısının okumasına izin verilen önceden filtrelenmiş verileri içerir.
  • Kaynak lakehouse'un OneLake güvenliğinin etkinleştirildiği kısayollar aracılığıyla çalışma alanları arası lakehouse erişimi.

Sınırlamalar

Spark'taki OneLake güvenlik RLS ve CLS, genel OneLake güvenlik sınırlamalarını devralır. Önemli davranışlar ve sınırlar şunlardır:

  • Spark RLS/CLS uygulaması hizmet sorumlularını desteklemez; yalnızca kullanıcı kimlikleri satır ve sütun düzeyinde güvenlik ilkeleri için değerlendirilir. Not defterlerinin çalışma alanı kimliğiyle çalıştırılması, yalnızca not defteri bağlamında sorgu yürüten bireysel kullanıcılar için RLS/CLS'yi uygular, çalışma alanı kimliğinin kendisi için ise zorunlu kılmaz.
  • OneLake ve Fabric platform katmanı RLS ve CLS'yi yalnızca Delta parquet tablolarına uygular. Güvenli bir rolde bulunan Delta dışı nesneler engellenir.
  • OneLake ve Fabric platform katmanı, ayrıcalıklı olmayan kullanıcılar için güvenli tablolara doğrudan erişimle okuma işlemlerini (abfss://, DeltaTable.forPath) engeller.
  • OneLake ve Fabric platform katmanı, bir kullanıcının RLS'yi, diğeri etkilenen tablolar için CLS'yi tanımladığı iki rolün üyesi olmayı desteklemez.
  • OneLake ve Fabric platform davranışı olarak çalışma alanı Admin, Member ve Contributor rolleri RLS ve CLS'yi atlar.
  • Güvenli kaynaklardan güvenli olmayan çıkışlara yazma işlemleri desteklenir ve zaten filtrelenmiş veriler üzerinde çalışır. RLS veya CLS'ye tabi kullanıcılar için güvenli bir hedefe yazma (INSERT/UPDATE/DELETE/MERGE) desteklenmiyor olabilir; güvenli tablolara ETL yazma işlemleri için ayrıcalıklı bir kimlik kullanın.