Поделиться через


Доступ к Azure Data Lake Storage с использованием передачи учетных данных идентификатора Microsoft Entra (устаревшая)

Внимание

Поддержка этой документации прекращена, и она может не обновляться.

Передача учетных данных объявлено устаревшим, начиная с версии Databricks Runtime 15.0, и будет удалено в будущих версиях. Databricks рекомендует выполнить обновление до каталога Unity. Каталог Unity упрощает безопасность и управление данными, предоставляя централизованное место для администрирования и аудита доступа к данным в нескольких рабочих областях в вашей учетной записи. См. статью Что такое Unity Catalog?

Для обеспечения повышенной безопасности и управляемости обратитесь к команде по работе с учетной записью Azure Databricks, чтобы отключить передачу учетных данных в учетной записи Azure Databricks.

Примечание.

Эта статья содержит упоминания термина whitelisted (в белом списке), который не используется в Azure Databricks. Когда этот термин будет удален из программного обеспечения, мы удалим его из статьи.

Вы можете автоматически пройти проверку подлинности в ADLS с кластеров Azure Databricks, используя тот же идентификатор Microsoft Entra ID, который вы используете для входа в Azure Databricks. Когда вы включаете в своем кластере сквозную передачу учетных данных Azure Data Lake Storage, команды, которые вы запускаете в этом кластере, могут читать и записывать данные в Azure Data Lake Storage без необходимости настройки учетных данных субъекта-службы для доступа к хранилищу.

Передача учетных данных поддерживается только в Azure Data Lake Storage. Хранилище объектов BLOB Azure не поддерживает передачу учетных данных.

В этой статье рассматриваются следующие вопросы:

  • Включение сквозной передачи учетных данных для стандартных кластеров и кластеров с высокой степенью параллелизма.
  • Настройка сквозной аутентификации учетных данных и инициализация ресурсов хранения в учетных записях ADLS.
  • Доступ к ресурсам ADLS напрямую при включенной сквозной передаче учетных данных.
  • Доступ к ресурсам ADLS через точку подключения при включенной сквозной передаче учетных данных.
  • Поддерживаемые функции и ограничения при использовании сквозной передачи учетных данных.

Требования

  • План "Премиум". Дополнительные сведения об обновлении или понижении уровня рабочей области Azure Databricks см. в статье об обновлении стандартного плана до плана "Премиум".
  • Учетная запись хранилища Azure Data Lake Storage. Учетные записи хранения Azure Data Lake Storage должны использовать иерархическое пространство имен для работы с передачей учетных данных Azure Data Lake Storage. Инструкции по созданию новой учетной записи ADLS см. в статье Создание учетной записи хранения, включая включение иерархического пространства имен.
  • Правильно настроенные разрешения пользователей для Azure Data Lake Storage. Администратор Azure Databricks должен убедиться, что у пользователей есть правильные роли, например, Участник данных хранилища Blob, для чтения и записи данных, хранящихся в Azure Data Lake Storage. См. Использование портала Azure для назначения роли Azure для доступа к данным BLOB и очереди.
  • Узнайте о привилегиях администраторов рабочих областей в рабочих областях, которые включены для сквозной аутентификации, и просмотрите существующие назначения администратора в них. Администраторы рабочей области могут управлять операциями для своей рабочей области, включая добавление пользователей и субъектов-служб, создание кластеров и делегирование других пользователей администраторам рабочей области. Задачи управления рабочими областями, такие как управление владением заданиями и просмотр записных книжек, могут предоставлять косвенный доступ к данным, зарегистрированным в Azure Data Lake Storage. Администратор рабочей области — это привилегированная роль, которую следует тщательно распределить.
  • Для сквозной передачи учетных данных нельзя использовать кластер, настроенный с учетными данными ADLS, такими как учетные данные главного приложения.

Внимание

Невозможно выполнить проверку подлинности в Azure Data Lake Storage с помощью учетных данных идентификатора Microsoft Entra, если вы находитесь за брандмауэром, который не был настроен для разрешения трафика на идентификатор Microsoft Entra. Брандмауэр Azure блокирует доступ к Active Directory по умолчанию. Чтобы разрешить доступ, настройте тег службы AzureActiveDirectory. Аналогичные сведения для сетевых виртуальных модулей можно найти по тегу AzureActiveDirectory в файле JSON "Диапазоны IP-адресов и теги служб Azure". Дополнительные сведения см. в статье Теги службы Брандмауэра Azure.

Рекомендации по журналированию

Вы можете вести журнал идентификаторов, передаваемых в ADLS-хранилище, в журналах диагностики службы хранилища Azure. Регистрация идентификаторов позволяет связывать запросы ADLS с отдельными пользователями из кластеров Azure Databricks. Включите ведение журнала диагностики в учетной записи хранения, чтобы начать получать эти журналы, выполнив следующие действия: настройте использование PowerShell с помощью команды Set-AzStorageServiceLoggingProperty. В качестве версии укажите 2,0, так как формат записи журнала 2.0 включает имя участника-пользователя в запросе.

Включите сквозную передачу учетных данных Azure Data Lake Storage для кластера с высокой степенью многозадачности

Кластеры с высокой степенью параллелизма могут совместно использоваться несколькими пользователями. Они поддерживают только Python и SQL со сквозной передачей учетных данных Azure Data Lake Storage.

Внимание

Включение сквозной передачи учетных данных Azure Data Lake Storage для кластера с высоким уровнем параллелизма блокирует все порты в кластере, за исключением портов 44, 53 и 80.

  1. При создании кластера задайте для параметра Cluster Mode (Режим кластера) значение High Concurrency (Высокая степень параллелизма).
  2. В разделе Advanced Options (Дополнительные параметры) выберите Enable credential passthrough for user-level data access and only allow Python and SQL commands (Включить сквозную передачу учетных данных для доступа к данным на уровне пользователя и разрешить только команды Python и SQL).

Включение сквозной передачи учетных данных для кластеров с высокой степенью параллелизма

Включение сквозной передачи учетных данных Azure Data Lake Storage для стандартного кластера

Стандартные кластеры со сквозной передачей учетных данных ограничены одним пользователем. Стандартные кластеры поддерживают Python, SQL, Scala и R. В Databricks Runtime 10.4 LTS и более поздних версиях поддерживается sparklyr.

Необходимо назначить пользователя при создании кластера, но кластер может изменяться пользователем с разрешениями CAN MANAGE в любое время, чтобы заменить исходного пользователя.

Внимание

Пользователь, назначенный кластеру, должен иметь по крайней мере разрешение CAN ATTACH TO для кластера, чтобы выполнять команды в кластере. Администраторы рабочей области и создатель кластера имеют разрешения CAN MANAGE, но не могут выполнять команды в кластере, если они не являются назначенным пользователем кластера.

  1. При создании кластера задайте для параметра Cluster Mode (Режим кластера) значение Standard (Стандартный).
  2. В разделе Advanced Options (Дополнительные параметры) выберите Enable credential passthrough for user-level data access (Включить сквозную передачу учетных данных для доступа к данным на уровне пользователя) и выберите имя пользователя из раскрывающегося списка Single User Access (Доступ одного пользователя).

Включение сквозной передачи учетных данных для кластеров уровня

создание контейнера

Контейнеры предоставляют способ организации объектов в учетной записи хранения Azure.

Доступ к Azure Data Lake Storage напрямую с использованием сквозной передачи учетных данных

После настройки сквозного руководства по учетным данным Azure Data Lake Storage и создания контейнеров хранилища можно получить доступ к данным непосредственно в Azure Data Lake Storage с помощью пути abfss://.

Хранилище данных Microsoft Azure Data Lake

Питон

spark.read.format("csv").load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv").collect()

Р

# SparkR
library(SparkR)
sparkR.session()
collect(read.df("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv", source = "csv"))

# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv") %>% sdf_collect()
  • Замените <container-name> именем контейнера в учетной записи хранения ADLS.
  • Замените <storage-account-name> именем учетной записи хранения ADLS.

Подключение Azure Data Lake Storage к DBFS с использованием сквозной передачи учетных данных

Вы можете подключить учетную запись Azure Data Lake Storage или папку внутри нее к DBFS?. Такое подключение является лишь указателем на data lake store, то есть данные никогда не синхронизируются локально.

При монтировании данных с использованием кластера, поддерживающего сквозную передачу учетных данных для Azure Data Lake Storage, любые операции чтения или записи в точку монтирования используют ваши учетные данные Microsoft Entra ID. Эта точка подключения будет видна другим пользователям, но только пользователи, у которых есть доступ для чтения и записи:

  • имеют доступ к базовой учетной записи хранения Azure Data Lake Storage;
  • используют кластер, в котором включен режим передачи учетных данных для Azure Data Lake Storage.

Хранилище данных Microsoft Azure Data Lake

Чтобы подключить файловую систему Azure Data Lake Storage или папку внутри нее, используйте следующие команды:

Питон

configs = {
  "fs.azure.account.auth.type": "CustomAccessToken",
  "fs.azure.account.custom.token.provider.class": spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

язык программирования Scala

val configs = Map(
  "fs.azure.account.auth.type" -> "CustomAccessToken",
  "fs.azure.account.custom.token.provider.class" -> spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
)

// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)
  • Замените <container-name> именем контейнера в учетной записи хранения ADLS.
  • Замените <storage-account-name> именем учетной записи хранения ADLS.
  • Замените <mount-name> на имя предполагаемой точки подключения в DBFS.

Предупреждение

Не предоставляйте ключи доступа к учетной записи хранения или учетные данные сервисного субъекта для аутентификации точки подключения. Это позволит другим пользователям получить доступ к файловой системе, используя эти учетные данные. Цель сквозной передачи учетных данных Azure Data Lake Storage заключается в том, чтобы предотвратить использование этих учетных данных и обеспечить доступ к файловой системе только для пользователей, имеющих доступ к базовой учетной записи Azure Data Lake Storage.

Безопасность

Вы можете безопасно использовать кластеры со сквозной передачей учетных данных Azure Data Lake Storage совместно с другими пользователями. Вы будете изолированы друг от друга и не сможете считывать или использовать учетные данные друг друга.

Поддерживаемые возможности

Функция Минимальная версия Databricks Runtime Примечания.
Python и SQL 5.5
%run 5.5
Файловая система Databricks (DBFS) 5.5 Учетные данные передаются только в том случае, если путь DBFS ведет к расположению в Azure Data Lake Storage. Для путей DBFS, которые ведут к другим системам хранения, используйте другой метод для указания своих учетных данных.
Azure Data Lake Storage 5.5
кэширование дисков 5.5
API ML PySpark 5.5 Не поддерживаются следующие классы ML:
  • org/apache/spark/ml/classification/RandomForestClassifier
  • org/apache/spark/ml/clustering/BisectingKMeans
  • org/apache/spark/ml/clustering/GaussianMixture
  • org/spark/ml/clustering/KMeans
  • org/spark/ml/clustering/LDA
  • org/spark/ml/evaluation/ClusteringEvaluator
  • org/spark/ml/feature/HashingTF
  • org/spark/ml/feature/OneHotEncoder
  • org/spark/ml/feature/StopWordsRemover
  • org/spark/ml/feature/VectorIndexer
  • org/spark/ml/feature/VectorSizeHint
  • org/spark/ml/regression/IsotonicRegression
  • org/spark/ml/regression/RandomForestRegressor
  • org/spark/ml/util/DatasetUtils
Широковещательные переменные 5.5 В пределах PySpark существует ограничение на размер пользовательских функций Python, так как большие пользовательские функции передаются как широковещательная переменная.
Библиотеки с областью действия записной книжки 5.5
язык программирования Scala 5.5
SparkR 6,0
Sparklyr 10,1
Организация записных книжек и модульное упорядочивание кода в записных книжках 6.1
API ML PySpark 6.1 Поддерживаются все классы ML PySpark.
Метрики кластера 6.1
Databricks Connect 7.3 Поддерживается сквозная передача в кластерах уровня «Стандартный».

Ограничения

Следующие функции не поддерживаются при сквозной передаче учетных данных Azure Data Lake Storage:

  • %fs (вместо этого используйте эквивалентную команду dbutils.fs).
  • Задания Databricks
  • Справочник по REST API Databricks.
  • Каталог Unity.
  • Управление доступом к таблицам. Разрешения, предоставленные сквозной передачей учетных данных Azure Data Lake Storage, можно использовать для обхода подробных разрешений списков управления доступом к таблицам, в то время как дополнительные ограничения этих списков ограничивают некоторые преимущества, которые вы получаете от сквозной передачи учетных данных. В частности:
    • Если у вас есть разрешение на доступ к файлам данных, лежащим в основе определенной таблицы, у вас будут полные разрешения на эту таблицу через RDD API независимо от ограничений, введенных в них с помощью списков управления доступом к таблицам.
    • Вы будете ограничены списками управления доступом к таблицам только при использовании API DataFrame. Если вы попытаетесь прочитать файлы непосредственно с помощью API DataFrame, вы увидите предупреждения о том, что у вас нет разрешения SELECT на доступ к файлам, несмотря на то, что их можно прочитать непосредственно через API RDD.
    • Вы не сможете читать таблицы, поддерживаемые файловыми системами, отличными от Azure Data Lake Storage, даже если у вас есть разрешения ACL для чтения этих таблиц.
  • Следующие методы объектов SparkContext (sc) и SparkSession (spark):
    • Нерекомендуемые методы.
    • Такие методы, как addFile() и addJar(), позволяющие пользователям без прав администратора вызывать код Scala.
    • Любой метод, который обращается к файловой системе, отличной от Azure Data Lake Storage (для доступа к другим файловым системам в кластере с включенной сквозной проверкой учетных данных Azure Data Lake Storage, используйте другой метод, чтобы указать учетные данные и просмотреть раздел о доверенных файловых системах в разделе Устранение неполадок).
    • Старые API Hadoop (hadoopFile() и hadoopRDD()).
    • API для потоковой передачи, так как срок действия переданных учетных данных может истечь, пока поток еще работает.
  • Точки подключения DBFS (/dbfs) доступны только в Databricks Runtime 7.3 LTS и более поздних версиях. Точки монтирования с настроенной передачей учетных данных не поддерживаются через этот путь.
  • Фабрика данных Azure.
  • MLflow на кластерах с высоким уровнем параллелизма.
  • Пакет Python azureml-sdk с кластерами с высоким уровнем параллелизма.
  • Невозможно продлить время существования маркеров сквозной аутентификации Microsoft Entra ID с помощью политик времени существования маркеров Microsoft Entra ID. Как следствие, при отправке кластеру команды, выполнение которой занимает больше часа, произойдет сбой, если доступ к ресурсу Azure Data Lake Storage будет осуществляться после того, как пройдет час.
  • При использовании Hive 2.3 и выше невозможно добавить секцию в кластер с включенной прозрачной передачей учетных данных. Подробнее см. в соответствующей части раздела Устранение неполадок.

Устранение неполадок

py4j.security.Py4JSecurityException: ... нет в белом списке

Это исключение возникает при обращении к методу, который Azure Databricks не пометил явно как безопасный для кластеров передачи учетных данных Azure Data Lake Storage. В большинстве случаев это означает, что метод может разрешить пользователю в кластере учетных данных Azure Data Lake Storage доступ к учетным данным другого пользователя.

org.apache.spark.api.python.PythonSecurityException: Путь ... использует недоверенную файловую систему

Это исключение возникает при попытке получить доступ к файловой системе, о безопасности которой кластеру со сквозной передачей учетных данных Azure Data Lake Storage неизвестно. Использование ненадежной файловой системы может позволить пользователю в отказоустойчивом кластере учетных данных Azure Data Lake Storage получить доступ к учетным данным другого пользователя, поэтому мы запрещаем использовать все файловые системы, которые мы не уверены в безопасном использовании.

Чтобы настроить набор доверенных файловых систем в кластере со сквозной передачей учетных данных Azure Data Lake Storage, задайте в ключе конфигурации Spark spark.databricks.pyspark.trustedFilesystems в этом кластере разделенный запятыми список имен классов, которые являются доверенными реализациями org.apache.hadoop.fs.FileSystem.

Добавление раздела завершается сбоем AzureCredentialNotFoundException при включенной сквозной передаче учетных данных

При использовании Hive 2.3-3.1 при попытке добавить секцию в кластер со включенной сквозной передачей учетных данных возникает следующее исключение:

org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:com.databricks.backend.daemon.data.client.adl.AzureCredentialNotFoundException: Could not find ADLS Token

Чтобы обойти эту ошибку, добавьте разделы в кластер, где сквозная передача учетных данных не включена.