Podpora Sparku pro zabezpečení OneLake (RLS a CLS)

Fabric Spark se integruje s OneLake security tak, aby zásady zabezpečení na úrovni řádků (RLS) a zabezpečení na úrovni sloupců (CLS) definované jednou v OneLake byly konzistentně vynuceny, když uživatelé čtou tabulky Lakehouse Delta z poznámkových bloků Sparku a definic úloh Sparku. Uživatelé nadále zapisují standardní dotazy Spark SQL nebo DataFrame; Spark transparentně filtruje výsledek, aby každý uživatel viděl pouze řádky a sloupce, ke kterým má oprávnění přistupovat.

Tento článek vysvětluje , jak Spark funguje se zabezpečením OneLake, včetně architektury vynucení, toku přípravy dat, uživatelského prostředí a podporovaných scénářů a omezení.

Note

Informace o vytváření zásad a modelu pro různé motory najdete v tématu Zabezpečení na úrovni řádků ve OneLake a sloupcové zabezpečení ve OneLake.

Přehled konceptů

  • Jediný zdroj pravdy. Pravidla zabezpečení na úrovni řádků (RLS) a seznamy zabezpečení na úrovni sloupců (CLS) jsou definovány jednou v datovém jezeře prostřednictvím rolí zabezpečení OneLake. Spark politiku neukládá ani duplikuje.
  • Efektivní přístup nezávislý na stroji OneLake vrátí předem určený efektivní přístup pro žádajícího uživatele, včetně povolených sloupců a metadat filtru řádků RLS. Spark využívá tento efektivní přístup při provádění dotazu.
  • Filtrování pouze pro rozdíly Vrstva platformy OneLake a Fabric aplikuje RLS a CLS pouze na tabulky Delta Parquet. Objekty jiné než Delta s použitými pravidly jsou blokovány platformou, nikoli filtrovány Sparkem.
  • Privilegované role se obejdou. Chování platformy OneLake a Fabric umožňuje, že role Admin, Member a Contributor nejsou omezeny rolemi RLS nebo CLS. Filtrování platí pro Prohlížeč a pro uživatele udělené přístup prostřednictvím rolí zabezpečení OneLake.

Jak Spark vynucuje zabezpečení OneLake

Když uživatel odešle dotaz, který se dotkne zabezpečené tabulky Lakehouse, Spark připraví plán provádění, který kombinuje dotaz uživatele s efektivním přístupem k zabezpečení OneLake pro daného uživatele. Vynucování probíhá během provádění, ne jako krok po filtrování v uživatelském kódu, takže jej nelze obejít alternativními rozhraními API nebo načítáními založenými na cestě.

Model spouštění se dvěma kontexty

Fabric Spark používá dva kontexty spuštění k zachování vyhodnocování zásad izolovaného od uživatelského kódu:

  • Kontext uživatele Spustí poznámkový blok uživatele nebo definici úlohy Sparku s identitou uživatele. Tento kontext plánuje dotaz a využívá filtrovaný výstup, ale nikdy nemá přímý a nefiltrovaný přístup k zabezpečeným tabulkám.
  • Kontext systému (zabezpečení) Privilegovaný kontext spravovaný Microsoft, který řeší efektivní přístup uživatele proti OneLake, čte podkladové soubory Delta, použije filtrování řádků RLS a projekce CLS a vrátí pouze řádky a sloupce, které uživatel může zobrazit.

Kontext systému se v centru monitorování zobrazuje jako SparkSecurityControl úlohy, které běží společně s relací poznámkového bloku uživatele. Název úlohy a monitorovací zkušenost jsou chování platformy Fabric. Tyto úlohy jsou očekávané a naznačují, že je vynucování zabezpečení OneLake aktivní.

Tok dotazů pro zabezpečenou tabulku

  1. Uživatel spustí dotaz v poznámkovém bloku Sparku, například SELECT * FROM lakehouse.sales.
  2. Spark rozpozná tabulku prostřednictvím Lakehouse katalogu a zjistí, že zabezpečení OneLake je povoleno.
  3. Spark požaduje efektivní přístup pro aktuálního uživatele z OneLake. Odpověď obsahuje seznam povolených sloupců (CLS) a metadata filtru řádků RLS.
  4. Kontext zabezpečení systému čte soubory Delta, projekuje pouze povolené sloupce a aplikuje RLS (zabezpečení na úrovni řádků) pomocí filtrace řádků ve stylu bitmapy nebo ve stylu vektoru odstranění během provádění.
  5. Filtrovaný výsledek se předá zpět kontextu uživatele, který nad již filtrovanými daty provede všechny zbývající části dotazu uživatele (spojení, agregace, zápisy do nezabezpečených cílů atd.).

Co se stane pro jednotlivé typy zásad

Policy Co Spark vrací Notes
Pouze RLS Všechny sloupce, ale pouze ty řádky, které jsou povoleny podle pravidel zabezpečení na úrovni řádků (RLS). Filtrování řádků se vynucuje v kontextu zabezpečení pomocí filtrování ve stylu rastrového obrázku nebo filtrování ve stylu vektoru odstranění; uživatelé nemůžou sledovat logiku filtru.
Pouze CLS Pouze povolené sloupce; všechny řádky. SELECT * úspěšně vrátí povolené sloupce, pokud je povolený aspoň jeden sloupec. Pokud nejsou povolené žádné sloupce, Spark dotaz selže.
RLS + CLS ve stejné roli Povolené řádky promítané na povolené sloupce Podporováno, pokud obě pravidla patří do stejné role.
RLS v roli A, CLS v roli B (stejný uživatel) Dotaz se nezdaří. Vrstva platformy OneLake a Fabric nepodporuje uživatele, který je členem dvou rolí, kde jedna definuje zabezpečení na úrovni řádků (RLS) a druhá zabezpečení na úrovni sloupců (CLS). Viz zabezpečení na úrovni řádků a zabezpečení na úrovni sloupců.
Objekt, který není delta Přístup je zablokovaný. Platformová vrstva OneLake a Fabric aplikuje zabezpečení na úrovni řádků (RLS) a sloupců (CLS) pouze na tabulky Delta parquet; ostatní objekty v zabezpečené roli jsou blokovány.

Pravidla kanonického vytváření a syntaxe výrazů RLS najdete v článcích zabezpečení na úrovni řádků a zabezpečení na úrovni sloupců .

Jak Spark připraví data pro uživatele

Zabezpečení OneLake je navržené tak, aby bylo transparentní pro příjemce dat. Uživatelé budou dál používat rozhraní API, která už znají, a Spark zpracovává řešení zásad a filtrování jejich jménem.

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;

Datový rámec PySpark

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

V obou příkladech transactions jsou data tabulky načtená do datového rámce již filtrována zabezpečením OneLake. Následné transformace pracují pouze s filtrovanými daty.

Přímý přístup k souborům je zablokovaný

Přímý přístup k cestě obchází vyřešení zásad katalogu lakehouse. Pokud je v tabulce povolené zabezpečení OneLake, vrstva platformy OneLake a Fabric blokuje následující vzory pro uživatele, kteří nejsou privilegovaní:

  • spark.read.format("delta").load("abfss://...")
  • DeltaTable.forPath(spark, "abfss://...")
  • OneLake REST/SDK čte ze Tables/<table> složky zabezpečené tabulky.

Uživatelé musí přistupovat k zabezpečeným tabulkám prostřednictvím názvu tabulky lakehouse (například nebo Spark SQL), aby Spark mohl přeložit a aplikovat efektivní přístup.

Uživatelské prostředí

  • Transparentní filtrování. Není vyžadováno přepsání dotazu ani speciální syntaxe. Stejný poznámkový blok funguje pro uživatele s různými rolemi a vrací data specifická pro roli.
  • Konzistentní výsledky napříč motory. Stejné pravidlo zabezpečení na úrovni řádků a projekce CLS použité ve Sparku se také použijí v koncovém bodu analýzy SQL, sémantických modelech založených na Direct Lake a autorizovaných modulech třetích stran. Podívejte se na přehled integrace zabezpečení OneLake.
  • Privilegované role vidí všechno. Jako projev chování platforem OneLake a Fabric nadále uživatelé s rolemi Admin, Member a Contributor uvidí nefiltrovaná data, což je užitečné pro vývoj kanálů, údržbu tabulek (OPTIMIZE, VACUUM) a řešení potíží.
  • Monitorování. Úlohy SparkSecurityControl , které se zobrazují v centru monitorování, odpovídají kontextu systému, který provádí vynucování zásad. Název úlohy a položka centra monitorování jsou součástí operace na platformě Fabric.

Zástupný symbol snímku obrazovky: Centrum monitorování zobrazující úlohu SparkSecurityControl vedle relace uživatelského poznámkového bloku.

Důležité informace o výkonu

  • Filtrování řádků RLS RLS se aplikuje blízko skenování Delta pomocí filtrování ve stylu bitmapy nebo vektorového odstranění, a tam, kde je to podporováno, nativního prováděcího enginu. Tento návrh minimalizuje řádky, které se materializují v kontextu uživatele.
  • Ořezávání sloupců Seznamy sloupců CLS se kombinují s projekcí uživatele. Jen průsečík se načítá z úložiště Delta.
  • Efektivní přístupové ukládání do mezipaměti. Spark ukládá zásady do mezipaměti a metadata efektivního přístupu na dotaz a vyčistí je, když se zastaví provádění dotazu.
  • Použití statistik a diskových oddílů. Standardní ořezávání oddílů Delta a přeskakování dat se nadále používá s filtrováním řádků RLS, takže dotazy na dělené tabulky zůstanou efektivní.

Podporované scénáře

  • Čtení tabulek Lakehouse Delta v poznámkových blocích Sparku a definicích úloh Sparku prostřednictvím katalogu lakehouse (<lakehouse>.<table>).
  • Rozhraní API Spark SQL a PySpark/Scala DataFrame při práci se zabezpečenými tabulkami.
  • Spojení, agregace a podřízené transformace v zabezpečených tabulkách
  • Zapisuje ze zabezpečených zdrojů na nezabezpečené výstupy. Výstupní tabulky, které jsou zapsány mimo zabezpečené datové jezero, obsahují pouze již filtrovaná data, která mohl číst uživatel, který data zapsal.
  • Přístup k lakehouse napříč pracovními prostory prostřednictvím zástupců, kde má source lakehouse povolené zabezpečení OneLake.

Povolení katalogu Spark pro OneLake

Aby se zásady RLS a CLS vynucovaly pomocí Sparku, musí být pro relaci Sparku povolen katalog OneLake Spark. To provádí služba úloh na základě výchozího objektu lakehouse nastaveného pro relaci Spark. Katalog OneLake Spark se povolí, pokud:

  • Výchozí lakehouse pro relaci Spark má povolené schéma nebo
  • Pro relaci Sparku není nastavený žádný výchozí lakehouse.

V takových případech, kdy výchozí lakehouse musí být bez podpory schémat, lze katalog OneLake Spark povolit pomocí vlastnosti Spark v prostředí. Nastavte vlastnost Sparku spark.sql.fabric.catalog.enable-schemaless-lakehouses na true a při spuštění úlohy Spark nebo poznámkového bloku vyberte toto prostředí.

Omezení

Bezpečnostní funkce RLS a CLS v rámci OneLake ve Sparku dědí celková omezení zabezpečení OneLake. Mezi důležité chování a omezení patří:

  • Platformová vrstva OneLake a Fabric aplikuje RLS a CLS pouze na tabulky Delta parquet. Ne-Delta objekty v zabezpečené roli jsou blokované.
  • Vrstva platformy OneLake a Fabric blokuje čtení přímé cesty (abfss://, DeltaTable.forPath) vůči zabezpečeným tabulkám pro uživatele bez oprávnění.
  • Vrstva platformy OneLake a Fabric nepodporuje uživatele, který je členem dvou rolí, kde jedna definuje zabezpečení na úrovni řádků (RLS) a druhá definuje zabezpečení na úrovni sloupců (CLS) pro dotčené tabulky.
  • Jako u chování platforem OneLake a Fabric, role Admin, Member a Contributor obcházejí RLS a CLS.
  • Zápisy na nezabezpečené výstupy ze zabezpečených zdrojů jsou podporovány a pracují s již filtrovanými daty. Zápisy (INSERT/UPDATE/DELETE/MERGE) do zabezpečeného cíle můžou být nepodporované pro uživatele, kteří podléhají zabezpečení na úrovni řádků nebo CLS; pro zápisy ETL do zabezpečených tabulek použijte privilegovanou identitu.