共用方式為


使用 Terraform 布建服務主體

注意

若要改用 Azure 入口網站 和 Azure Databricks 使用者介面布建 Microsoft Entra ID 受控服務主體,請參閱管理服務主體

Microsoft Entra ID 受控服務主體與 Azure 資源的受控識別不同,Azure Databricks 也支持進行驗證。 若要瞭解如何針對 Azure 資源使用受控識別,而不是 Azure Databricks 驗證的 Microsoft Entra ID 受控服務主體,請參閱 設定和使用 Azure Databricks 自動化的 Azure 受控識別驗證。

服務主體是自動化工具和系統的身分識別,例如腳本、應用程式和 CI/CD 平臺。 Databricks 建議使用服務主體及其 OAuth 令牌或個人存取令牌,而不是您的 Azure Databricks 用戶帳戶和個人存取令牌。 這些權益包括:

  • 授與和限制與使用者無關的資源存取權。
  • 讓用戶能夠更妥善地保護自己的存取令牌。
  • 停用或刪除服務主體,而不會影響其他使用者。
  • 當使用者離開組織時移除使用者,而不會影響任何服務主體。

請遵循這些指示,使用 Terraform 在 Azure 中建立 Microsoft Entra ID 受控服務主體、使用 Databricks Terraform 提供者 ,將 Microsoft Entra ID 服務主體連結至您的 Azure Databricks 工作區,然後選擇性地為服務主體建立 Microsoft Entra ID 令牌或 Azure Databricks OAuth 令牌。

需求

步驟 1:建立服務主體

如果您已經有可用的 Microsoft Entra ID 受控服務主體,請直接跳至步驟 2。

  1. 在您的終端機中,建立空的目錄,然後切換至該目錄。 (每個個別的 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
    
  2. 在此空白目錄中,建立名為 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
    }
    
  3. 在相同的目錄中,建立名為 terraform.tfvars的檔案。 將下列內容新增至此檔案,並取代下列值,然後儲存盤案:

    • azure_service_principal_display_name 值取代為 Microsoft Entra ID 服務主體的顯示名稱。
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. 執行 terraform init 命令,main.tf初始化包含檔案的工作目錄。 如需詳細資訊,請參閱 命令:Terraform 網站上的 init

    terraform init
    
  5. 執行 terraform validate 命令,檢查組態中是否有任何語法錯誤。 如需詳細資訊,請參閱 命令:在 Terraform 網站上驗證

    terraform validate
    
  6. 執行 命令,套用 terraform apply 達到組態所需狀態所需的變更。 如需詳細資訊,請參閱 命令:在 Terraform 網站上套用

    terraform apply
    

建立服務主體之後,請複製 azure_client_idazure_client_secret 輸出值,因為稍後會用到這些值。

若要取得azure_client_secret值,請參閱 檔案中的 terraform.tfstateoutputs.client_secret.value,其位於包含main.tf檔案的工作目錄中。

步驟 2:將服務主體新增至 Azure Databricks 工作區

注意

下列內容會在 Azure Databricks 工作區層級新增服務主體。 如果您的 Azure Databricks 工作區已啟用 身分識別同盟,則下列內容也會自動將服務主體同步至相關的 Azure Databricks 帳戶。

  1. 在您的終端機中,建立空的目錄,然後切換至該目錄。 每個個別的 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
    
  2. 在此空白目錄中,建立名為 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

  3. 在相同的目錄中,建立名為 terraform.tfvars的檔案。 將下列內容新增至此檔案,並取代下列值,然後儲存盤案:

    • databricks_host 值取代為 Azure Databricks 工作區的 URL。
    • azure_client_id 值取代為 azure_client_id 步驟 1 中的值。
    • 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>"
    
  4. 執行 terraform init 命令,main.tf初始化包含檔案的工作目錄。 如需詳細資訊,請參閱 命令:Terraform 網站上的 init

    terraform init
    
  5. 執行 terraform validate 命令,檢查組態中是否有任何語法錯誤。 如需詳細資訊,請參閱 命令:在 Terraform 網站上驗證

    terraform validate
    
  6. 執行 命令,套用 terraform apply 達到組態所需狀態所需的變更。 如需詳細資訊,請參閱 命令:在 Terraform 網站上套用

    terraform apply
    

建立服務主體之後,請複製 databricks_service_principal_application_id 輸出值,因為您需要它來建立服務主體的 Microsoft Entra 識別符令牌。

(選擇性)步驟 3:為 Microsoft Entra ID 服務主體建立 Microsoft Entra 標識符 (先前稱為 Azure Active Directory) 存取令牌

Databricks 不建議您手動為 Microsoft Entra ID 服務主體建立 Microsoft Entra ID(先前稱為 Azure Active Directory)令牌。 這是因為每個 Microsoft Entra ID 令牌都是短期的,通常會在一小時內到期。 在這段時間之後,您必須手動產生取代的 Microsoft Entra ID 令牌。 請改用其中一個參與的工具或 SDK 來實 作 Databricks 用戶端統一驗證 標準。 這些工具和 SDK 會自動為您產生並取代過期的 Microsoft Entra ID 令牌,並利用下列 Databricks 驗證類型:

如果您需要手動為 Microsoft Entra ID 服務主體建立 Microsoft Entra ID 令牌,請收集下列資訊,然後遵循使用 Microsoft 身分識別平台 REST API 取得 Microsoft Entra ID 存取令牌中的指示,或使用 Azure CLI 取得 Microsoft Entra ID 存取令牌:

  • Microsoft Entra ID 服務主體的租使用者識別碼,您會在指示中用來做為租用戶標識碼/ 目錄(租使用者)標識符 / <tenant-id> 。 若要取得租使用者標識碼,請參閱在 Azure 入口網站 中布建服務主體。
  • 步驟 databricks_service_principal_application_id 2 中的值,您會在指示中用來做為用戶端識別碼/ 應用程式(用戶端)識別碼 / <client-id>
  • 步驟 azure_client_secret 1 中的值,您會在指示中用來做為用戶端秘密/ / <client-secret>

建立 Microsoft Entra ID 令牌之後,請複製 access_token 值,因為您必須將它提供給腳本、應用程式或系統。

(選擇性)步驟 4:為 Microsoft Entra ID 服務主體建立 Azure Databricks OAuth 令牌

Databricks 不建議您手動為 Microsoft Entra ID 受控服務主體建立 Azure Databricks OAuth 令牌。 這是因為每個 Azure Databricks OAuth 令牌都是短期的,通常會在一小時內到期。 在此之後,您必須手動產生取代的 Azure Databricks OAuth 令牌。 請改用其中一個參與的工具或 SDK 來實 作 Databricks 用戶端統一驗證 標準。 這些工具和 SDK 會自動為您產生並取代過期的 Azure Databricks OAuth 令牌,並利用 OAuth 機器對機器 (M2M) 驗證

如果您需要為 Microsoft Entra ID 服務主體手動建立 Azure Databricks OAuth 令牌,請參閱 手動產生和使用 OAuth 機器對機器 (M2M) 驗證的存取令牌。