Compartir a través de


Uso de credenciales de servicio de Catálogo de Unity para conectarse a servicios en la nube externos

En este artículo se describe cómo usar una credencial de servicio en el catálogo de Unity para conectarse a servicios en la nube externos. Un objeto de credencial de servicio de 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

Para poder usar 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 de 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.

  • Credenciales de servicio creadas en el metastore del catálogo de Unity que proporciona acceso al servicio en la nube.

  • Privilegio ACCESS en la credencial de servicio o la propiedad de la credencial de servicio.

Uso de una credencial de servicio en el código

En esta sección se proporcionan ejemplos de uso de credenciales de servicio en un cuaderno. Reemplace 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.

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 de todos los fines o trabajos estableciendo una variable de entorno. De forma predeterminada, el SDK usa esa credencial de servicio si no se proporciona ninguna autenticación. Los usuarios siguen necesitando ACCESS esa credencial de servicio para conectarse al servicio en la nube externo. Databricks no recomienda este enfoque, ya que hace que el código sea menos portátil que asignar un nombre a la credencial del servicio en el 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.

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

  3. Agregue la entrada siguiente en Variables de entorno, reemplazando <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:

Python

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

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]