Compartir a través de


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:

Antes de empezar

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.

    No se admiten almacenes SQL.

    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 admiten Python y Scala.

Nota

API específica de UDF para credenciales de servicio:
En UDF, use databricks.service_credentials.getServiceCredentialsProvider() para acceder a las credenciales de servicio.

Esto difiere de la dbutils.credentials.getServiceCredentialsProvider() función usada en cuadernos, que no está disponible en contextos de ejecución de UDF.

ejemplo de Python: configuración de un cliente de Azure SDK 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)

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

import com.azure.security.keyvault.secrets.{SecretClient, SecretClientBuilder}

// Get credentials from dbutils
val credential = dbutils.credentials.getServiceCredentialsProvider("your-service-credential")

// URL of the Key Vault
val vaultUrl = "https://your-keyvault-name.vault.azure.net/"

// Create the SecretClient
val client: SecretClient = new SecretClientBuilder()
  .vaultUrl(vaultUrl)
  .credential(credential)
  .buildClient()

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 Administración del proceso 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 Azure SDK 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')

Scala

En Scala, reemplace el nombre de credencial de servicio por null.

val azureCredentials = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[TokenCredential]