使用 Unity Catalog 服务凭据连接到外部云服务

本文介绍如何使用 Unity Catalog 中的服务凭据连接到外部云服务。 Unity 目录中的服务凭据对象封装了一个长期云凭据,该凭据提供用户需要从 Azure Databricks 连接到的外部云服务的访问权限。

另请参阅:

开始之前

在使用服务凭据连接到外部云服务之前,必须具备:

  • 为 Unity Catalog 启用的 Azure Databricks 工作区。

  • Databricks Runtime 16.2 或更高版本上的计算资源。

    不支持 SQL 仓库。

    Databricks Runtime 15.4 LTS 及更高版本上提供了服务凭据的公共预览版,支持 Python,但不支持 Scala。

  • 在 Unity Catalog 元存储中创建的服务凭据,用于访问云服务。

  • ACCESS 服务凭据或服务凭据所有权的 特权。

在代码中使用服务凭据

本部分提供了在笔记本中使用服务凭据的示例。 替换占位符值。 这些示例不一定显示所需库的安装,具体取决于要访问的客户端服务。

Python 示例:将 Azure SDK 客户端配置为使用特定服务凭据

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)

Scala 示例:将 Azure SDK 客户端配置为使用特定服务凭据

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()

为计算资源指定默认服务凭据

可以选择通过设置环境变量为全用途群集或作业计算群集指定默认服务凭据。 默认情况下,如果未提供身份验证,SDK 将使用该服务凭据。 用户仍需要该服务凭据上的 ACCESS 才能连接到外部云服务。 Databricks 不建议使用此方法,因为它使代码的可移植性低于在代码中命名服务凭据。

注意

无服务器计算和 SQL 仓库不支持环境变量,因此它们不支持默认服务凭据。

  1. 打开群集的编辑页面。

    请查看管理计算

  2. 单击页面底部的“高级”选项,然后转到“Spark”选项卡。

  3. 环境变量中添加以下条目,替换 <your-service-credential>

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

以下代码示例未指定服务凭据。 而是使用 DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME 环境变量中指定的服务凭据:

Python语言

如果使用默认服务凭据,则无需将凭据指定为参数:

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)

将此与 Python 示例中的示例进行比较:将 Azure SDK 客户端配置为使用特定服务凭据,该凭据不导入 DefaultAzureCredential 并添加凭据规范:

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

Scala

对于 Scala,请将服务凭据名称替换为 null

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