Tutorial: Conexión a Azure Data Lake Storage Gen2
Nota:
En este artículo, se describen los patrones heredados para configurar el acceso a Azure Data Lake Storage Gen2. Databricks recomienda usar Unity Catalog. Consulte Creación de un metastore de catálogos de Unity y Conexión al almacenamiento y servicios de objetos en la nube mediante el catálogo de Unity.
Este tutorial le guiará por todos los pasos necesarios para conectarse desde Azure Databricks a Azure Data Lake Storage Gen2 mediante OAuth 2.0 con una entidad de servicio de Microsoft Entra ID.
Requisitos
Complete estas tareas antes de comenzar este tutorial:
- Crear un área de trabajo de Azure Databricks. Consulte Inicio rápido: Creación de un área de trabajo de Azure Databricks
- Cree una cuenta de almacenamiento de Azure Data Lake Storage Gen2. Consulte Inicio rápido: Creación de una cuenta de almacenamiento de Azure Data Lake Storage Gen2.
- Cree un almacén de Azure Key Vault. Consulte Inicio rápido: Creación de una instancia de Azure Key Vault
Paso 1: creación de una entidad de servicio de Microsoft Entra ID
Para utilizar entidades de servicio para conectarse a Azure Data Lake Storage Gen2, un usuario administrador debe crear una nueva aplicación de Microsoft Entra ID. Si ya tiene una entidad de servicio de Microsoft Entra ID disponible, vaya al Paso 2: Crear un secreto de cliente para la entidad de servicio.
Para crear una entidad de servicio de entidad de servicio, siga estas instrucciones:
Inicie sesión en Azure Portal.
Nota:
El portal que se debe usar varía en función de si la aplicación Microsoft Entra ID se ejecuta en la nube pública de Azure o en una nube soberana o nacional. Para obtener más información, consulte Nubes nacionales.
Si tiene acceso a varios inquilinos, suscripciones o directorios, haga clic en el icono Directorios y suscripciones (directorio con filtro) del menú superior para cambiar al directorio en el que desea aprovisionar la entidad de servicio.
Busque y seleccione <Microsoft Entra ID.
En Administrar, haga clic en Registros de aplicaciones > Nuevo registro.
En Nombre, escriba un nombre de la aplicación.
En la sección Tipos de cuenta admitidos, seleccione Accounts in this organizational directory only (Single tenant) (Solo las cuentas de este directorio organizativo [inquilino único]).
Haga clic en Registrar.
Paso 2: Crear un secreto de cliente para su entidad de servicio
En Administrar, haga clic en Certificados y secretos.
En la pestaña Secretos de cliente, haga clic en Nuevo secreto de cliente.
En el panel Agregar un secreto de cliente, en Descripción, escriba una descripción para el secreto de cliente.
En Expira, seleccione un período de expiración para el secreto de cliente y, a continuación, haga clic en Agregar.
Copie y almacene el valor del secreto de cliente en un lugar seguro, ya que es su contraseña para la aplicación.
En la página Información general de la página de la aplicación, en la sección Essentials, copie los valores siguientes:
- Id. de la aplicación (cliente)
- Id. de directorio (inquilino)
Paso 3: Conceder a la entidad de servicio el acceso a Azure Data Lake Storage Gen2
Para conceder acceso a los recursos de almacenamiento, asigne roles a la entidad de servicio. En este tutorial, asignará el colaborador de datos de Storage Blob a la entidad de servicio en la cuenta de Azure Data Lake Storage Gen2. Puede que tenga que asignar otros roles en función de los requisitos específicos.
- En Azure Portal, vaya al servicio Cuentas de almacenamiento.
- Seleccione una cuenta de almacenamiento Azure para usar.
- Haga clic en Access Control (IAM).
- Haga clic en + Agregar y seleccione Agregar asignación de roles en el menú desplegable.
- Establezca el campo Seleccionar en el nombre de la aplicación de Microsoft Entra que creó en el paso 1 y establezca Rol en Colaborador de datos de Storage Blob.
- Haga clic en Save(Guardar).
Paso 4: Agregar el secreto de cliente a Azure Key Vault
Puede almacenar el secreto de cliente del paso 1 en Azure Key Vault.
- En Azure Portal, vaya al servicio de Almacén de claves.
- Seleccione una instancia de Azure Key Vault para usar.
- En las páginas de configuración de Key Vault, seleccione Secretos.
- Haga clic en + Generar o Importar.
- En Opciones de carga, seleccione Manual.
- En Nombre, introduzca un nombre para el secreto. El nombre del secreto debe ser único en Key Vault.
- En Valor, pegue el secreto de cliente que almacenó en el paso 1.
- Haga clic en Crear.
Paso 5: Crear el ámbito de secreto respaldado por Azure Key Vault en su área de trabajo de Azure Databricks
Para hacer referencia al secreto de cliente almacenado en una instancia de Azure Key Vault, puede crear un ámbito de secretos respaldado por Azure Key Vault en Azure Databricks.
Ir a
https://<databricks-instance>#secrets/createScope
. Esta dirección URL distingue mayúsculas de minúsculas; el ámbito decreateScope
debe estar en mayúsculas.Escriba el nombre del ámbito de secretos. Los nombres de ámbito de los secretos no distinguen mayúsculas de minúsculas.
Use el menú desplegable Administrar entidad de seguridad para especificar si Todos los usuarios tienen permiso
MANAGE
para este ámbito de secretos o solo el Creador del ámbito de secretos (es decir, usted).Escriba el nombre DNS (por ejemplo,
https://databrickskv.vault.azure.net/
) y el identificador del recurso, por ejemplo:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
Estas propiedades están disponibles en la pestaña *Configuración > Propiedades de Azure Key Vault en Azure Portal.
Haga clic en el botón Crear.
Paso 6: Conectarse a Azure Data Lake Storage Gen2 usando Python
Ahora puede acceder de forma segura a los datos de la cuenta de almacenamiento de Azure usando OAuth 2.0 con la entidad de servicio de su aplicación de Microsoft Entra ID para la autenticación desde un cuaderno de Azure Databricks.
Vaya al área de trabajo de Azure Databricks y cree un nuevo cuaderno de Python.
Ejecute el siguiente código de Python, con los reemplazos siguientes, para conectarse a Azure Data Lake Storage Gen2.
service_credential = dbutils.secrets.get(scope="<scope>",key="<service-credential-key>") spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth") spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>") spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential) spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
Replace
<scope>
con el nombre del ámbito de secretos del paso 5.<service-credential-key>
por el nombre de la clave que contiene el secreto de cliente.<storage-account>
por el nombre de la cuenta de Azure Storage.<application-id>
por el Id. de aplicación (cliente) de la aplicación de Microsoft Entra ID.<directory-id>
por el Id. de directorio (inquilino) de la aplicación de Microsoft Entra ID.
Ahora ha conectado correctamente el área de trabajo de Azure Databricks a la cuenta de Azure Data Lake Storage Gen2.
Concesión de acceso al área de trabajo de Azure Databricks a Azure Data Lake Storage Gen2
Si configura un firewall en Azure Data Lake Storage Gen2, debe configurar las opciones de red para permitir que el área de trabajo de Azure Databricks se conecte a Azure Data Lake Storage Gen2. En primer lugar, asegúrese de que el área de trabajo de Azure Databricks se implemente en su propia red virtual según lo indicado en Implementación de Azure Databricks en una red virtual de Azure (inserción en red virtual). Puede configurar puntos de conexión privados o acceder desde la red virtual para permitir conexiones desde las subredes a la cuenta de Azure Data Lake Storage Gen2.
Si usa un proceso sin servidor como almacenes de SQL sin servidor, debe conceder acceso desde el plano de proceso sin servidor a Azure Data Lake Storage Gen2. Consulte Redes de plano de proceso sin servidor.
Concesión de acceso mediante puntos de conexión privados
Puede usar puntos de conexión privados para la cuenta de Azure Data Lake Storage Gen2 con el fin de permitir que el área de trabajo de Azure Databricks acceda de forma segura a los datos a través de un vínculo privado.
Para crear un punto de conexión privado mediante Azure Portal, consulte Tutorial: Conexión a una cuenta de almacenamiento mediante un punto de conexión privado de Azure. Asegúrese de crear el punto de conexión privado en la misma red virtual en la que se implemente el área de trabajo de Azure Databricks.
Concesión de acceso desde la red virtual
Los puntos de conexión de servicio de red virtual permiten proteger los recursos de servicio de Azure críticos únicamente en las redes virtuales. Puede habilitar un punto de conexión de servicio para Azure Storage en la red virtual que haya usado para el área de trabajo de Azure Databricks.
Para obtener más información, incluidas las instrucciones para la CLI de Azure y PowerShell, consulte Concesión de acceso desde una red virtual.
- Inicie sesión en Azure Portal como usuario con el rol de colaborador de la cuenta de almacenamiento en la cuenta de Azure Data Lake Storage Gen2.
- Vaya a la cuenta de Azure Storage y, luego, a la pestaña Redes .
- Compruebe que ha seleccionado que se permita el acceso desde las redes virtuales y direcciones IP seleccionadas.
- En Redes virtuales, seleccione Agregar red virtual existente.
- En el panel lateral, en Suscripción, seleccione la suscripción en la que se encuentra la red virtual.
- En Redes virtuales, seleccione la red virtual en la que ha implementado el área de trabajo de Azure Databricks.
- En Subredes, elija Seleccionar todo.
- Haga clic en Habilitar.
- Seleccione Guardar para aplicar los cambios.
Solución de problemas
Error: IllegalArgumentException: Secret does not exist with scope: KeyVaultScope and key
Este error probablemente significa:
- El ámbito respaldado por Databricks al que se hace referencia en el código no es válido.
Revise el nombre del secreto del paso 4 en este artículo.
Error: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks could not access keyvault
Este error probablemente significa:
- El ámbito respaldado por Databricks al que se hace referencia en el código no es válido. o el secreto almacenado en Key Vault ha expirado.
Revise el paso 3 para asegurarse de que el secreto de Azure Key Vault es válido. Revise el nombre del secreto del paso 4 en este artículo.
Error: ADAuthenticator$HttpException: HTTP Error 401: token failed for getting token from AzureAD response
Este error probablemente significa:
- La clave secreta de cliente de la entidad de servicio ha expirado.
Cree un nuevo secreto de cliente siguiendo el paso 2 de este artículo y actualice el secreto en Azure Key Vault.