共用方式為


使用 Microsoft Entra ID 服務主體的執行作業

作業提供非互動式方式,以在 Azure Databricks 叢集中執行應用程式,例如,應該依排程執行的 ETL 作業或資料分析工作。 這些作業通常會以建立它們的使用者身分執行,但這可能會有一些限制:

  • 建立和執行作業取決於具有適當權限的使用者。
  • 只有建立作業的使用者才能存取作業。
  • 使用者可能會從 Azure Databricks 工作區中移除。

使用服務帳戶—與應用程式,而不是特定使用者相關聯的帳戶—是解決這些限制的常見方法。 在 Azure 中,您可以藉由使用 Microsoft Entra ID 應用程式和服務主體,建立一個服務帳戶。

其中這很重要的範例是當服務主體控制 Azure Data Lake Storage Gen2 帳戶中所儲存資料的存取權時。 使用這些服務主體執行作業可讓作業存取記憶體帳戶中的資料,並提供資料存取範圍的控制權。

本教學課程說明如何建立 Microsoft Entra 應用程式和服務主體,並將該服務主體設為作業的擁有者。 您也將瞭解如何將作業執行權限授與其他不擁有作業的群組。 以下是本教學課程逐步解說的工作概觀:

  1. 在 Microsoft Entra 識別碼中建立服務主體。
  2. 在 Azure Databricks 建立個人存取權杖 (PAT)。 您將使用 PAT 對 Databricks REST API 進行驗證。
  3. 使用 Databricks SCIM API 將服務主體新增為非系統管理使用者至 Azure Databricks。
  4. 在 Azure Databricks 中建立 Azure Key Vault 支援的密碼範圍。
  5. 授與服務主體對密碼範圍的讀取權限。
  6. 在 Azure Databricks 中建立作業,並將作業叢集設定為從密碼範圍讀取密碼。
  7. 將作業的所有權變更為服務主體。
  8. 以服務主體身分執行來測試作業。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

注意

您無法使用已啟用認證傳遞的叢集來執行服務主體所擁有的作業。 如果您的作業需要服務主體存取 Azure 儲存體,請參閱連接到 Azure Data Lake Storage Gen2 和 Blob Storage

需求

在此教學課程中,您將需要下列項目:

  • 具有在 Microsoft Entra ID 租用戶中註冊應用程式所需之權限的使用者帳戶。
  • 您將在 Azure Databricks 工作區中執行作業的系統管理權限。
  • 向 Azure Databricks 提出 API 要求的工具。 本教學課程使用 cURL,但您可以使用任何可讓您提交 REST API 要求的工具。

在 Microsoft Entra 識別碼中建立服務主體

服務主體是 Microsoft Entra ID 應用程式的身分識別。 若要建立將用來執行作業的服務主體:

  1. 在 Azure 入口網站中,依序選取 [Microsoft Entra ID]、[應用程式註冊]、[新建註冊]。>> 為應用程式輸入唯一名稱,並按下 [註冊]
  2. 移至 [憑證和密碼],按下 [新的用戶端密碼],並產生新的用戶端密碼。 將密碼複製並儲存在安全的地方。
  3. 移至 [概觀] 並記下 [應用程式 (用戶端) 識別碼] 與 [目錄 (租用戶) 識別碼]

建立 Azure Databricks 個人存取權杖

您將使用 Azure Databricks 個人存取權杖 (PAT) 向 Databricks REST API 進行驗證。 若要建立可用於提出 API 要求的 PAT:

  1. 移至您的 Azure Databricks 工作區。
  2. 在螢幕右上角,按一下您的使用者名稱,然後按一下 [設定]
  3. 按一下 [開發人員]
  4. 在 [存取權杖] 旁,按一下 [管理]
  5. 按一下 [產生新權杖]
  6. 複製並儲存該權杖值。

提示

此範例會使用個人存取權杖,但您可以針對大多數 API 使用 Microsoft Entra ID 權杖。 最佳做法是 PAT 適用於系統管理設定工作,但生產工作負載偏好的是 Microsoft Entra ID 權杖。

您可以只針對安全性目的,將 PAT 的產生限制為系統管理員。 如需詳細資訊,請參閱 監視和撤銷個人存取令牌

將服務主體新增至 Azure Databricks 工作區

您可以使用 [服務主體 API],將 Microsoft Entra ID 服務主體新增至工作區。 您也必須授與服務主體權限,才能啟動自動化作業叢集。 您可以透過 allow-cluster-create 權限授與此權限。 開啟終端機,並使用 Databricks CLI 執行下列命令來新增服務主體,並授與必要的權限:

databricks service-principals create --json '{
  "schemas":[
    "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
  ],
  "applicationId":"<application-id>",
  "displayName": "test-sp",
  "entitlements":[
    {
      "value":"allow-cluster-create"
    }
  ]
}'

Application (client) ID 取代 <application-id> 為 Microsoft Entra ID 應用程式註冊。

在 Azure Databricks 建立 Azure Key Vault 支援的密碼範圍

密碼範圍提供安全儲存和管理密碼。 您將與服務主體相關聯的密碼儲存在密碼範圍中。 您可以將密碼儲存在 Azure Databricks 密碼範圍或 Azure Key Vault 支援的密碼範圍。 這些指示說明 Azure Key Vault 支援的選項:

  1. 在 Azure 入口網站中建立 Azure Key Vault 執行個體。
  2. 建立由 Azure Key Vault執行個體支援的 Azure Databricks 密碼範圍。

步驟 1:建立 Azure Key Vault 執行個體

  1. 在 Azure 入口網站 中,選取 [金鑰保存庫 >+ 新增],並提供 金鑰保存庫 名稱。

  2. 按下 [檢閱 + 建立]

  3. 驗證完成時,按一下 [建立]

  4. 建立金鑰保存庫之後,請移至新金鑰保存庫 的 [屬性] 頁面。

  5. 複製並儲存 [保存庫 URI] 和 [資源識別碼]

    Azure Key Vault 屬性

步驟 2:建立 Azure Key Vault 支援的密碼範圍

Azure Databricks 資源可以藉由建立金鑰保存庫支援的密碼範圍來參考儲存在 Azure Key Vault 中的密碼。 若要建立 Azure Databricks 密碼範圍:

  1. 移至位於 https://<per-workspace-url>/#secrets/createScope 的 [Azure Databricks 建立密碼範圍] 頁面。 針對您的 Azure Databricks 工作,,將 per-workspace-url 取代為唯一的個別工作區網址

  2. 輸入 [範圍名稱]

  3. 針對您在步驟 1:建立 Azure Key Vault 執行個體建立的 Azure Key Vault,輸入 [保存庫 URI] 和 [資源標識別碼]

  4. 按一下 [建立]

    建立密碼範圍

在 Azure Key Vault 中儲存用戶端密碼

  1. 在 Azure 入口網站中,前往 [金鑰保存庫] 服務。

  2. 選取在步驟 1:建立 Azure Key Vault 執行個體中建立的金鑰保存庫。

  3. 在 [設定>密碼] 底下,按下 [產生/匯入]

  4. 選取 [手動上傳] 選項,然後在 [值] 欄位中輸入用戶端密碼。

    建立密碼

  5. 按一下 [建立]。

授與服務主體對密碼範圍的讀取權限

您已建立密碼範圍,並將服務主體的用戶端密碼儲存在該範圍中。 現在,您會提供服務主體存取權,以從密碼範圍讀取密碼。

開啟終端機並使用 Databricks CLI 執行下列命令,:

databricks secrets put-acl <scope-name> <application-id> READ
  • <scope-name> 取代為包含用戶端密碼的 Azure Databricks 密碼範圍名稱。
  • Application (client) ID 取代 <application-id> 為 Microsoft Entra ID 應用程式註冊。

在 Azure Databricks 中建立作業,並將叢集設定為從密碼範圍讀取密碼

您現在已準備好建立可當做新服務主體執行的作業。 您將使用在 Azure Databricks UI 中建立的筆記本,並新增設定以允許作業叢集擷取服務主體的密碼。

  1. 移至您的 Azure Databricks 登陸頁面,並選取 [新增>筆記本]。 提供筆記本的名稱,然後選取 [SQL] 做為預設語言。

  2. 在筆記本的第一個儲存格中輸入 SELECT 1。 這是一個簡單的命令,只要成功,就會顯示 1。 如果您已將服務主體存取權授與 Azure Data Lake Storage Gen 2 中的特定檔案或路徑,就可以改為從這些路徑讀取。

  3. 移至 [工作流程],然後按下 [建立作業]。 為作業和工作指定名稱,按下 [選取筆記本],然後選取您剛才建立的筆記本。

  4. 按下 [叢集資訊] 旁的 [編輯]

  5. 在 [設定叢集] 頁面上,按下 [進階選項]

  6. 在 [Spark] 索引標籤上,輸入下列 Spark 組態:

    fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
    fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
    fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}}
    fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
    
    • <storage-account> 取代為包含資料的儲存體帳戶名稱。
    • <secret-scope-name>取代為包含用戶端密碼的 Azure Databricks 密碼範圍名稱。
    • Application (client) ID 取代 <application-id> 為 Microsoft Entra ID 應用程式註冊。
    • <secret-name> 取代為與密碼範圍中用戶端密碼值相關聯的名稱。
    • Directory (tenant) ID 取代 <directory-id> 為 Microsoft Entra ID 應用程式註冊。

將作業的所有權變更為服務主體

一個作業只能有一個擁有者,因此必須將作業的所有權從您自己轉移到服務主體。 為了確保其他使用者可以管理作業,您也可以授與 CAN MANAGE 權限給群組。 在此範例中,我們使用權限 API 來設定這些權限。

開啟終端機並使用 Databricks CLI 執行下列命令,:

databricks permissions set jobs <job-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "IS_OWNER"
    },
    {
      "group_name": "admins",
      "permission_level": "CAN_MANAGE"
    }
  ]
}'
  • <job-id> 取代為作業的唯一識別碼。 若要尋找作業識別碼,請按下側邊欄中的 [工作流程],然後按下作業名稱。 作業 ID 就在 [作業詳細資料] 側面板中。
  • Application (client) ID 取代 <application-id> 為 Microsoft Entra ID 應用程式註冊。

作業也需要對筆記本的讀取權限。 使用 Databricks CLI 執行下列命令來授與必要的權限:

databricks permissions set notebooks <notebook-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "CAN_READ"
    }
  ]
}'
  • <notebook-id> 取代為與作業相關聯的筆記本識別碼。 若要尋找識別碼,請移至 Azure Databricks 工作區中的筆記本,並尋找筆記本 URL 中在 notebook/ 之後的數字識別碼。
  • Application (client) ID 取代 <application-id> 為 Microsoft Entra ID 應用程式註冊。

測試作業

您可以使用服務主體來執行作業,就像透過UI、API或 CLI 以使用者身分執行作業一樣。 若要使用 Azure Databricks UI 測試作業:

  1. 移至 Azure Databricks UI 中的工作流程,然後選取作業。
  2. 按下 [立即執行]

如果一切正常執行,您就會看到作業的 [成功] 狀態。 您可以在 UI 中選取作業,以確認輸出:

作業輸出

深入了解

若要深入瞭解如何建立和執行作業,請參閱排程及協調工作流程