注意
若要改用 Azure 门户和 Azure Databricks 用户界面预配 Microsoft Entra ID 托管服务主体,请参阅 服务主体。
Microsoft Entra ID 托管服务主体不同于 Azure 资源托管标识,其也受 Azure Databricks 支持进行身份验证。 若要了解如何将托管标识用于 Azure 资源,而不是Microsoft用于 Azure Databricks 身份验证的 Entra ID 托管服务主体,请参阅 将 Azure 托管标识与 Azure Databricks 配合使用。
服务主体是脚本、应用和 CI/CD 平台等自动化工具和系统的标识。 Databricks 建议使用服务主体及其 OAuth 令牌或个人访问令牌,而不是 Azure Databricks 用户帐户和个人访问令牌。 优势包括:
- 授予和限制不受用户影响的资源访问权限。
- 使用户能够更好地保护自己的访问令牌。
- 在不影响其他用户的情况下禁用或删除服务主体。
- 在用户离开组织时删除该用户,但不影响任何服务主体。
按照以下说明使用 Terraform 在 Azure 中创建 Microsoft Entra ID 托管服务主体,使用 Databricks Terraform 提供程序将 Microsoft Entra ID 服务主体链接到 Azure Databricks 工作区,然后根据需要为服务主体创建 Microsoft Entra ID 令牌或 Azure Databricks OAuth 令牌。
要求
- Terraform CLI。 请参阅下载 Terraform。
- 在 Azure CLI 中,通过运行 az login命令登录到目标 Microsoft Entra ID 订阅。 若要使用用户帐户或服务主体登录,请参阅 使用 Azure CLI 登录。
第 1 步:创建服务主体
如果已有可用的 Microsoft Entra ID 托管服务主体,请跳到步骤 2。
- 在终端中,创建一个空目录,然后切换到该目录。 (每组单独的 Terraform 配置文件必须在其自己的目录中。)例如: - mkdir terraform_azure_service_principal_demo && cd terraform_azure_service_principal_demo。- mkdir terraform_azure_service_principal_demo && cd terraform_azure_service_principal_demo
- 在此空目录中,创建一个名为 - main.tf的文件。 在此文件中添加以下内容,然后保存文件。- variable "azure_service_principal_display_name" { description = "A display name for the <entra-service-principal>." type = string } terraform { required_providers { azuread = { source = "hashicorp/azuread" } } } provider "azurerm" { features {} } resource "azuread_application" "this" { display_name = var.azure_service_principal_display_name } resource "azuread_service_principal" "this" { application_id = azuread_application.this.application_id } resource "time_rotating" "month" { rotation_days = 30 } resource "azuread_service_principal_password" "this" { service_principal_id = azuread_service_principal.this.object_id rotate_when_changed = { rotation = time_rotating.month.id } } output "azure_client_id" { description = "The Azure AD service principal's application (client) ID." value = azuread_application.this.application_id } output "azure_client_secret" { description = "The Azure AD service principal's client secret value." value = azuread_service_principal_password.this.value sensitive = true }
- 在相同目录中,创建名为 - terraform.tfvars的文件。 在该文件中添加以下内容,替换以下值,然后保存文件:- 将 azure_service_principal_display_name值替换为 Microsoft Entra ID 服务主体的显示名称。
 - azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
- 将 
- 运行 - main.tf命令来初始化包含- terraform init文件的工作目录。 有关详细信息,请查看 Terraform 网站上的命令:init。- terraform init
- 通过运行 - terraform validate命令检查配置中是否存在任何语法错误。 有关详细信息,请查看 Terraform 网站上的命令:validate。- terraform validate
- 运行 - terraform apply命令应用所需的更改来达到所需的配置状态。 有关详细信息,请查看 Terraform 网站上的命令:apply。- terraform apply
创建服务主体后,复制 azure_client_id 和 azure_client_secret 输出值,因为稍后会用到这些值。
要获取 azure_client_secret 值,请查看 outputs.client_secret.value 文件中 terraform.tfstate 的值,该文件位于包含 main.tf 文件的工作目录中。
第 2 步:将服务主体添加到 Azure Databricks 工作区
注意
以下内容说明如何在 Azure Databricks 工作区级别添加服务主体。 如果 Azure Databricks 工作区启用了联合身份验证,则以下内容还会自动将服务主体同步到相关的 Azure Databricks 帐户。
- 在终端中,创建一个空目录,然后切换到该目录。 每组单独的 Terraform 配置文件必须在其自己的目录中。 例如: - mkdir terraform_databricks_service_principal_demo && cd terraform_databricks_service_principal_demo。- mkdir terraform_databricks_service_principal_demo && cd terraform_databricks_service_principal_demo
- 在此空目录中,创建一个名为 - main.tf的文件。 在此文件中添加以下内容,然后保存文件。- variable "databricks_host" { description = "The Azure Databricks workspace URL." type = string } variable "azure_client_id" { type = string description = "The application (client) ID of the <entra-service-principal> to link to an Azure Databricks service principal. This application (client) ID will be the application ID of the Azure Databricks service principal." } variable "databricks_service_principal_display_name" { type = string description = "A workspace display name for the Azure Databricks service principal." } terraform { required_providers { databricks = { source = "databricks/databricks" } } } provider "databricks" { host = var.databricks_host } resource "databricks_service_principal" "sp" { application_id = var.azure_client_id display_name = var.databricks_service_principal_display_name } output "databricks_service_principal_application_id" { value = databricks_service_principal.sp.application_id description = "Application ID of the Azure Databricks service principal." } output "databricks_service_principal_display_name" { value = databricks_service_principal.sp.display_name description = "Workspace display name of the Azure Databricks service principal." } output "databricks_workspace_service_principal_id" { value = databricks_service_principal.sp.id description = "Workspace ID of the Azure Databricks service principal. This ID is generated by Azure Databricks for this workspace." }- 注意 - 若要将此服务主体添加到组,以及向此服务主体添加权利,请参阅 Terraform 网站上的 databricks_service_principal。 
- 在相同目录中,创建名为 - terraform.tfvars的文件。 在该文件中添加以下内容,替换以下值,然后保存文件:- 将 databricks_host值替换为 Azure Databricks 工作区的 URL。
- 将 azure_client_id替换为步骤 1 中的值azure_client_id。
- 将 databricks_service_principal_display_name值替换为 Azure Databricks 服务主体的工作区显示名称。
 - databricks_host = "<The Azure Databricks workspace URL, starting with https://>" azure_client_id = "<The Azure client ID of the Azure Active AD service principal>" databricks_service_principal_display_name = "<A workspace display name for the Azure Databricks service principal>"
- 将 
- 运行 - main.tf命令来初始化包含- terraform init文件的工作目录。 有关详细信息,请查看 Terraform 网站上的命令:init。- terraform init
- 通过运行 - terraform validate命令检查配置中是否存在任何语法错误。 有关详细信息,请查看 Terraform 网站上的命令:validate。- terraform validate
- 运行 - terraform apply命令应用所需的更改来达到所需的配置状态。 有关详细信息,请查看 Terraform 网站上的命令:apply。- terraform apply
创建服务主体后,复制 databricks_service_principal_application_id 输出值,因为需要使用它创建服务主体的 Microsoft Entra ID 令牌。
(可选)步骤 3:为 Microsoft Entra ID 服务主体创建 Microsoft Entra ID 访问令牌
重要
Databricks 不建议手动创建Microsoft Entra ID 令牌。 它们将在一小时内过期,需要手动更换。 而是使用具有 统一身份验证 的工具或 SDK 自动处理令牌管理。
(可选)步骤 4:为 Microsoft Entra ID 服务主体创建 Azure Databricks OAuth 令牌
重要
Databricks 不建议为 Microsoft Entra ID 托管服务主体手动创建 Azure Databricks OAuth 令牌。 它们将在一小时内过期,需要手动更换。 而是使用实现 统一身份验证 的工具或 SDK,通过 授权服务主体访问 Azure Databricks 和 OAuth 自动生成和替换令牌。
如果需要为 Microsoft Entra ID 服务主体手动创建 Azure Databricks OAuth 令牌,请参阅 手动生成 OAuth M2M 访问令牌。