Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Fabric Spark интегрируется с политикой безопасности OneLake чтобы политики безопасности на уровне строк (RLS) и политики безопасности на уровне столбцов (CLS), определенные один раз в OneLake, последовательно применяются при чтении таблиц Lakehouse Delta из записных книжек Spark и определений заданий Spark. Пользователи продолжают писать стандартные запросы Spark SQL или DataFrame; Spark прозрачно фильтрует результат, чтобы каждый пользователь видел только строки и столбцы, к которых они авторизованы для доступа.
В этой статье объясняется , как Spark работает с безопасностью OneLake, включая архитектуру принудительного применения, поток подготовки данных, взаимодействие с пользователем и поддерживаемые сценарии и ограничения.
Note
Сведения о создании политик и модели кросс-движка см. в разделе "Безопасность на уровне строк в OneLake" и разделе "Безопасность на уровне столбцов в OneLake".
Основные понятия на первый взгляд
- Единственный источник истины. Правила RLS и списки столбцов CLS определяются в обработчике данных один раз с помощью ролей безопасности OneLake. Spark не сохраняет или дублирует политику.
- Эффективный доступ, не зависящий от двигателя. OneLake возвращает предварительно подготовленный эффективный доступ для запрашивающего пользователя, включая разрешенные столбцы и метаданные фильтра строк RLS. Spark использует эффективный доступ к данным при выполнении запроса.
- Фильтрация только для разностных данных. Слой платформы OneLake и Fabric применяет RLS и CLS только к таблицам Delta Parquet. Объекты, не относящиеся к Delta с примененными правилами, блокируются платформой, а не фильтруются с помощью Spark.
- Обход привилегированных ролей. Как поведение платформы OneLake и Fabric, рабочая область Admin, Member и Contributor роли не ограничены RLS или CLS. Фильтрация применяется к средству просмотра и пользователям, которым предоставлен доступ с помощью ролей безопасности OneLake.
Как Spark применяет безопасность OneLake
Когда пользователь отправляет запрос, касающийся защищенной таблицы Lakehouse, Spark подготавливает план выполнения, который объединяет запрос пользователя с эффективным доступом к безопасности OneLake для этого пользователя. Принудительное применение происходит во время выполнения, а не как шаг после фильтрации в пользовательском коде, поэтому его нельзя обойти с помощью альтернативных API или операций чтения на основе пути.
Двух-контекстная модель выполнения
Fabric Spark использует два контекста выполнения для изоляции оценки политики от пользовательского кода:
- Контекст пользователя. Запускает тетрадь или определение задания Spark под идентичностью пользователя. Этот контекст планирует запрос и потребляет отфильтрованные выходные данные, но он никогда не имеет прямого, нефильтрованного доступа к защищенным таблицам.
- Контекст системы (безопасности). Привилегированный, управляемый Microsoft контекст, который определяет фактический доступ пользователя к OneLake, считывает исходные Delta файлы, применяет фильтрацию строк RLS и проекции CLS, и возвращает только те строки и столбцы, к которым пользователь имеет доступ.
Системный контекст отображается в центре мониторинга в качестве SparkSecurityControl заданий, выполняемых вместе с сеансом записной книжки пользователя. Имя задания и опыт мониторинга — поведение платформы Fabric. Эти задания ожидаются и указывают на активное обеспечение безопасности OneLake.
Поток запросов для защищенной таблицы
- Например, пользователь запускает запрос в записной книжке Spark
SELECT * FROM lakehouse.sales. - Spark через каталог Lakehouse находит таблицу и обнаруживает, что система безопасности OneLake включена.
- Spark запрашивает эффективный доступ для текущего пользователя из OneLake. Ответ включает в себя разрешенный список столбцов (CLS) и метаданные фильтра строк RLS.
- Контекст безопасности системы считывает файлы Delta, проецирует только разрешенные столбцы и применяет RLS, используя фильтрацию строк в виде растрового изображения или вектора удаления во время выполнения.
- Отфильтрованный результат возвращается в контекст пользователя, который завершает остальную часть запроса пользователя (присоединение, агрегирование, запись в незащищенные целевые объекты и т. д.) по уже отфильтрованным данным.
Что происходит для каждого типа политики
| Политика | Что возвращает Spark | Notes |
|---|---|---|
| Только RLS | Все столбцы, но только строки, разрешенные правилом RLS. | Фильтрация строк обеспечивается в контексте безопасности с помощью растровой или векторной фильтрации удаления; пользователи не могут наблюдать за логикой фильтрации. |
| Только CLS | Только допустимые столбцы; все строки. |
SELECT * завершается успешно и возвращает допустимые столбцы, если разрешён хотя бы один столбец. Если столбцы не разрешены, Spark завершает запрос сбоем. |
| RLS + CLS в той же роли | Разрешенные строки, проецируемые в допустимые столбцы. | Поддерживается до тех пор, пока оба правила относятся к одной роли. |
| RLS в роли A, CLS в роли B (один и тот же пользователь) | Запрос завершается ошибкой. | Уровень платформы OneLake и Fabric не поддерживает пользователя, являющегося членом двух ролей, где один определяет RLS и другой определяет CLS. См. сведения о безопасности на уровне строк и безопасности на уровне столбцов. |
| Объект Non-Delta | Доступ заблокирован. | Уровень платформы OneLake и Fabric применяет RLS и CLS только к таблицам Delta Parquet. Другие объекты в защищенной роли блокируются. |
Канонические правила разработки и синтаксис выражений RLS см. в статьях безопасности на уровне строк и уровня столбцов .
Подготовка данных для пользователей с помощью Spark
Безопасность OneLake обеспечивает прозрачность для потребителя данных. Пользователи продолжают использовать API, которые они уже знают, и Spark обрабатывает разрешение политик и фильтрацию от их имени.
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;
DataFrame PySpark
df = spark.read.table("sales.transactions")
df.filter("region = 'EMEA'").groupBy("product_category").sum("amount").show()
В обоих примерах данные таблицы 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.
Вопросы производительности
- Фильтрация строк RLS. RLS применяется близко к сканированию Delta с помощью фильтрации в стиле битмап или фильтрации в стиле векторного удаления и, где поддерживается, собственного исполнительного механизма. Этот дизайн уменьшает количество строк, созданных в контексте пользователя.
- Обрезка столбцов. Списки столбцов CLS объединяются с проекцией пользователя. Только данные пересечения считываются из хранилища Delta.
- Эффективное кэширование доступа. Spark кэширует политику и метаданные эффективного доступа для каждого запроса и очищает его при остановке выполнения запроса.
- Использование разделов и статистики. Стандартная отрезка секций и пропуск данных продолжают применяться с фильтрацией строк RLS, поэтому запросы к секционированным таблицам остаются эффективными.
Поддерживаемые сценарии
- Чтение таблиц Lakehouse Delta в записных книжках Spark и определениях заданий Spark в каталоге lakehouse (
<lakehouse>.<table>). - API Spark SQL и PySpark/Scala DataFrame для защищенных таблиц.
- Соединения, агрегации и последующие трансформации в защищенных таблицах.
- Записывает данные из защищенных источников в незащищенные выходные данные. Выходные таблицы, написанные за пределами защищенного озерохранилища, содержат только уже отфильтрованные данные, к которым пользователь записи допущен к чтению.
- Доступ к lakehouse между рабочими областями через ссылки, где в исходном lakehouse включена безопасность OneLake.
Включение каталога OneLake Spark
Для принудительного применения RLS и CLS с помощью Spark каталог OneLake Spark должен быть включен для сеанса Spark. Это выполняется службой заданий на основе lakehouse, заданного по умолчанию для сеанса Spark. Каталог OneLake Spark будет включен, если:
- Lakehouse по умолчанию для сеанса Spark имеет включённую схему или
- Для сеанса Spark не задан lakehouse по умолчанию.
В таких случаях, когда lakehouse по умолчанию должен быть без поддержки схем, каталог OneLake Spark можно включить с помощью свойства Spark в среде Environment. Задайте для свойства Spark значение spark.sql.fabric.catalog.enable-schemaless-lakehousestrue и выберите эту среду при выполнении задания Spark или записной книжки.
Ограничения
OneLake security RLS и CLS в 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 в защищенные таблицы.