使用 Microsoft Entra 服务主体进行身份验证

Microsoft Entra 服务主体 身份验证使用 Microsoft Entra 服务主体的凭据进行身份验证。 要创建和管理 Azure Databricks 的服务主体,请参阅:

注意

Databricks 建议在大多数情况下使用 OAuth 计算机到计算机 (M2M) 身份验证 。 OAuth M2M 仅使用 Azure Databricks 进行身份验证时使用更可靠的 OAuth 访问令牌。 仅当必须同时向 Azure Databricks 和其他 Azure 资源进行身份验证时,才使用 Microsoft Entra 服务主体身份验证。

有关详细信息,请参阅 将 Azure 托管标识与 Azure Databricks 配合使用。

若要使用 Azure Databricks 配置 Microsoft Entra 服务主体身份验证,必须设置以下关联的环境变量、 .databrickscfg 字段、Terraform 字段或 Config 字段:

  • Azure Databricks 主机

    • 对于帐户操作,请指定 https://accounts.databricks.azure.cn。
    • 对于工作区操作,Databricks 建议指定每个工作区的 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn ,并明确地将 Microsoft Entra 服务主体分配给工作区。 或者,指定 Azure 资源 ID。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。
  • 对于帐户操作,请指定 Azure Databricks 帐户 ID。

  • Azure 资源 ID。

  • Microsoft Entra 服务主体的租户 ID。

  • Microsoft Entra 服务主体的客户端 ID。

  • Microsoft Entra 服务主体的客户端密钥。

若要使用 Azure Databricks 执行 Microsoft Entra 服务主体身份验证,请根据参与的工具或 SDK 在代码中集成以下内容:

环境变量

若要对工具或 SDK 的特定 Azure Databricks 身份验证类型使用环境变量,请参阅 授权访问 Azure Databricks 资源 或工具或 SDK 的文档。 另请参阅 环境变量和字段,了解统一身份验证 和 身份验证方法优先级。

对于帐户级操作,请设置以下环境变量:

  • DATABRICKS_HOST,将其设置为 Azure Databricks 账户控制台 URL,即 https://accounts.databricks.azure.cn。
  • DATABRICKS_ACCOUNT_ID
  • ARM_TENANT_ID
  • ARM_CLIENT_ID
  • ARM_CLIENT_SECRET

对于工作区级操作,请设置以下环境变量:

  • DATABRICKS_HOST,将其设置为 Azure Databricks 每个工作区的 URL 的值,例如 https://adb-1234567890123456.7.databricks.azure.cn。
  • ARM_TENANT_ID
  • ARM_CLIENT_ID
  • ARM_CLIENT_SECRET

Databricks 建议使用 DATABRICKS_HOST 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 DATABRICKS_AZURE_RESOURCE_ID 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

配置文件

在 .databrickscfg 文件中,使用以下字段创建或识别 Azure Databricks 配置文件。 如果您创建该配置文件,请将占位符替换为相应的值。 若要将配置文件与工具或 SDK 配合使用,请参阅 授权访问 Azure Databricks 资源 或工具或 SDK 的文档。 另请参阅 环境变量和字段,了解统一身份验证 和 身份验证方法优先级。

对于帐户级操作,请在 .databrickscfg 文件中设置以下值。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn:

[<some-unique-configuration-profile-name>]
host                = <account-console-url>
account_id          = <account-id>
azure_tenant_id     = <azure-service-principal-tenant-id>
azure_client_id     = <azure-service-principal-application-id>
azure_client_secret = <azure-service-principal-client-secret>

对于工作区级操作,请在 .databrickscfg 文件中设置以下值。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn:

[<some-unique-configuration-profile-name>]
host                = <workspace-url>
azure_tenant_id     = <azure-service-principal-tenant-id>
azure_client_id     = <azure-service-principal-application-id>
azure_client_secret = <azure-service-principal-client-secret>

Databricks 建议使用 host 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 azure_workspace_resource_id 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

Databricks 命令行界面 (CLI)

对于 Databricks CLI,请执行以下操作之一:

  • 设置“ 环境 ”选项卡上指定的环境变量。
  • 按照Profile选项卡中的说明,在您的.databrickscfg文件中设置相应的值。

环境变量始终优先于 .databrickscfg 文件中的值。

另请参阅 Microsoft Entra ID 服务主体身份验证。

Databricks Connect

注意

以下 Databricks Connect 版本支持 Microsoft Entra 服务主体身份验证:

  • 对于 Python:适用于 Databricks Runtime 13.1 及更高版本的 Databricks Connect。
  • 对于 Scala,Databricks Connect 适用于 Databricks Runtime 13.3 LTS 及更高版本。

对于 Databricks Connect,您可以选择以下操作之一:

  • 使用配置文件:如.databrickscfg”选项卡上所述,在文件中设置工作区级别值。此外,将cluster_id工作区实例 URL 设置为工作区实例 URL。
  • 使用环境变量: 设置与“ 环境 ”选项卡上显示的相同值。此外,将 DATABRICKS_CLUSTER_ID 工作区实例 URL 设置为工作区实例 URL。

.databrickscfg值优先于环境变量。

若要使用这些设置初始化 Databricks Connect,请参阅 Databricks Connect 的计算配置。

Visual Studio Code 扩展插件

对于Databricks IDE扩展,请执行以下操作:

  1. 按照 配置文件 选项卡中的说明,在您的 .databrickscfg 文件中设置 Azure Databricks 工作区级操作 的值。

  2. 在 Databricks IDE 扩展的 配置 面板中,点击 配置 Databricks。

  3. 在 命令面板 中,在 Databricks Host 中输入你的 每个工作区对应的 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn,然后按 Enter。

  4. 在 命令面板 中,在你的 URL 对应的列表中选择目标配置文件名称。

更多细节请参见 Databricks IDE 扩展的设置授权。

Terraform

对于帐户级操作,对于默认身份验证:

provider "databricks" {
  alias = "accounts"
}

对于直接配置,请将占位符替换为控制台或其他一些配置存储区(如 HashiCorp Vault)中的值。 另请参阅 保管库提供程序。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn:

provider "databricks" {
  alias               = "accounts"
  host                = <your-account-console-url>
  account_id          = <your-account-id>
  azure_tenant_id     = <your-azure-tenant-id>
  azure_client_id     = <your-azure-client-id>
  azure_client_secret = <your-azure-client-secret>
}

对于工作区级操作,对于默认身份验证:

provider "databricks" {
  alias = "workspace"
}

对于直接配置,请将占位符替换为控制台或其他一些配置存储区(如 HashiCorp Vault)中的值。 另请参阅 保管库提供程序。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn:

provider "databricks" {
  alias               = "workspace"
  host                = <your-workspace-url>
  azure_tenant_id     = <your-azure-tenant-id>
  azure_client_id     = <your-azure-client-id>
  azure_client_secret = <your-azure-client-secret>
}

Databricks 建议使用 host 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 azure_workspace_resource_id 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

有关使用 Databricks Terraform 提供程序进行身份验证的详细信息,请参阅身份验证。

用于 Python 的 Databricks SDK

对于帐户级操作,对于默认身份验证:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn:

from databricks.sdk import AccountClient

a = AccountClient(
  host                = get_account_console_url(),
  account_id          = get_account_id(),
  azure_tenant_id     = get_azure_tenant_id(),
  azure_client_id     = get_azure_client_id(),
  azure_client_secret = get_azure_client_secret()
)
# ...

对于工作区级操作,对于默认身份验证:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host                = get_workspace_url(),
  azure_tenant_id     = get_azure_tenant_id(),
  azure_client_id     = get_azure_client_id(),
  azure_client_secret = get_azure_client_secret()
)
# ...

Databricks 建议使用 host 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 azure_workspace_resource_id 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

有关使用 Python 和实现 Databricks 统一身份验证的 Databricks 工具和 SDK 进行身份验证的详细信息,请参阅:

用于 Java 的 Databricks SDK

对于帐户级操作,对于默认身份验证:

import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn:

import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(getAccountConsoleUrl())
  .setAccountId(getAccountId())
  .setAzureTenantId(getAzureTenantId())
  .setAzureClientId(getAzureClientId())
  .setAzureClientSecret(getAzureClientSecret())
AccountClient a = new AccountClient(cfg);
// ...

对于工作区级操作,对于默认身份验证:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在这种情况下,主机是 Azure Databricks 的 每个工作区的 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(getWorkspaceUrl())
  .setAzureTenantId(getAzureTenantId())
  .setAzureClientId(getAzureClientId())
  .setAzureClientSecret(getAzureClientSecret())
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Databricks 建议使用 setHost 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 setAzureWorkspaceResourceId 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

有关使用 Java 和实现 Databricks 统一身份验证的 Databricks 工具和 SDK 进行身份验证的详细信息,请参阅:

用于 Go 的 Databricks SDK

对于帐户级操作,对于默认身份验证:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:              getAccountConsoleUrl(),
  AccountId:         getAccountId(),
  AzureTenantId:     getAzureTenantId(),
  AzureClientId:     getAzureClientId(),
  AzureClientSecret: getAzureClientSecret(),
}))
// ...

对于工作区级操作,对于默认身份验证:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

对于直接配置,请将函数调用替换为从控制台或其他一些配置存储(例如 Azure KeyVault)获取值的代码。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host:              getWorkspaceUrl(),
  AzureTenantId:     getAzureTenantId(),
  AzureClientId:     getAzureClientId(),
  AzureClientSecret: getAzureClientSecret(),
}))
// ...

Databricks 建议使用 Host 并显式将 Microsoft Entra 服务主体分配给工作区。 或者,与 Azure 资源 ID 一起使用 AzureWorkspaceResourceId 。 此方法需要对 Azure 资源具有参与者或所有者权限,或者具有特定 Azure Databricks 权限的自定义角色。

有关借助使用 Go 并实现 Databricks 客户端统一身份验证的 Databricks 工具和 SDK 进行身份验证的详细信息,请参阅使用 Azure Databricks 帐户或工作区对 Databricks SDK for Go 进行身份验证。

其他资源