使用 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 令牌。
需求
- Terraform CLI。 請參閱 下載 Terraform。
- Azure CLI 會執行
az login
命令,登入目標 Microsoft Entra ID (先前稱為 Azure Active Directory) 訂用帳戶。 若要使用 Microsoft Entra ID 服務主體登入,請參閱 使用 Microsoft Entra ID 服務主體登入 Azure CLI。 若要使用 Azure Databricks 使用者帳戶登入,請參閱 使用 Azure Databricks 使用者帳戶登入 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>>"
- 將
執行
terraform init
命令,main.tf
初始化包含檔案的工作目錄。 如需詳細資訊,請參閱 命令:Terraform 網站上的 init 。terraform init
執行
terraform validate
命令,檢查組態中是否有任何語法錯誤。 如需詳細資訊,請參閱 命令:在 Terraform 網站上驗證 。terraform validate
執行 命令,套用
terraform apply
達到組態所需狀態所需的變更。 如需詳細資訊,請參閱 命令:在 Terraform 網站上套用 。terraform apply
建立服務主體之後,請複製 azure_client_id
和 azure_client_secret
輸出值,因為稍後會用到這些值。
若要取得azure_client_secret
值,請參閱 檔案中的 terraform.tfstate
值outputs.client_secret.value
,其位於包含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
值取代為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>"
- 將
執行
terraform init
命令,main.tf
初始化包含檔案的工作目錄。 如需詳細資訊,請參閱 命令:Terraform 網站上的 init 。terraform init
執行
terraform validate
命令,檢查組態中是否有任何語法錯誤。 如需詳細資訊,請參閱 命令:在 Terraform 網站上驗證 。terraform validate
執行 命令,套用
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) 驗證的存取令牌。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應