Acceso a Azure Data Lake Storage mediante el acceso directo a credenciales de Microsoft Entra ID (anteriormente Azure Active Directory) (heredado)

Importante

Esta documentación se ha retirado y es posible que no se actualice.

El paso a través de credenciales es un modelo de gobernanza de datos heredado. Databricks recomienda actualizar al catálogo de Unity. Unity Catalog simplifica la seguridad y la gobernanza de los datos al proporcionar un lugar central para administrar y auditar el acceso a los datos en varias áreas de trabajo de la cuenta. Consulte ¿Qué es Unity Catalog?

Para mejorar la seguridad y la posición de gobernanza, póngase en contacto con el representante de Databricks para deshabilitar el acceso directo de credenciales en la cuenta de Azure Databricks.

Nota:

Este artículo contiene referencias al término lista de permitidos, un término que Azure Databricks no usa. Cuando se quite el término del software, se quitará también del artículo.

Puede autenticarse automáticamente con Acceso a Azure Data Lake Storage Gen1 desde Azure Databricks (ADLS Gen1) y ADLS Gen2 desde los clústeres de Azure Databricks mediante la misma identidad de Microsoft Entra ID (anteriormente Azure Active Directory) que usa para iniciar sesión en Azure Databricks. Al habilitar el paso de credenciales de Azure Data Lake Storage en el clúster, los comandos que ejecute en ese clúster podrán leer y escribir datos en Azure Data Lake Storage sin necesidad de configurar las credenciales de la entidad de servicio para el acceso al almacenamiento.

El paso de credenciales de Azure Data Lake Storage solo se admite con Azure Data Lake Storage Gen1 y Gen2. Azure Blob Storage no admite el paso de credenciales.

En este artículo se describe:

  • Habilitación del paso de credenciales para clústeres estándar y de alta simultaneidad.
  • Configuración del paso de credenciales e inicialización de recursos de almacenamiento en cuentas de ADLS.
  • Acceso a recursos de ADLS directamente cuando se habilita el paso de credenciales.
  • Acceso a recursos de ADLS mediante un punto de montaje cuando se habilita el paso de credenciales.
  • Características y limitaciones admitidas al usar el paso de credenciales.

Se incluyen cuadernos para proporcionar ejemplos de uso del paso de credenciales con cuentas de almacenamiento de ADLS Gen1 y ADLS Gen2.

Requisitos

  • Plan Premium. Consulte Actualización o degradación de un área de trabajo de Azure Databricks para más información sobre cómo actualizar un plan estándar a un plan Premium.
  • Una cuenta de almacenamiento de Azure Data Lake Storage Gen1 o Gen2. Las cuentas de almacenamiento de Azure Data Lake Storage Gen2 deben usar el espacio de nombres jerárquico para trabajar con el paso de credenciales de Azure Data Lake Storage. Consulte Creación de una cuenta de almacenamiento para instrucciones sobre cómo crear una cuenta de ADLS Gen2, lo que incluye cómo habilitar el espacio de nombres jerárquico.
  • Permisos de usuario configurados correctamente para Azure Data Lake Storage. Un administrador de Azure Databricks debe asegurarse de que los usuarios tengan los roles correctos, por ejemplo, colaborador de datos de Storage Blob, para leer y escribir los datos almacenados en Azure Data Lake Storage. Consulte Uso de Azure Portal para asignar un rol de Azure para el acceso a datos de blobs y colas.
  • Comprender los privilegios de los administradores de áreas de trabajo en áreas de trabajo habilitadas para el acceso directo y revisar las asignaciones de administrador de área de trabajo existentes. Los administradores del área de trabajo pueden administrar las operaciones de su área de trabajo, incluida la adición de usuarios y entidades de servicio, la creación de clústeres y la delegación de otros usuarios para que sean administradores del área de trabajo. Las tareas de administración del área de trabajo, como la administración de la propiedad del trabajo y la visualización de cuadernos, pueden proporcionar acceso indirecto a los datos registrados en Azure Data Lake Storage. El administrador del área de trabajo es un rol con privilegios que debe distribuir con cuidado.
  • No puede usar un clúster configurado con credenciales de ADLS, por ejemplo, credenciales de entidad de servicio, con el paso de credenciales.

Importante

No se puede autenticar en Azure Data Lake Storage con las credenciales de Microsoft Entra ID si está detrás de un firewall que no se ha configurado para permitir el tráfico a Microsoft Entra ID. Azure Firewall bloquea el acceso a Active Directory de forma predeterminada. Para permitir el acceso, configure la etiqueta de servicio AzureActiveDirectory. Puede encontrar información equivalente para las aplicaciones virtuales de red en la etiqueta AzureActiveDirectory en el archivo JSON de intervalos IP y etiquetas de servicio de Azure. Para más información, consulte Etiquetas de servicio de Azure Firewall y Direcciones IP de Azure para la nube pública.

Recomendaciones de registro

Puede registrar las identidades que se pasan al almacenamiento de ADLS en los registros de diagnóstico de Azure Storage. El registro de identidades permite que las solicitudes de ADLS se vinculen a usuarios individuales de clústeres de Azure Databricks. Active el registro de diagnóstico en la cuenta de almacenamiento para empezar a recibir estos registros:

Habilitación del paso de credenciales de Azure Data Lake Storage para un clúster de alta simultaneidad

Los clústeres de alta simultaneidad se pueden compartir entre varios usuarios. Estos clústeres solo admiten Python y SQL con el paso de credenciales de Azure Data Lake Storage.

Importante

La habilitación del paso de credenciales de Azure Data Lake Storage para un clúster de alta simultaneidad bloquea todos los puertos del clúster, excepto los puertos 44, 53 y 80.

  1. Al crear un clúster, establezca Cluster Mode (Modo del clúster) en High Concurrency (Alta simultaneidad).
  2. En Advanced Options (Opciones avanzadas), seleccione Enable credential passthrough for user-level data access and only allow Python and SQL commands (Habilitar el paso de credenciales para el acceso a datos de nivel de usuario y permitir solo comandos de Python y SQL).

Habilitación del paso de credenciales para clústeres de alta simultaneidad

Habilitación del paso de credenciales de Azure Data Lake Storage para un clúster estándar

Los clústeres estándar con paso de credenciales se limitan a un solo usuario. Los clústeres estándar admiten Python, SQL, Scala y R. En Databricks Runtime 10.4 LTS y versiones posteriores, se admite sparklyr.

Debe asignar un usuario durante la creación del clúster, pero un usuario con los permisos CAN MANAGE lo puede modificar en cualquier momento para reemplazar al usuario original.

Importante

El usuario asignado al clúster debe tener al menos el permiso CAN ATTACH TO para el clúster con el fin de ejecutar comandos en él. Los administradores del área de trabajo y el creador del clúster tienen permisos CAN MANAGE, pero no pueden ejecutar comandos en el clúster a menos que sean el usuario del clúster designado.

  1. Al crear un clúster, establezca Cluster Mode (Modo del clúster) en Standard (Estándar).
  2. En Advanced Options (Opciones avanzadas), seleccione Enable credential passthrough for user-level data access (Habilitar el paso de credenciales para el acceso a datos de nivel de usuario) y seleccione el nombre del usuario en la lista desplegable Single User Access (Acceso de usuario único).

Habilitación del paso de credenciales para clústeres estándar

Creación de un contenedor

Los contenedores proporcionan una manera de organizar los objetos en una cuenta de almacenamiento de Azure.

Acceso a Azure Data Lake Storage directamente mediante el paso de credenciales

Después de configurar el paso de credenciales de Azure Data Lake Storage y crear contenedores de almacenamiento, puede acceder a los datos directamente en Azure Data Lake Storage Gen1 mediante una ruta de acceso adl:// y en Azure Data Lake Storage Gen2 mediante una ruta de acceso abfss://.

Azure Data Lake Storage Gen1

Python

spark.read.format("csv").load("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv").collect()

R

# SparkR
library(SparkR)
sparkR.session()
collect(read.df("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv", source = "csv"))

# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv") %>% sdf_collect()
  • Reemplace <storage-account-name> por el nombre de la cuenta de almacenamiento de ADLS Gen1.

Azure Data Lake Storage Gen2

Python

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

R

# 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()
  • Reemplace <container-name> por el nombre de un contenedor de la cuenta de almacenamiento de ADLS Gen2.
  • Reemplace <storage-account-name> por el nombre de la cuenta de almacenamiento de ADLS Gen2.

Montaje de Azure Data Lake Storage en DBFS mediante el paso de credenciales

Puede montar una cuenta de Azure Data Lake Storage o una carpeta dentro de ella en el sistema de archivos de Databricks (DBFS). El montaje es un puntero a una instancia de ADLS, por lo que los datos nunca se sincronizan localmente.

Al montar datos mediante un clúster habilitado con el acceso directo de credenciales de Azure Data Lake Storage, cualquier lectura o escritura en el punto de montaje usa las credenciales de Microsoft Entra ID. Este punto de montaje será visible para otros usuarios, pero los únicos usuarios que tendrán acceso de lectura y escritura son aquellos que:

  • Tengan acceso a la cuenta de almacenamiento de Azure Data Lake Storage subyacente.
  • Usen un clúster habilitado para el paso de credenciales de Azure Data Lake Storage.

Azure Data Lake Storage Gen1

Para montar un recurso de Azure Data Lake Storage Gen1 o una carpeta dentro de este, use el comando siguiente:

Python

configs = {
   "fs.adl.oauth2.access.token.provider.type": "CustomAccessTokenProvider",
   "fs.adl.oauth2.access.token.custom.provider": spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
 }

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

Scala

 val configs = Map(
   "fs.adl.oauth2.access.token.provider.type" -> "CustomAccessTokenProvider",
   "fs.adl.oauth2.access.token.custom.provider" -> spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
 )

 // Optionally, you can add <directory-name> to the source URI of your mount point.
 dbutils.fs.mount(
   source = "adl://<storage-account-name>.azuredatalakestore.net/<directory-name>",
   mountPoint = "/mnt/<mount-name>",
   extraConfigs = configs)
  • Reemplace <storage-account-name> por el nombre de la cuenta de almacenamiento de ADLS Gen2.
  • Reemplace <mount-name> por el nombre del punto de montaje previsto en DBFS.

Azure Data Lake Storage Gen2

Para montar un sistema de archivos de Azure Data Lake Storage Gen2 o una carpeta dentro de este, use los comandos siguientes:

Python

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)
  • Reemplace <container-name> por el nombre de un contenedor de la cuenta de almacenamiento de ADLS Gen2.
  • Reemplace <storage-account-name> por el nombre de la cuenta de almacenamiento de ADLS Gen2.
  • Reemplace <mount-name> por el nombre del punto de montaje previsto en DBFS.

Advertencia

No proporcione las claves de acceso de la cuenta de almacenamiento ni las credenciales de la entidad de servicio para autenticarse en el punto de montaje. Esto podría dar a otros usuarios acceso al sistema de archivos con esas credenciales. El propósito del paso de credenciales de Azure Data Lake Storage es evitar que tenga que usar esas credenciales y asegurarse de que el acceso al sistema de archivos está restringido a los usuarios que tienen acceso a la cuenta de Azure Data Lake Storage subyacente.

Seguridad

Es seguro compartir los clústeres de paso de credenciales de Azure Data Lake Storage con otros usuarios. Estará aislado de los demás y no podrá leer ni usar las credenciales de los otros.

Características admitidas

Característica Versión mínima de Databricks Runtime Notas
Python y SQL 5.5
Azure Data Lake Storage Gen1 5.5
%run 5.5
DBFS 5.5 Las credenciales solo se pasan si la ruta de acceso de DBFS se resuelve en una ubicación de Azure Data Lake Storage Gen1 o Gen2. Para las rutas de acceso de DBFS que se resuelven en otros sistemas de almacenamiento, use un método diferente para especificar las credenciales.
Azure Data Lake Storage Gen2 5.5
almacenamiento en caché de disco 5.5
API de ML de PySpark 5.5 No se admiten las clases de ML siguientes:

* 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
Variables de difusión 5.5 Dentro de PySpark, hay un límite en el tamaño de las funciones definidas por el usuario de Python que se pueden construir, ya que las que son grandes se envían como variables de difusión.
Bibliotecas con ámbito de Notebook 5.5
Scala 5.5
SparkR 6.0
sparklyr 10.1
Ejecución de un cuaderno de Databricks desde otro cuaderno 6.1
API de ML de PySpark 6.1 Todas las clases de ML de PySpark admitidas.
Métricas del clúster 6.1
Conexión de Databricks 7.3 El paso se admite en clústeres estándar.

Limitaciones

Las siguientes características no se admiten con el paso de credenciales de Azure Data Lake Storage:

  • %fs (use en su lugar el comando dbutils.fs equivalente).
  • Flujos de trabajo de Databricks.
  • La Referencia de la API de REST de Databricks.
  • Unity Catalog.
  • Control de acceso a tablas. Los permisos concedidos por el paso de credenciales de Azure Data Lake Storage se pueden usar para omitir los permisos específicos de las ACL de tabla, mientras que las restricciones adicionales de las ACL de tabla restringirán algunas de las ventajas que obtiene del paso de credenciales. En concreto:
    • Si tiene permiso de Microsoft Entra ID para acceder a los archivos de datos que subyacen a una tabla determinada, tendrá permisos completos sobre esa tabla a través de la API RDD, independientemente de las restricciones que se les apliquen a través de las ACL de tabla.
    • Solo se le restringirán los permisos de ACL de tabla cuando se use la API DataFrame. Verá advertencias de que no tiene permiso SELECT sobre ningún archivo si intenta leer archivos directamente con la API DataFrame, aunque podría leer esos archivos directamente a través de la API RDD.
    • No podrá leer tablas con el respaldo de sistemas de archivos distintos de Azure Data Lake Storage, incluso si tiene permiso de ACL de tabla para leer las tablas.
  • Los métodos siguientes en objetos SparkContext (sc) y SparkSession (spark):
    • Métodos en desuso.
    • Métodos como addFile() y addJar() que permitirían a los usuarios que no son administradores llamar a código de Scala.
    • Cualquier método que acceda a un sistema de archivos que no sea Azure Data Lake Storage Gen1 o Gen2 (para acceder a otros sistemas de archivos de un clúster con el paso de credenciales de Azure Data Lake Storage habilitado, use un método diferente para especificar las credenciales y consulte la sección sobre sistemas de archivos de confianza en Solución de problemas).
    • Las API de Hadoop antiguas (hadoopFile() y hadoopRDD()).
    • API de streaming, ya que las credenciales pasadas expirarán mientras la secuencia todavía se está ejecutando.
  • Los montajes de DBFS (/dbfs) solo están disponibles en Databricks Runtime 7.3 LTS y versiones posteriores. Los puntos de montaje con el acceso directo a credenciales configurado no se admiten mediante esta ruta de acceso.
  • Azure Data Factory.
  • MLflow en clústeres de alta simultaneidad.
  • Paquete azureml-sdk de Python en clústeres de alta simultaneidad.
  • No puede extender la duración de los tokens de acceso directo de Microsoft Entra ID mediante directivas de duración de tokens de Microsoft Entra ID. Como consecuencia, si envía un comando al clúster que tarda más de una hora, se producirá un error si se accede a un recurso de Azure Data Lake Storage después de la marca de 1 hora.
  • Cuando se usa Hive 2.3 y posterior, no se puede agregar una partición en un clúster con el paso de credenciales habilitado. Para más información, consulte la sección de solución de problemas pertinente.

Cuadernos de ejemplo

En los cuadernos siguientes se muestra el paso de credenciales de Azure Data Lake Storage para Azure Data Lake Storage Gen1 y Gen2.

Cuaderno de tránsito de Azure Data Lake Storage Gen1

Obtener el cuaderno

Cuaderno de tránsito de Azure Data Lake Storage Gen2

Obtener el cuaderno

Solución de problemas

py4j.security.Py4JSecurityException: … no está en la lista de permitidos

Esta excepción se produce cuando se ha tenido acceso a un método que Azure Databricks no se ha marcado explícitamente como seguro para los clústeres de acceso directo a las credenciales de Azure Data Lake Storage. En la mayoría de los casos, esto significa que el método podría permitir que un usuario en un clúster de acceso directo a las credenciales de Azure Data Lake Storage acceda a las credenciales de otro usuario.

org.apache.spark.api.python.PythonSecurityException: Path … usa un sistema de archivos que no es de confianza

Esta excepción se produce cuando se ha intentado acceder a un sistema de archivos que el clúster de paso de credenciales de Azure Data Lake Storage desconoce que sea seguro. El uso de un sistema de archivos que no es de confianza podría permitir que un usuario de un clúster de paso de credenciales de Azure Data Lake Storage acceda a las credenciales de otro usuario, por lo que no se permiten todos aquellos sistemas de archivos que no tengamos la certeza de que se vayan a usar de forma segura.

Para configurar el conjunto de sistemas de archivos de confianza de un clúster de paso de credenciales de Azure Data Lake Storage, establezca la clave de configuración de Spark spark.databricks.pyspark.trustedFilesystems de ese clúster como una lista separada por comas de los nombres de clase que son implementaciones de confianza de org.apache.hadoop.fs.FileSystem.

Se produce un error AzureCredentialNotFoundException al agregar una partición cuando está habilitado el paso de credenciales

Al usar Hive 2.3-3.1, si intenta agregar una partición en un clúster con el paso de credenciales habilitado, se produce la siguiente excepción:

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 Gen2 Token

Para evitar este problema, agregue particiones en un clúster sin el paso de credenciales habilitado.