Azure 托管标识身份验证
Azure 托管标识身份验证使用 Azure 资源托管标识(以前称为托管服务标识 (MSI))与 Azure Databricks 进行身份验证。 对 Azure Databricks 帐户和工作区操作的编程调用在使用支持托管标识的 Azure 资源(如 Azure VM)时使用此托管标识。
- 有关托管标识的信息,请参阅什么是 Azure 资源托管标识?。
- 若要了解如何创建托管标识并授予其访问 Azure Databricks 帐户和工作区的权限,请参阅为 Azure Databricks 自动化设置和使用 Azure 托管标识身份验证。
注意
Azure 资源的托管标识不同于 Microsoft Entra ID 服务主体,因为 Azure Databricks 还支持身份验证。 若要了解如何将 Microsoft Entra ID 服务主体用于 Azure Databricks 身份验证,而不是 Azure 资源托管标识,请参阅:
Azure 托管标识身份验证仅在支持托管标识的正确配置的资源(如 Azure 虚拟机 [Azure VM])和 Azure Databricks 及工作区之间受支持。
要使用 Azure Databricks 配置 Azure 托管标识身份验证,必须在受到适当支持的 Azure VM 上设置以下关联的环境变量、.databrickscfg
字段、Terraform 字段或 Config
字段:
- Azure Databricks 主机。
- 对于帐户操作,请指定
https://accounts.databricks.azure.cn
。 - 对于工作区操作,请指定每工作区 URL,例如
https://adb-1234567890123456.7.databricks.azure.cn
。
- 对于帐户操作,请指定
- 对于帐户操作,请指定 Azure Databricks 帐户 ID。
- 托管标识的租户 ID。
- 托管标识的客户端 ID。
- Azure 资源 ID。
- 将 Azure 使用托管标识设置为 true。
若要使用 Azure Databricks 执行 Azure 托管标识身份验证,请根据相关的工具或 SDK 在代码中集成以下内容:
环境
若要通过工具或 SDK 对特定 Azure Databricks 身份验证类型使用环境变量,请参阅对 Azure Databricks 资源的访问进行身份验证,或该工具或 SDK 的相关文档。 另请参阅客户端统一身份验证的环境变量和字段和客户端统一身份验证的默认方法。
对于帐户级操作,请设置以下环境变量:
DATABRICKS_HOST
,设置为 Azure Databricks 帐户控制台 URL 的值,即https://accounts.databricks.azure.cn
。DATABRICKS_ACCOUNT_ID
ARM_CLIENT_ID
ARM_USE_MSI
:设置为true
。
对于工作区级操作,请设置以下环境变量:
DATABRICKS_HOST
,设置为 Azure Databricks 每工作区 URL 的值,例如https://adb-1234567890123456.7.databricks.azure.cn
。ARM_CLIENT_ID
ARM_USE_MSI
:设置为true
。
对于工作区级操作,如果尚未将目标标识添加到工作区,请指定 DATABRICKS_AZURE_RESOURCE_ID
以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 DATABRICKS_HOST
和工作区 URL。 在这种情况下,目标标识必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。
配置文件
在 .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_client_id = <azure-managed-identity-application-id>
azure_use_msi = true
对于工作区级操作,请在 .databrickscfg
文件中设置以下值。 在本例中,主机是 Azure Databricks 每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn
:
[<some-unique-configuration-profile-name>]
host = <workspace-url>
azure_client_id = <azure-managed-identity-application-id>
azure_use_msi = true
对于工作区级操作,如果尚未将目标标识添加到工作区,请指定 azure_workspace_resource_id
以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 host
和工作区 URL。 在这种情况下,目标标识必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。
CLI
对于 Databricks CLI,请执行以下操作之一:
- 按本文“环境”部分所述设置环境变量。
- 按照本文“配置文件”部分所述设置
.databrickscfg
文件中的值。
环境变量始终优先于 .databrickscfg
文件中的值。
另请参阅《Azure 托管标识身份验证》。
连接
注意
Databricks Connect 依赖 Databricks SDK for Python 进行身份验证。 Databricks SDK for Python 尚未实现 Azure 托管标识身份验证。
VS Code
注意
Visual Studio Code 的 Databricks 扩展尚不支持 Azure 托管标识身份验证。
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_client_id = <retrieve-azure-client-id>
azure_use_msi = true
}
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_client_id = <retrieve-azure-client-id>
azure_use_msi = true
}
对于工作区级操作,如果尚未将目标标识添加到工作区,请指定 azure_workspace_resource_id
以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 host
和工作区 URL。 在这种情况下,目标标识必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。
有关使用 Databricks Terraform 提供程序进行身份验证的详细信息,请参阅身份验证。
Python
注意
Databricks SDK for Python 尚未实现 Azure 托管标识身份验证。
Java
注意
Databricks SDK for Java 尚未实现 Azure 托管标识身份验证。
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(),
AzureClientId: retrieveAzureClientId(),
AzureUseMSI: true,
}))
// ...
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(),
AzureClientId: retrieveAzureClientId(),
AzureUseMSI: true,
}))
// ...
对于工作区级操作,如果尚未将目标标识添加到工作区,请指定 AzureResourceID
以及 Azure Databricks 工作区的 Azure 资源 ID,而不是 Host
和工作区 URL。 在这种情况下,目标标识必须至少对 Azure Databricks 工作区的 Azure 资源具有“参与者”或“所有者”权限。
有关借助使用 Go 并实现 Databricks 客户端统一身份验证的 Databricks 工具和 SDK 进行身份验证的详细信息,请参阅使用 Azure Databricks 帐户或工作区对 Databricks SDK for Go 进行身份验证。