使用 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 上的 Azure DevOps 进行身份验证

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

  • Azure Databricks 主机。

    • 对于帐户操作,请指定 https://accounts.azuredatabricks.net
    • 对于工作区操作,Databricks 建议指定每个工作区的 URL,例如 https://adb-1234567890123456.7.azuredatabricks.net ,并明确地将 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.azuredatabricks.net)。
  • DATABRICKS_ACCOUNT_ID
  • ARM_TENANT_ID
  • ARM_CLIENT_ID
  • ARM_CLIENT_SECRET

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

  • DATABRICKS_HOST,设置为 Azure Databricks 每工作区 URL 的值,例如 https://adb-1234567890123456.7.azuredatabricks.net
  • ARM_TENANT_ID
  • ARM_CLIENT_ID
  • ARM_CLIENT_SECRET

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

配置文件

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

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

[<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.azuredatabricks.net

[<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,请执行以下操作之一:

  • 设置“ 环境 ”选项卡上指定的环境变量。
  • 根据.databrickscfg”选项卡上指定的设置文件中的值

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

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

Databricks Connect

注意

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

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

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

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

.databrickscfg值优先于环境变量。

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

Visual Studio Code 扩展

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

  1. 为“.databrickscfg”选项卡上指定的 Azure Databricks 工作区级别作设置文件中的值
  2. 在适用于 Visual Studio Code 的 Databricks 扩展中,单击“配置”窗格中的“配置 Databricks”
  3. 在“命令面板”中,对于“Databricks 主机”,请输入每工作区 URL(例如 https://adb-1234567890123456.7.azuredatabricks.net),然后按 Enter
  4. 在命令面板中,在 URL 列表中选择目标配置文件的名称

有关更多详细信息,请参阅为适用于 Visual Studio Code 的 Databricks 扩展设置身份验证

Terraform

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

provider "databricks" {
  alias = "accounts"
}

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

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.azuredatabricks.net

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.azuredatabricks.net

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.azuredatabricks.net

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.azuredatabricks.net

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.azuredatabricks.net

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.azuredatabricks.net

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.azuredatabricks.net

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 进行身份验证

其他资源