Υποστήριξη Spark για ασφάλεια OneLake (RLS και CLS)

Το Fabric Spark ενοποιείται με την ασφάλεια OneLake έτσι ώστε οι πολιτικές ασφάλειας σε επίπεδο γραμμών (RLS) και ασφάλειας σε επίπεδο στηλών (CLS) που ορίζονται μία φορά στο OneLake να επιβάλλονται με συνέπεια όταν οι χρήστες διαβάζουν πίνακες Delta lakehouse από σημειωματάρια Spark και ορισμούς εργασιών Spark. Οι χρήστες συνεχίζουν να γράφουν τυπικά ερωτήματα Spark SQL ή DataFrame. Το Spark φιλτράρει με διαφάνεια το αποτέλεσμα, ώστε κάθε χρήστης να βλέπει μόνο τις γραμμές και τις στήλες στις οποίες έχει εξουσιοδότηση πρόσβασης.

Αυτό το άρθρο εξηγεί πώς λειτουργεί το Spark με την ασφάλεια OneLake, συμπεριλαμβανομένης της αρχιτεκτονικής επιβολής, της ροής προετοιμασίας δεδομένων, της εμπειρίας χρήστη και των υποστηριζόμενων σεναρίων και ορίων.

Σημείωση

Για τη σύνταξη πολιτικής και το μοντέλο πολλαπλών μηχανισμών, ανατρέξτε στο θέμα Ασφάλεια σε επίπεδο γραμμών στο OneLake και Ασφάλεια σε επίπεδο στήλης στο OneLake.

Έννοιες με μια ματιά

  • Μοναδική πηγή αλήθειας. Οι κανόνες RLS και οι λίστες στηλών CLS ορίζονται μία φορά στο lakehouse μέσω ρόλων ασφαλείας OneLake. Το Spark δεν αποθηκεύει ούτε αναπαράγει την πολιτική.
  • Αποτελεσματική πρόσβαση ανεξάρτητη από τον κινητήρα. Το OneLake επιστρέφει την προυπολογισμένη αποτελεσματική πρόσβαση για τον αιτούντα χρήστη, συμπεριλαμβανομένων των επιτρεπόμενων στηλών και των μετα-δεδομένων φίλτρου γραμμών RLS. Το Spark καταναλώνει αυτήν την αποτελεσματική πρόσβαση κατά τη στιγμή του ερωτήματος.
  • Φιλτράρισμα μόνο με δέλτα. Το επίπεδο πλατφόρμας OneLake and Fabric εφαρμόζει RLS και CLS μόνο σε τραπέζια παρκέ Delta. Τα αντικείμενα που δεν είναι Delta στα οποία εφαρμόζονται κανόνες αποκλείονται από την πλατφόρμα αντί να φιλτράρονται από το Spark.
  • Παράκαμψη προνομιακών ρόλων. Καθώς οι ρόλοι OneLake και Fabric πλατφόρμας, οι ρόλοι χώρου εργασίας Admin, Member και Contributor δεν περιορίζονται από RLS ή CLS. Το φιλτράρισμα ισχύει για το Viewer και για τους χρήστες στους οποίους έχει εκχωρηθεί πρόσβαση μέσω ρόλων ασφαλείας OneLake.

Πώς το Spark επιβάλλει την ασφάλεια του OneLake

Όταν ένας χρήστης υποβάλλει ένα ερώτημα που αγγίζει έναν ασφαλή πίνακα lakehouse, το Spark προετοιμάζει ένα σχέδιο εκτέλεσης που συνδυάζει το ερώτημα του χρήστη με την αποτελεσματική πρόσβαση ασφαλείας OneLake για αυτόν τον χρήστη. Η επιβολή πραγματοποιείται κατά την εκτέλεση, όχι ως βήμα μετά το φιλτράρισμα στον κώδικα χρήστη, επομένως δεν μπορεί να παρακαμφθεί από εναλλακτικά API ή αναγνώσεις που βασίζονται σε διαδρομές.

Μοντέλο εκτέλεσης δύο πλαισίων

Το Fabric Spark χρησιμοποιεί δύο περιβάλλοντα εκτέλεσης για να διατηρήσει την αξιολόγηση πολιτικής απομονωμένη από τον κώδικα χρήστη:

  • Περιβάλλον χρήστη. Εκτελεί το σημειωματάριο του χρήστη ή τον ορισμό εργασίας Spark με την ταυτότητα του χρήστη. Αυτό το περιβάλλον σχεδιάζει το ερώτημα και καταναλώνει το φιλτραρισμένο αποτέλεσμα, αλλά δεν έχει ποτέ άμεση, αφιλτράριστη πρόσβαση σε ασφαλείς πίνακες.
  • Πλαίσιο συστήματος (ασφάλειας). Ένα προνομιακό περιβάλλον διαχειριζόμενο από τη Microsoft που επιλύει την αποτελεσματική πρόσβαση του χρήστη στο OneLake, διαβάζει τα υποκείμενα αρχεία Delta, εφαρμόζει φιλτράρισμα γραμμών RLS και προβολές CLS και επιστρέφει μόνο τις γραμμές και τις στήλες που επιτρέπεται να δει ο χρήστης.

Το περιβάλλον συστήματος εμφανίζεται στο κέντρο παρακολούθησης ως SparkSecurityControl εργασίες που εκτελούνται παράλληλα με την περίοδο λειτουργίας σημειωματάριου του χρήστη. Το όνομα εργασίας και η εμπειρία παρακολούθησης είναι συμπεριφορά πλατφόρμας Fabric. Αυτές οι θέσεις εργασίας είναι αναμενόμενες και υποδεικνύουν ότι η επιβολή ασφαλείας του OneLake είναι ενεργή.

Ροή ερωτήματος για έναν ασφαλή πίνακα

  1. Ο χρήστης εκτελεί ένα ερώτημα σε ένα σημειωματάριο Spark, για παράδειγμα SELECT * FROM lakehouse.sales.
  2. Το Spark επιλύει τον πίνακα μέσω του καταλόγου lakehouse και εντοπίζει ότι η ασφάλεια OneLake είναι ενεργοποιημένη.
  3. Το Spark ζητά την αποτελεσματική πρόσβαση για τον τρέχοντα χρήστη από το OneLake. Η απόκριση περιλαμβάνει τη λίστα επιτρεπόμενων στηλών (CLS) και τα μετα-δεδομένα φίλτρου γραμμών RLS.
  4. Το περιβάλλον ασφαλείας συστήματος διαβάζει τα αρχεία Delta, προβάλλει μόνο τις επιτρεπόμενες στήλες και εφαρμόζει το RLS χρησιμοποιώντας φιλτράρισμα γραμμών σε στυλ bitmap ή διανύσματος διαγραφής κατά την εκτέλεση.
  5. Το φιλτραρισμένο αποτέλεσμα επιστρέφεται στο περιβάλλον χρήστη, το οποίο ολοκληρώνει το υπόλοιπο ερώτημα του χρήστη (συνδέσμους, συναθροίσεις, εγγραφές σε μη ασφαλείς προορισμούς κ.ο.κ.) στα ήδη φιλτραρισμένα δεδομένα.

Τι συμβαίνει για κάθε τύπο συμβολαίου

Πολιτική Τι επιστρέφει το Spark Σημειώσεις
Μόνο RLS Όλες οι στήλες, αλλά μόνο οι γραμμές που επιτρέπονται από τον κανόνα RLS. Το φιλτράρισμα γραμμών επιβάλλεται στο περιβάλλον ασφαλείας με τη χρήση φιλτραρίσματος τύπου bitmap ή διανύσματος διαγραφής. Οι χρήστες δεν μπορούν να παρατηρήσουν τη λογική του φίλτρου.
Μόνο CLS Μόνο οι επιτρεπόμενες στήλες. όλες τις σειρές. SELECT * Το επιτυγχάνει και επιστρέφει τις επιτρεπόμενες στήλες όταν επιτρέπεται τουλάχιστον μία στήλη. Εάν δεν επιτρέπονται στήλες, το Spark αποτυγχάνει στο ερώτημα.
RLS + CLS στον ίδιο ρόλο Επιτρεπόμενες γραμμές που προβάλλονται σε επιτρεπόμενες στήλες. Υποστηρίζεται εφόσον και οι δύο κανόνες ανήκουν στον ίδιο ρόλο.
RLS στον ρόλο Α, CLS στον ρόλο Β (ίδιος χρήστης) Το ερώτημα αποτυγχάνει. Το επίπεδο πλατφόρμας OneLake και Fabric δεν υποστηρίζει έναν χρήστη που είναι μέλος δύο ρόλων όπου ο ένας ορίζει το RLS και ο άλλος ορίζει το CLS. Δείτε Ασφάλεια σε επίπεδο γραμμών και Ασφάλεια σε επίπεδο στηλών.
Αντικείμενο μη Delta Η πρόσβαση αποκλείστηκε. Το επίπεδο πλατφόρμας OneLake και Fabric εφαρμόζει RLS και CLS μόνο σε πίνακες παρκέ Delta. Άλλα αντικείμενα σε έναν ασφαλή ρόλο αποκλείονται.

Για τους κανονικούς κανόνες σύνταξης και τη σύνταξη έκφρασης RLS, ανατρέξτε στα άρθρα Ασφάλεια σε επίπεδο γραμμών και Ασφάλεια σε επίπεδο στηλών .

Πώς το Spark προετοιμάζει δεδομένα για τους χρήστες

Η ασφάλεια OneLake έχει σχεδιαστεί για να είναι διαφανής στον καταναλωτή δεδομένων. Οι χρήστες συνεχίζουν να χρησιμοποιούν τα API που ήδη γνωρίζουν και το 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

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

Και στα δύο παραδείγματα, τα δεδομένα πίνακα που φορτώνονται στο DataFrame φιλτράρονται ήδη από την transactions ασφάλεια OneLake. Οι επόμενοι μετασχηματισμοί λειτουργούν μόνο στα φιλτραρισμένα δεδομένα.

Η άμεση πρόσβαση σε αρχεία αποκλείεται

Η άμεση πρόσβαση διαδρομής παρακάμπτει την ανάλυση πολιτικής καταλόγου lakehouse. Όταν η ασφάλεια OneLake είναι ενεργοποιημένη σε έναν πίνακα, το επίπεδο πλατφόρμας OneLake και Fabric αποκλείει τα ακόλουθα μοτίβα για μη προνομιούχους χρήστες:

  • spark.read.format("delta").load("abfss://...")
  • DeltaTable.forPath(spark, "abfss://...")
  • Το OneLake REST/SDK διαβάζει στο Tables/<table> φάκελο ενός ασφαλούς πίνακα.

Οι χρήστες πρέπει να έχουν πρόσβαση σε ασφαλείς πίνακες μέσω του ονόματος του πίνακα lakehouse (για παράδειγμα spark.read.table("lakehouse.table") ή Spark SQL), έτσι ώστε το Spark να μπορεί να επιλύσει και να εφαρμόσει την αποτελεσματική πρόσβαση.

Εμπειρία χρήστη

  • Διαφανές φιλτράρισμα. Δεν απαιτείται επανεγγραφή ερωτήματος ή ειδική σύνταξη. Το ίδιο σημειωματάριο λειτουργεί για χρήστες με διαφορετικούς ρόλους και επιστρέφει δεδομένα για συγκεκριμένους ρόλους.
  • Σταθερά αποτελέσματα σε όλους τους κινητήρες. Ο ίδιος κανόνας RLS και η ίδια προβολή CLS που εφαρμόζεται στο Spark εφαρμόζονται επίσης στο τελικό σημείο ανάλυσης SQL, στα σημασιολογικά μοντέλα που βασίζονται στο Direct Lake και στους εξουσιοδοτημένους μηχανισμούς τρίτων. Ανατρέξτε στην ενότητα Επισκόπηση ενοποιήσεων ασφαλείας OneLake.
  • Οι προνομιούχοι ρόλοι βλέπουν τα πάντα. Καθώς το OneLake και η Fabric συμπεριφορά πλατφόρμας, χώρου εργασίας Admin, Member και Contributor οι χρήστες συνεχίζουν να βλέπουν μη φιλτραρισμένα δεδομένα, τα οποία είναι χρήσιμα για την ανάπτυξη διοχέτευσης, τη συντήρηση πινάκων (OPTIMIZE, VACUUM) και την αντιμετώπιση προβλημάτων.
  • Παρακολούθηση. Οι SparkSecurityControl εργασίες που εμφανίζονται στο κέντρο παρακολούθησης αντιστοιχούν στο περιβάλλον συστήματος που εκτελεί την επιβολή πολιτικής. Το όνομα εργασίας και η καταχώρηση του διανομέα παρακολούθησης αποτελούν μέρος της λειτουργίας της πλατφόρμας Fabric.

Σύμβολο κράτησης θέσης στιγμιότυπου οθόνης: Κέντρο παρακολούθησης που εμφανίζει μια εργασία SparkSecurityControl μαζί με την περίοδο λειτουργίας σημειωματάριου του χρήστη.

Θέματα επιδόσεων

  • Φιλτράρισμα γραμμών RLS. Το RLS εφαρμόζεται κοντά στη σάρωση Delta χρησιμοποιώντας φιλτράρισμα τύπου bitmap ή διανύσματος διαγραφής και, όπου υποστηρίζεται, τον εγγενή μηχανισμό εκτέλεσης. Αυτός ο σχεδιασμός ελαχιστοποιεί τις σειρές που υλοποιούνται στο περιβάλλον χρήστη.
  • Κλάδεμα στήλης. Οι λίστες στηλών CLS συνδυάζονται με την προβολή του χρήστη. Μόνο η διασταύρωση διαβάζεται από την αποθήκευση Delta.
  • Αποτελεσματική προσωρινή αποθήκευση πρόσβασης. Το Spark αποθηκεύει προσωρινά την πολιτική και τα μετα-δεδομένα αποτελεσματικής πρόσβασης ανά ερώτημα και τα εκκαθαρίζει όταν σταματά η εκτέλεση του ερωτήματος.
  • Χρήση κατατμήσεων και στατιστικών. Η τυπική εκκαθάριση διαμερισμάτων Delta και η παράβλεψη δεδομένων συνεχίζουν να εφαρμόζονται με το φιλτράρισμα γραμμών RLS, επομένως τα ερωτήματα σε διαμερισμένους πίνακες παραμένουν αποτελεσματικά.

Υποστηριζόμενα σενάρια

  • Ανάγνωση πινάκων Delta lakehouse σε σημειωματάρια Spark και ορισμών εργασιών Spark μέσω του καταλόγου lakehouse (<lakehouse>.<table>).
  • Spark SQL και PySpark/Scala DataFrame API έναντι ασφαλών πινάκων.
  • Συνδέσεις, συναθροίσεις και μεταγενέστεροι μετασχηματισμοί σε ασφαλείς πίνακες.
  • Εγγραφές από ασφαλείς πηγές σε μη ασφαλείς εξόδους. Οι πίνακες εξόδου που είναι γραμμένοι εκτός της ασφαλούς λίμνης περιέχουν μόνο τα ήδη φιλτραρισμένα δεδομένα που επιτράπηκε να διαβάσει ο χρήστης εγγραφής.
  • Πρόσβαση σε lakehouse μεταξύ χώρων εργασίας μέσω συντομεύσεων, όπου το lakehouse προέλευσης έχει ενεργοποιημένη την ασφάλεια OneLake.

Ενεργοποίηση του καταλόγου OneLake Spark

Για να επιβληθούν τα RLS και CLS με το Spark, ο Κατάλογος OneLake Spark πρέπει να είναι ενεργοποιημένος για την περίοδο λειτουργίας Spark. Αυτό γίνεται από την υπηρεσία εργασίας με βάση το προεπιλεγμένο lakehouse που έχει οριστεί για την περίοδο λειτουργίας Spark. Ο Κατάλογος OneLake Spark θα ενεργοποιηθεί εάν:

  • Το προεπιλεγμένο lakehouse για την περίοδο λειτουργίας Spark είναι ενεργοποιημένο σχήμα ή
  • Δεν έχει οριστεί προεπιλεγμένο lakehouse για την περίοδο λειτουργίας Spark.

Για αυτές τις περιπτώσεις, όταν το προεπιλεγμένο lakehouse πρέπει να είναι ενεργοποιημένο χωρίς σχήμα, ο Κατάλογος OneLake Spark μπορεί να ενεργοποιηθεί μέσω της ιδιότητας Spark στο Περιβάλλον. Ορίστε την ιδιότητα spark.sql.fabric.catalog.enable-schemaless-lakehouses Spark και true επιλέξτε αυτό το περιβάλλον κατά την εκτέλεση της εργασίας Spark ή του σημειωματαρίου.

Περιορισμοί

Τα RLS και CLS ασφαλείας OneLake στο Spark κληρονομούν τους συνολικούς περιορισμούς ασφαλείας OneLake. Οι αξιοσημείωτες συμπεριφορές και τα όρια περιλαμβάνουν:

  • Η υλοποίηση Spark RLS/CLS δεν υποστηρίζει αρχές υπηρεσιών. Μόνο οι ταυτότητες χρηστών αξιολογούνται για πολιτικές ασφαλείας σε επίπεδο γραμμών και στηλών. Η εκτέλεση σημειωματαρίων με ταυτότητα χώρου εργασίας δεν θα επιβάλει RLS/CLS για την ίδια την ταυτότητα χώρου εργασίας, μόνο για τους μεμονωμένους χρήστες που εκτελούν τα ερωτήματα εντός του περιβάλλοντος του σημειωματάριου.
  • Το επίπεδο πλατφόρμας OneLake και Fabric εφαρμόζει RLS και CLS μόνο σε πίνακες Delta parquet. Τα αντικείμενα που δεν είναι Delta σε έναν ασφαλή ρόλο αποκλείονται.
  • Το επίπεδο πλατφόρμας OneLake και Fabric αποκλείει τις άμεσες αναγνώσεις διαδρομής (abfss://, DeltaTable.forPath) έναντι ασφαλών πινάκων για μη προνομιούχους χρήστες.
  • Το επίπεδο πλατφόρμας OneLake και Fabric δεν υποστηρίζει έναν χρήστη που είναι μέλος δύο ρόλων όπου ο ένας ορίζει το RLS και ο άλλος ορίζει το CLS για τους επηρεαζόμενους πίνακες.
  • Καθώς οι ρόλοι OneLake και Fabric πλατφόρμας, οι ρόλοι χώρου εργασίας Admin, Member και Contributor παρακάμπτουν τους ρόλους RLS και CLS.
  • Οι εγγραφές σε μη ασφαλείς εξόδους από ασφαλείς πηγές υποστηρίζονται και λειτουργούν σε ήδη φιλτραρισμένα δεδομένα. Οι εγγραφές (INSERT/UPDATE/DELETE/MERGE) σε έναν ασφαλή προορισμό ενδέχεται να μην υποστηρίζονται για χρήστες που υπόκεινται σε RLS ή CLS. χρησιμοποιήστε μια προνομιακή ταυτότητα για εγγραφές ETL σε ασφαλείς πίνακες.