Utilizar credenciales de servicio de Unity Catalog para conectarse a servicios de nube externos

Este artículo describe cómo utilizar una credencial de servicio en Unity Catalog para conectarse a servicios de nube externos. Un objeto de credencial de servicio en Unity Catalog encapsula una credencial de nube a largo plazo que proporciona acceso a un servicio en la nube externo al que los usuarios necesitan conectarse desde Azure Databricks.

Consulte también:

Requisitos

Antes de poder utilizar una credencial de servicio para conectarse a un servicio en la nube externo, debe tener:

  • Un área de trabajo de Azure Databricks habilitada para Unity Catalog.

  • Un recurso de proceso que se encuentra en Databricks Runtime 16.2 o superior.

    Los almacenes SQL no están compatibles para usar directamente las credenciales de servicio. Ver Usar una credencial de servicio en un UDF de Python.

    La versión preliminar pública de las credenciales de servicio está disponible en Databricks Runtime 15.4 LTS y versiones posteriores, con compatibilidad con Python, pero sin compatibilidad con Scala.

  • Una credencial de servicio creada en tu metastore de Unity Catalog que dé acceso al servicio en la nube.

  • El privilegio ACCESS en la credencial de servicio o la propiedad de la credencial de servicio.

Utilice una credencial de servicio en su código

En esta sección se proporcionan ejemplos de uso de credenciales de servicio en un cuaderno. Sustituya los valores de marcador de posición. Estos ejemplos no muestran necesariamente la instalación de las bibliotecas necesarias, que dependen del servicio cliente al que desea acceder.

Solo se soporta Python.

Utiliza una credencial de servicio en un UDF de Python

En UDF, use databricks.service_credentials.getServiceCredentialsProvider() para acceder a las credenciales de servicio. La función dbutils.credentials.getServiceCredentialsProvider() utilizada en cuadernos no está disponible en contextos de ejecución de UDF.

Los requisitos dependen del tipo de UDF:

Tipo de UDF Requisitos
UDF escalar de ámbito de sesión de PySpark Databricks Runtime 17.1 o superior en proceso clásica, o un cuaderno sin servidor o una sesión de trabajo que ejecute la versión 3 o superior del entorno.
Catálogo de lotes de Unity Python UDF Databricks Runtime 16.3 o superior en cómputo clásico; cómputo sin servidor; almacenes de SQL Pro y sin servidor. No es necesario usar la versión 6 del entorno.
Catálogo Scalar de Unity Python UDF Databricks Runtime 18.1 o superior en computación clásica. En el procesamiento sin servidor y en los almacenes SQL Pro y serverless, establece explícitamente el environment_version de la UDF en 6 o superior. Omitir toda la cláusula ENVIRONMENT o establecer environment_version = 'None' no habilita esta característica en estos tipos de computación. La computación clásica no requiere la versión 6 del entorno.

Para realizar llamadas salientes desde una UDF de Python escalar o por lotes de Unity Catalog en un almacén de SQL sin servidor, habilita la versión preliminar pública Habilitar redes para cargas de trabajo aisladas en almacenes de SQL sin servidor en la página Versiones preliminares de tu espacio de trabajo. Los almacenes Pro SQL no requieren esta vista previa.

Para crear un UDF de Unity Catalog que declare una credencial de servicio, el creador de la función debe tener ACCESS sobre la credencial. En el cómputo sin servidor, en los almacenes SQL Pro y serverless, y en el cómputo en modo de acceso estándar, quienes invocan la función necesitan los privilegios habituales sobre ella, incluido EXECUTE, pero no necesitan ACCESS sobre la credencial. En el modo de proceso de acceso dedicado, los solicitantes también deben tener ACCESS.

Las UDF de PySpark de ámbito de sesión utilizan los permisos del llamante. El solicitante debe tener ACCESS en las credenciales del servicio; en el modo de proceso de acceso dedicado, el solicitante debe tener MANAGE.

Consulta versiones del entorno y requisitos de dependencias personalizadas.

ejemplo de Python: configuración de un cliente de SDK de Azure para usar una credencial de servicio específica

from azure.keyvault.secrets import SecretClient # example Azure SDK client

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Especificar una credencial de servicio predeterminada para un recurso de proceso

Opcionalmente, puede especificar una credencial de servicio predeterminada para un clúster de proceso multiuso o de trabajos estableciendo una variable de entorno. De forma predeterminada, el SDK utiliza esa credencial de servicio si no se proporciona autenticación. Los usuarios aún requieren ACCESS en esa credencial de servicio para conectarse al servicio en la nube externo. Databricks no recomienda este enfoque, porque hace que su código sea menos portable que nombrar la credencial de servicio en su código.

Nota

Los almacenamientos de proceso y SQL sin servidor no admiten variables de entorno y, por tanto, no admiten credenciales de servicio predeterminadas.

  1. Abra la página de edición del clúster.

    Consulte Administrar el cómputo clásico.

  2. Haga clic en Avanzadas en la parte inferior de la página y vaya a la pestaña Spark .

  3. Añada la siguiente entrada en Variables de entorno, sustituyendo a <your-service-credential>:

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

Los ejemplos de código siguientes no especifican una credencial de servicio. En su lugar, usan la credencial de servicio especificada en la variable de entorno DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME:

Pitón

Si usa una credencial de servicio predeterminada, no es necesario especificar las credenciales como argumento:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Compare esto con el ejemplo de ejemplo de Python: configure un cliente de SDK de Azure para usar una credencial de servicio específica, que no importa DefaultAzureCredential y agrega la especificación de credenciales:

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')