Microsoft Entra ID 服务主体身份验证

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

注意

Databricks 建议在大多数情况下使用 OAuth 计算机到计算机 (M2M) 身份验证,而不是 Microsoft Entra ID 服务主体身份验证。 这是因为 OAuth M2M 身份验证使用 Azure Databricks OAuth 访问令牌,它在仅使用 Azure Databricks 进行身份验证时更可靠。

在需要同时向 Azure Databricks 和其他 Azure 资源进行身份验证(需要 Microsoft Entra ID 令牌)的情况下,应仅使用 Microsoft Entra ID 服务主体身份进行验证。

Microsoft Entra ID 服务主体不同于 Azure 资源托管标识,后者的身份验证也受 Azure Databricks 支持。 要了解如何使用 Azure 资源托管标识(而不是 Microsoft Entra ID 服务主体)进行 Azure Databricks 身份验证,请参阅设置和使用 Azure 托管标识身份验证以实现 Azure Databricks 自动化

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

  • Azure Databricks 主机。

    • 对于帐户操作,请指定 https://accounts.databricks.azure.cn

    • 对于工作区操作,请指定每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn

      如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请改为指定 Azure 资源 ID。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure 资源具有“参与者”或“所有者”权限。

  • 对于帐户操作,请指定 Azure Databricks 帐户 ID

  • Azure 资源 ID。

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

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

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

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

环境

要将特定 Azure Databricks 身份验证类型的环境变量与工具或 SDK 结合使用,请参阅 Azure Databricks 工具或 SDK 支持的身份验证类型或者有关该工具或 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

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 DATABRICKS_AZURE_RESOURCE_ID 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 HOST 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

配置文件

.databrickscfg 文件中使用以下字段创建或标识 Azure Databricks 配置文件。 如果创建配置文件,请将占位符替换为相应值。 要将配置文件与工具或 SDK 结合使用,请参阅 Azure Databricks 工具或 SDK 支持的身份验证类型,或者有关该工具或 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-subscription-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-subscription-id>
azure_client_id     = <azure-service-principal-application-id>
azure_client_secret = <azure-service-principal-client-secret>

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 azure_workspace_resource_id 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 host 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

Cli

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

  • 按本文“环境”部分所述设置环境变量。
  • 按照本文“配置文件”部分所述设置 .databrickscfg 文件中的值。

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

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

连接

注意

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

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

对于 Databricks Connect,可以执行以下操作之一:

  • 按照本文“配置文件”部分所述为 Azure Databricks 工作区级别操作设置 .databrickscfg 文件中的值。 此外,将配置文件中的 cluster_id 环境变量设置为每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn
  • 按照本文“环境”部分所述为 Azure Databricks 工作区级别操作设置环境变量。 此外,将 DATABRICKS_CLUSTER_ID 环境变量设置为每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn

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

若要使用 .databrickscfg 文件中的以下环境变量或值初始化 Databricks Connect 客户端,请参阅以内容之一:

VS Code

对于适用于 Visual Studio Code 的 Databricks 扩展,请执行以下操作:

  1. 按照本文“配置文件”部分所述为 Azure Databricks 工作区级别操作设置 .databrickscfg 文件中的值。
  2. 在 Visual Studio Code 的 Databricks 扩展中,单击“配置”窗格中的“配置 Databricks”。
  3. 在“命令面板”中,对于“Databricks 主机”,请输入每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn,然后按 Enter
  4. 在命令面板中,在 URL 列表中选择目标配置文件的名称

有关详细信息,请参阅 Visual Studio Code 的 Databricks 扩展的身份验证设置

Terraform

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

provider "databricks" {
  alias = "accounts"
}

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 HashiCorp Vault 等其他某个配置存储检索值)。另请参阅保管库提供程序)。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn

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

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

provider "databricks" {
  alias = "workspace"
}

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

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

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 azure_workspace_resource_id 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 host 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

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

Python

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

from databricks.sdk import AccountClient

a = AccountClient()
# ...

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 Azure KeyVault 等其他某个配置存储检索值)。 在本例中,Azure Databricks 帐户控制台 URL 为 https://accounts.databricks.azure.cn

from databricks.sdk import AccountClient

a = AccountClient(
  host                = retrieve_account_console_url(),
  account_id          = retrieve_account_id(),
  azure_tenant_id     = retrieve_azure_tenant_id(),
  azure_client_id     = retrieve_azure_client_id(),
  azure_client_secret = retrieve_azure_client_secret()
)
# ...

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

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 Azure KeyVault 等其他某个配置存储检索值)。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host                = retrieve_workspace_url(),
  azure_tenant_id     = retrieve_azure_tenant_id(),
  azure_client_id     = retrieve_azure_client_id(),
  azure_client_secret = retrieve_azure_client_secret()
)
# ...

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 azure_workspace_resource_id 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 host 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

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

Java

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

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

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 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(retrieveAccountConsoleUrl())
  .setAccountId(retrieveAccountId())
  .setAzureTenantId(retrieveAzureTenantId())
  .setAzureClientId(retrieveAzureClientId())
  .setAzureClientSecret(retrieveAzureClientSecret())
AccountClient a = new AccountClient(cfg);
// ...

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

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

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 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(retrieveWorkspaceUrl())
  .setAzureTenantId(retrieveAzureTenantId())
  .setAzureClientId(retrieveAzureClientId())
  .setAzureClientSecret(retrieveAzureClientSecret())
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 setAzureWorkspaceResourceId 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 setHost 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

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

Go

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

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

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 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:              retrieveAccountConsoleUrl(),
  AccountId:         retrieveAccountId(),
  AzureTenantId:     retrieveAzureTenantId(),
  AzureClientId:     retrieveAzureClientId(),
  AzureClientSecret: retrieveAzureClientSecret(),
}))
// ...

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

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

对于直接配置(将 retrieve 占位符替换为你自己的实现,以从控制台或 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:              retrieveWorkspaceUrl(),
  AzureTenantId:     retrieveAzureTenantId(),
  AzureClientId:     retrieveAzureClientId(),
  AzureClientSecret: retrieveAzureClientSecret(),
}))
// ...

对于工作区级别的操作,如果尚未将 Microsoft Entra ID 服务主体添加到工作区,请指定 AzureWorkspaceResourceId 以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 Host 和工作区 URL。 在这种情况下,Microsoft Entra ID 服务主体必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。

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