管理服務主體

本文介紹如何建立和管理 Azure Databricks 帳戶和工作區的服務主體。

如需 Azure Databricks 身分識別模型的概觀,請參閱 Azure Databricks 身分識別

若要管理服務主體的存取權,請參閱驗證和存取控制

何謂服務主體?

服務主體是您在 Azure Databricks 中建立的身分識別,可與自動化工具、作業和應用程式搭配使用。 服務主體可讓自動化工具和指令碼提供僅限 Azure Databricks 資源的 API 存取權限而言,提供比使用使用者或群組更高的安全性。

您可以使用與 Azure Databricks 使用者相同的方式,授與和限制服務主體對資源的存取權。 例如,您可以執行下列動作:

也可以為 Azure Databricks 使用者、服務主體和群組授與權限,以使用服務主體。 這可讓使用者以服務主體的身分執行工作,而不是以其身分執行。 如果使用者離開您的組織或群組遭到修改,這可防止工作失敗。

不同於 Azure Databricks 使用者,服務主體是僅限 API 的身分識別;它無法用來存取 Azure Databricks UI。

Databricks 建議您啟用識別身分同盟的工作區。 識別身分同盟可讓您在帳戶主控台中設定服務主體,然後向它們指派特定工作區的存取權。 這可簡化 Azure Databricks 管理和資料控管。

重要

Databricks 於 2023 年 11 月 9 日自動為識別身分同盟和 Unity Catalog 啟用了新工作區,並逐步跨帳戶推出。 如果您的工作區預設為識別身分同盟啟用,則無法停用。 如需了解更多資訊,請參閱自動啟用 Unity 目錄

Databricks 和 Microsoft Entra ID 服務主體

服務主體可以是 Azure Databricks 受控服務主體或 Microsoft Entra ID 受控服務主體。

Azure Databricks 受控服務主體可以使用 Databricks OAuth 驗證和個人存取權杖向 Azure Databricks 進行驗證。 Microsoft Entra ID 受控服務主體可以使用 Databricks OAuth 驗證和 Microsoft Entra ID 權杖向 Azure Databricks 進行驗證。 如需服務主體驗證的詳細資訊,請參閱管理服務主體的權杖

會直接在 Azure Databricks 中管理 Azure Databricks 受控服務主體。 在 Microsoft Entra ID 中管理 Microsoft Entra ID 受控服務主體,這需要額外的權限。 Databricks 建議您使用 Azure Databricks 受控服務主體進行 Azure Databricks 自動化,並在必須同時向 Azure Databricks 和其他 Azure 資源進行驗證時,使用 Microsoft Entra ID 受控服務主體。

若要建立 Azure Databricks 受控服務主體,請略過本節,並繼續閱讀誰可以管理和使用服務主體?

若要在 Azure Databricks 中使用 Microsoft Entra ID 受控服務主體,管理員使用者必須在 Azure 中建立 Microsoft Entra ID 應用程式。 若要建立 Microsoft Entra ID 受控服務主體,請遵循下列說明:

  1. 登入 Azure 入口網站

    注意

    使用的入口網站有所不同,取決於您的 Microsoft Entra ID 應用程式是在 Azure 公用雲端中執行,還是在國家雲端或主權雲端中執行。 如需詳細資訊,請參閱國家雲端

  2. 如果您有多個租用戶、訂用帳戶或目錄的存取權,請按下頂端功能表中的 [目錄 + 訂用帳戶] (帶篩選器的目錄) 圖示,切換至您要佈建服務主體的目錄。

  3. 在 [搜尋資源、服務和文件] 中,搜尋並選取 [Microsoft Entra ID]。

  4. 按一下 [+ 新增],然後選取 [應用程式註冊]

  5. 針對 [名稱],輸入應用程式的名稱。

  6. 在 [支援的帳戶類型] 區段,選取 [僅此組織目錄中的帳戶 (單一租用戶)]

  7. 按下 [註冊]

  8. 在應用程式頁面 [概觀] 頁面的 [基本資訊] 區段,拷貝下列值:

    • 應用程式 (用戶端) ID
    • 目錄 (租用戶) ID

    Azure 註冊的應用程式概觀

  9. 若要產生用戶端密碼,請在 [管理] 中按一下 [認證與祕密]。

    注意

    您可以使用此用戶端密碼來產生 Microsoft Entra ID 權杖,以使用 Azure Databricks 驗證 Microsoft Entra ID 服務主體。 若要判斷 Azure Databricks 工具或 SDK 是否可以使用 Microsoft Entra ID 權杖,請參閱工具或 SDK 文件。

  10. 在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]

    新用戶端密碼

  11. 在 [新增用戶端描述] 窗格的 [描述] 中輸入用戶端祕密金鑰的描述

  12. 對於[到期],選取用戶端祕密金鑰的到期時限,然後按下 [新增]

  13. 將用戶端祕密金鑰的複製並儲存在安全的地方,因為此用戶端祕密金鑰是應用程式的密碼。

誰可建立及使用服務主體?

若要在 Azure Databricks 中管理服務主體,您必須擁有下列其中一項:帳戶管理員角色、工作區管理員角色,或服務主體上的管理員或使用者角色。

  • 帳戶管理員可以將服務主體新增至帳戶,並指派系統管理員角色。 只要這些工作區使用識別身分同盟,他們也可以將服務主體指派給工作區。
  • 工作區管理員可以將服務主體新增至 Azure Databricks 工作區、指派工作區管理員角色,以及管理工作區中物件和功能的存取權,例如建立叢集或存取指定角色型環境的能力。
  • 服務主體管理員可以在服務主體上管理角色。 服務主體的建立者會成為服務主體管理員。 帳戶管理員是帳戶中所有服務主體的服務主體管理員。

注意

如果在 2023 年 6 月 13 日之前建立服務主體,則服務主體的建立者預設沒有服務主體管理員角色。 要求帳戶管理員授與您服務主體管理員角色。

  • 服務主體使用者能夠以服務主體身分執行工作。 工作會使用服務主體的身分識別來執行,而不是工作擁有者的身分識別。 如需詳細資訊,請參閱以服務主體身分執行工作

如需有關如何授與服務主體管理員和使用者角色的資訊,請參閱管理服務主體的角色

管理帳戶中的服務主體

帳戶管理員可以使用帳戶主控台,將服務主體新增至您的 Azure Databricks 帳戶。

使用帳戶主控台將服務主體新增至您的帳戶

服務主體可以在 Azure Databricks 中建立,或從現有的Microsoft Entra ID 服務主體中連結。 請參閱 Databricks 和 Microsoft Entra ID 服務主體

  1. 身為帳戶管理員,登入帳戶主機
  2. 在側邊欄中,按一下 [使用者管理]
  3. 在 [服務主體] 索引標籤中,按一下 [新增服務主體]。
  4. 在 [管理] 下,選擇 [由 Databricks 管理] 或 [由 Microsoft Entra ID 管理]。
  5. 如果已選擇 [由 Microsoft Entra ID 管理],請在 [Microsoft Entra 應用程式 ID] 下,貼上服務主體的應用程式 (用戶端) ID。
  6. 輸入服務主體的名稱。
  7. 按一下新增

將帳戶管理員角色指派給服務主體

  1. 身為帳戶管理員,登入帳戶主機
  2. 在側邊欄中,按一下 [使用者管理]
  3. 在 [服務主體] 索引標籤中,尋找並按一下使用者名稱。
  4. 在 [角色] 索引標籤中,開啟 [帳戶管理] 或 [市集管理]。

使用帳戶主控台將服務主體指派給工作區

若要使用帳戶主控台將使用者新增至工作區,必須啟用識別身分同盟的工作區。 工作區管理員也可以使用工作區管理員設定頁面,將服務主體指派給工作區。 如需詳細資訊,請參閱使用工作區管理員設定將服務主體新增至工作區

  1. 身為帳戶管理員,登入帳戶主機
  2. 在側邊欄中,按一下 [工作區]
  3. 按一下工作區的名稱。
  4. 在 [權限] 索引標籤中,按一下 [新增權限]。
  5. 搜尋並選取服務主體,指派權限等級 (工作區使用者管理員),然後按一下 [儲存]。

使用帳戶主控台將服務主體從工作區中移除

若要使用帳戶主控台將服務主體從工作區中移除,必須為識別身分同盟啟用工作區。 從工作區移除服務主體時,服務主體就無法再存取工作區,不過會維護服務主體的權限。 如果服務主體稍後新增回工作區,則會重新取得其先前的權限。

  1. 以帳戶管理員身分登入帳戶主控台
  2. 在側邊欄中,按一下 [工作區]
  3. 按一下工作區的名稱。
  4. 在 [權限] 索引標籤中,尋找服務主體。
  5. 按一下服務主體資料列最右邊的 Kebab 功能表 Kebab 功能表,然後選取 [移除]。
  6. 在確認對話方塊中按一下 [移除]

停用 Azure Databricks 帳戶中的服務主體

帳戶管理員可以停用跨 Azure Databricks 帳戶的服務主體。 停用的服務主體無法對 Azure Databricks 帳戶或工作區進行驗證。 不過,所有服務主體的權限和工作區物件都保持不變。 停用服務主體時,會發生以下情況:

  • 服務主體無法透過任何方法對帳戶或其任何工作區進行驗證。
  • 使用服務主體所產生權杖的應用程式或指令碼將無法再存取 Databricks API。 會保留權杖,但在停用服務主體時無法用來進行驗證。
  • 服務主體所擁有的叢集仍會繼續執行。
  • 服務主體所建立的排程工作會失敗,除非指派給新的擁有者。

重新啟用服務主體時,可以使用相同的權限登入 Azure Databricks。 Databricks 建議從帳戶中停用服務主體,而不是移除它們,因為移除服務主體是破壞性動作。 停用的服務主體狀態會在帳戶主控台中標示為 [閒置中]。 您也可以從特定工作區停用服務主體。 請參閱在 Azure Databricks 工作區中停用服務主體

您無法使用帳戶主控台停用服務主體。 請改用帳戶服務主體 API

例如:

curl --netrc -X PATCH \
https://${DATABRICKS_HOST}/api/2.1/accounts/{account_id}/scim/v2/ServicePrincipals/{id} \
--header 'Content-type: application/scim+json' \
--data @update-sp.json \
| jq .

update-sp.json

{
  "schemas": [ "urn:ietf:params:scim:api:messages:2.0:PatchOp" ],
  "Operations": [
    {
      "op": "replace",
      "path": "active",
      "value": [
        {
          "value": "false"
        }
      ]
    }
  ]
}

從 Azure Databricks 帳戶中移除服務主體

帳戶管理員可以從 Azure Databricks 帳戶中刪除服務主體。 工作區管理員不可。 當您從帳戶中刪除服務主體時,該主體也會從其工作區中移除。

重要

從帳戶中移除服務主體時,服務主體也會從其工作區中移除,無論是否已啟用識別身分同盟。 建議您不要刪除帳戶層級服務主體,除非您希望它們失去帳戶中所有工作區的存取權。 請注意下列刪除服務主體的後果:

  • 使用服務主體所產生權杖的應用程式或指令碼將無法再存取 Databricks API
  • 服務主體所擁有的工作會失敗
  • 服務主體所擁有的叢集會停止
  • 服務主體所建立並使用「以擁有者身分執行」認證共用的查詢或儀表板必須指派給新的擁有者,以防止共用失敗

從帳戶中移除 Microsoft Entra ID 服務主體時,服務主體就無法再存取帳戶或其工作區,不過會維護服務主體的權限。 如果服務主體稍後新增回帳戶,則會重新取得其先前的權限。

若要使用帳戶主控台移除服務主體,請執行下列動作:

  1. 身為帳戶管理員,登入帳戶主機。
  2. 在側邊欄中,按一下 [使用者管理]
  3. 在 [服務主體] 索引標籤中,尋找並按一下使用者名稱。
  4. 在 [主體資訊] 索引標籤中,按一下右上角的 Kebab 功能表 Kebab 功能表,然後選取 [刪除]。
  5. 在確認對話方塊中,按一下 [確認刪除]。

管理工作區中的服務主體

工作區管理員也可以使用工作區管理員設定頁面來管理其工作區中的服務主體。

使用工作區管理員設定將服務主體新增至工作區

服務主體可以在 Azure Databricks 中建立,或從現有的Microsoft Entra ID 服務主體中連結。 請參閱 Databricks 和 Microsoft Entra ID 服務主體

  1. 身為工作區管理員,登入 Azure Databricks 工作區。

  2. 按下 Azure Databricks 工作區頂端列中的使用者名稱,然後選取 [設定]

  3. 按一下 [身分識別與存取] 索引標籤。

  4. 在 [服務主體] 旁邊,按一下 [管理]。

  5. 按一下 [新增服務主體]

  6. 選取現有的服務主體以指派給工作區,或者按一下 [新增] 以建立新的服務主體。

    若要新增新服務主體,請選擇 [由 Databricks 管理] 或 [由 Microsoft Entra ID 管理]。 如果選擇 [由 Microsoft Entra ID 管理],請貼上服務主體的應用程式 (用戶端) ID,然後輸入顯示名稱。

  7. 按一下新增

注意

如果沒有為識別身分同盟啟用工作區,就無法將現有的帳戶服務主體指派給工作區。

使用工作區管理員設定頁面將工作區管理員角色指派給服務主體

  1. 身為工作區管理員,登入 Azure Databricks 工作區。
  2. 按下 Azure Databricks 工作區頂端列中的使用者名稱,然後選取 [設定]
  3. 按一下 [身分識別與存取] 索引標籤。
  4. 在 [群組] 旁邊,按一下 [管理]
  5. 選取 admins 系統群組。
  6. 按一下 [新增成員]
  7. 選取服務主體,然後按下 [ 確認]。

若要從服務主體移除工作區管理員角色,請從管理員群組中移除服務主體。

在 Azure Databricks 工作區中停用服務主體

工作區管理員可以在 Azure Databricks 工作區中停用服務主體。 停用的服務主體無法從 Azure Databricks API 存取工作區,不過所有服務主體的權限和工作區物件都保持不變。 停用服務主體時:

  • 服務主體無法透過任何方法對工作區進行驗證。
  • 服務主體的狀態在工作區管理員設定頁面中顯示為閒置中
  • 使用服務主體所產生權杖的應用程式或指令碼將無法再存取 Databricks API。 會保留權杖,但在停用服務主體時無法用來進行驗證。
  • 服務主體所擁有的叢集仍會繼續執行。
  • 服務主體所建立的排程工作必須指派給新的擁有者,以防止其失敗。

重新啟用服務主體時,它可以使用相同權限對工作區進行驗證。 Databricks 建議停用服務主體,而不是移除它們,因為移除服務主體是破壞性動作。

  1. 身為工作區管理員,登入 Azure Databricks 工作區。
  2. 按下 Azure Databricks 工作區頂端列中的使用者名稱,然後選取 [設定]
  3. 按一下 [身分識別與存取] 索引標籤。
  4. 在 [服務主體] 旁邊,按一下 [管理]。
  5. 選取想要停用的服務主體。
  6. 在 [狀態] 底下,取消選取 [作用中]。

若要將服務主體設定為作用中,請執行相同的步驟,但請改為選取核取方塊。

使用工作區管理員設定頁面從工作區中移除服務主體

從工作區移除服務主體並不會從帳戶中移除服務主體。 若要從帳戶中移除服務主體,請參閱從 Azure Databricks 帳戶中移除服務主體

從工作區移除服務主體時,服務主體就無法再存取工作區,不過會維護服務主體的權限。 如果服務主體稍後新增回工作區,則會重新取得其先前的權限。

  1. 身為工作區管理員,登入 Azure Databricks 工作區。
  2. 按下 Azure Databricks 工作區頂端列中的使用者名稱,然後選取 [設定]
  3. 按一下 [身分識別與存取] 索引標籤。
  4. 在 [服務主體] 旁邊,按一下 [管理]。
  5. 選取服務主體。
  6. 按一下右上角的 [刪除]。
  7. 按一下 [刪除] 以確認。

使用 API 管理服務主體

帳戶管理員和工作區管理員可以使用 Databricks API 來管理 Azure Databricks 帳戶和工作區中的服務主體。 若要使用 API 來管理服務主體的角色,請參閱使用 Databricks CLI 管理服務主體角色

使用 API 管理帳戶中的服務主體

管理員可以使用帳戶服務主體 API,在 Azure Databricks 帳戶中新增及管理服務主體。 帳戶管理員和工作區管理員可使用不同的端點 URL 來叫用 API:

  • 帳戶管理員使用 {account-domain}/api/2.1/accounts/{account_id}/scim/v2/
  • 工作區管理員使用 {workspace-domain}/api/2.0/account/scim/v2/

如需詳細資訊,請參閱帳戶服務主體 API

使用 API 在工作區中管理服務主體

帳戶和工作區管理員可以使用工作區指派 API,將服務主體指派給為識別身分同盟而啟用的工作區。 透過 Azure Databricks 帳戶和工作區,支援工作區指派 API。

  • 帳戶管理員使用 {account-domain}/api/2.0/accounts/{account_id}/workspaces/{workspace_id}/permissionassignments
  • 工作區管理員使用 {workspace-domain}/api/2.0/preview/permissionassignments/principals/{principal_id}

請參閱工作區指派 API

如果沒有為識別身分同盟啟用工作區,工作區管理員可以使用工作區層級 API 將服務主體指派給其工作區。 請參閱工作區服務主體 API

管理服務主體的權杖

服務主體可以使用 Azure Databricks OAuth 權杖或 Azure Databricks 個人存取權杖向 Azure Databricks 上的 API 進行驗證,如下所示:

  • Azure Databricks OAuth 權杖可用於對 Azure Databricks 帳戶層級和工作區層級 API 進行驗證。
    • 在 Azure Databricks 帳戶層級建立的 Azure Databricks OAuth 權杖可用於對 Azure Databricks 帳戶層級和工作區層級 API 進行驗證。
    • 在 Azure Databricks 工作區層級建立的 Azure Databricks OAuth 權杖只能對 Azure Databricks 工作區層級 API 進行驗證。
  • Azure Databricks 個人存取權杖只能用於對 Azure Databricks 工作區層級 API 進行驗證。

服務主體也可以使用 Microsoft Entra ID 權杖,對 Azure Databricks 上的 API 進行驗證。

管理服務主體的 Databricks OAuth 驗證

若要對帳戶層級和工作區層級 Databricks REST API 進行驗證,帳戶管理員可以針對服務主體使用 Azure Databricks OAuth 權杖。 可以使用服務主體的用戶端識別碼和用戶端密碼來要求 OAuth 權杖。 如需詳細資訊,請參閱使用 OAuth (OAuth M2M) 透過服務主體對 Azure Databricks 的存取進行驗證

管理服務主體的個人存取權杖

若僅對 Azure Databricks 上的工作區層級 API 驗證服務主體,服務主體可以自行建立 Databricks 個人存取權杖,如下所示:

注意

您無法使用 Azure Databricks 使用者介面來產生服務主體的 Azure Databricks 個人存取權杖。 此程序會使用 Databricks CLI 0.205 版或更新版本來產生服務主體的存取權杖。 如果您尚未安裝 Databricks CLI,請參閱安裝或更新 Databricks CLI

此程序假設您使用 OAuth 機器對機器 (M2M) 驗證Microsoft Entra ID 服務主體驗證來設定 Databricks CLI 以驗證服務主體,從而自行產生 Azure Databricks 個人存取權杖。 請參閱 OAuth 機器對機器 (M2M) 驗證Microsoft Entra ID 服務主體驗證

  1. 使用 Databricks CLI 執行下列命令,這會為服務主體產生另一個存取權杖。

    執行以下命令:

    databricks tokens create --comment <comment> --lifetime-seconds <lifetime-seconds> -p <profile-name>
    
    • --comment:將 <comment> 取代為有關存取權杖用途的有意義註解。 如果未指定 --comment 選項,則不會產生任何註解。
    • --lifetime-seconds:將 <lifetime-seconds> 取代為存取權杖的有效秒數。 例如,1 天為 86400 秒。 如果未指定 --lifetime-seconds 選項,存取權杖會設定為永不過期 (不建議)。
    • --profile-name:將 <profile-name> 取代為 Azure Databricks 組態設定檔的名稱,其中包含服務主體和目標工作區的驗證資訊。 如果未指定 -p 選項,Databricks CLI 會嘗試尋找並使用名為 DEFAULT 的組態設定檔。
  2. 在回應中,複製的 token_value 值,這是服務主體的存取權杖。

    請務必將複製的權杖儲存在安全位置。 請勿與其他人共用複製的權杖。 如果您遺失複製的權杖,就無法重新產生完全相同的權杖。 相反地,您必須重複此程序來建立新的權杖。

    注意:如果您無法在工作區中建立或使用 PAT,這可能是因為您的工作區系統管理員已停用權杖,或未授與您建立或使用權杖的權限。 請參閱您的工作區系統管理員或下列內容:

管理服務主體的 Microsoft Entra ID 驗證

只有 Microsoft Entra ID 受控服務主體可以使用 Microsoft Entra ID 權杖對 API 進行驗證。 若要建立 Microsoft Entra ID 存取權杖,請參閱取得服務主體的 Microsoft Entra ID 權杖

Microsoft Entra ID 存取權杖可用來呼叫權杖 API,為服務主體建立 Databricks 個人存取權杖。