取得服務主體的 Microsoft Entra ID (先前稱為 Azure Active Directory) 權杖

重要

本節說明如何手動取得服務主體的 Microsoft Entra ID(先前稱為 Azure Active Directory) 令牌。

Azure Databricks 受控服務主體會直接在 Azure Databricks 中管理。 Microsoft Entra ID 受控服務主體是在 Microsoft Entra ID 中管理,這需要額外的許可權。 Databricks 建議您針對大部分使用案例使用 Azure Databricks 受控服務主體。 不過,Databricks 建議您在必須同時向 Azure Databricks 和其他 Azure 資源進行驗證的情況下,使用 Microsoft Entra ID 受控服務主體。

若要建立 Azure Databricks 受控服務主體,而不是 Microsoft Entra ID 受控服務主體,請參閱 管理服務主體

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 中定義服務主體,也可以做為可在 Azure Databricks 中強制執行驗證和授權原則的主體。 Azure Databricks 工作區中的服務主體可以有不同的細部訪問控制,而不是一般使用者(用戶主體)。

服務主體會作為用戶端角色,並使用 OAuth 2.0 用戶端認證流程來授權存取 Azure Databricks 資源。

您可以在 Databricks 中使用下列程式來管理 Databricks 中的服務主體,或使用 Azure 入口網站 中的下列程式。

您也可以使用 Microsoft 驗證連結庫 (MSAL) 以程式設計方式取得使用者的 Microsoft Entra ID 存取令牌,而不是服務主體。 請參閱 使用 MSAL 取得使用者的 Microsoft Entra 識別碼(先前稱為 Azure Active Directory) 令牌。

在 Azure 入口網站 中布建服務主體

  1. 登入 Azure 入口網站

    注意

    要使用的入口網站會因 Microsoft Entra ID(先前稱為 Azure Active Directory)應用程式在 Azure 公用雲端或國家或主權雲端中執行而有所不同。 如需詳細資訊,請參閱 國家雲端

  2. 如果您有多個租使用者、訂用帳戶或目錄的存取權,請按兩下 頂端選單中的 [目錄 + 訂用帳戶] 圖示,切換至您要布建服務主體的目錄。

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

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

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

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

  7. 按一下 [註冊] 。

  8. 在應用程式頁面的 [概觀 ] 頁面上的 [Essentials ] 區段中,複製下列值:

    • 應用程式 (用戶端) 識別碼
    • 目錄 (租使用者) 識別碼

    Azure registered app overview

  9. 若要產生客戶端密碼,請在 [管理] 中,按兩下 [憑證與秘密]。

    注意

    您可以使用此用戶端密碼來產生 Microsoft Entra 識別符令牌,以向 Azure Databricks 驗證 Microsoft Entra ID 服務主體。 若要判斷 Azure Databricks 工具或 SDK 是否可以使用 Microsoft Entra ID 令牌,請參閱工具或 SDK 的檔。

  10. 在 [ 客戶端密碼] 索引標籤上 ,按兩下 [ 新增客戶端密碼]。

    New client secret

  11. 在 [ 新增客戶端密碼 ] 窗格中,針對 [描述] 輸入客戶端密碼的描述。

  12. 針對 [到期],選取客戶端密碼的到期時間週期,然後按兩下 [ 新增]。

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

使用 Azure CLI 布建服務主體

請參閱 使用 Azure CLI 建立 Microsoft Entra 識別碼 (先前稱為 Azure Active Directory) 服務主體。

使用 Microsoft 身分識別平台 REST API 取得 Microsoft Entra ID 存取令牌

重要

本節說明如何使用 Microsoft 身分識別平台 REST API,手動取得服務主體的 Microsoft Entra ID 令牌。

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

若要使用服務主體存取 Databricks REST API,您可以取得並使用服務主體的 Microsoft Entra ID 存取令牌。 如需詳細資訊,請參閱 第一個案例:使用共用密碼存取令牌要求。

提示

您也可以使用 Azure CLI 來取得 Microsoft Entra ID 存取令牌。 請參閱 使用 Azure CLI 取得 Microsoft Entra ID 存取令牌。

  1. 收集以下資訊:

    參數 描述
    Tenant ID Directory (tenant) ID在 Microsoft Entra ID 中註冊之相關應用程式的 。
    Client ID Application (client) ID在 Microsoft Entra ID 中註冊之相關應用程式的 。
    Client secret Value Microsoft Entra ID 中註冊之相關應用程式的用戶端密碼的 。
  2. 使用上述資訊以及 curl 來取得 Microsoft Entra ID (先前稱為 Azure Active Directory) 存取令牌。

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token \
    -d 'client_id=<client-id>' \
    -d 'grant_type=client_credentials' \
    -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
    -d 'client_secret=<client-secret>'
    

    將:

    • <tenant-id> 具有已註冊應用程式的租用戶標識碼。
    • <client-id> 具有已註冊應用程式的用戶端標識碼。
    • <client-secret> 具有已註冊應用程式的客戶端密碼值。

    請勿變更 參數的值 scope 。 它代表 Azure Databricks (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d) 的程式設計標識碼,以及預設範圍 (/.defaultURL 編碼為 %2f.default)。

    例如:

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/v2.0/token \
    -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \
    -d 'grant_type=client_credentials' \
    -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
    -d 'client_secret=abc1D~Ef...2ghIJKlM3'
    

    Microsoft Entra ID 存取令牌位於 access_token 呼叫輸出中的值中。

使用 Azure CLI 取得 Microsoft Entra 識別符存取令牌

重要

本節說明如何使用 Azure CLI 手動取得服務主體的 Microsoft Entra ID 令牌。

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

若要使用服務主體存取 Databricks REST API,您可以取得並使用服務主體的 Microsoft Entra ID 存取令牌。

  1. 收集以下資訊:

    參數 描述
    Tenant ID Directory (tenant) ID在 Microsoft Entra ID 中註冊之相關應用程式的 。
    Client ID Application (client) ID在 Microsoft Entra ID 中註冊之相關應用程式的 。
    Client secret Value Microsoft Entra ID 中註冊之相關應用程式的用戶端密碼的 。
  2. 如果您還不知道此標識符,請執行下列其中一項,取得 Microsoft Entra ID 服務主體的正確 Azure 訂用帳戶標識碼:

    • 在 Azure Databricks 工作區的頂端導覽列中,按兩下您的使用者名稱,然後按兩下 [Azure 入口網站]。 在出現的 [Azure Databricks 工作區資源] 頁面上,按兩下 提要欄位中的 [概觀 ]。 然後尋找 [ 訂用帳戶標識符 ] 字段,其中包含訂用帳戶標識符。

    • 使用 Azure CLI 來執行 az databricks workspace list 命令,並使用 --query-o--output 選項來縮小結果範圍。 adb-0000000000000000.0.azuredatabricks.net取代為工作區實例的名稱,不包括 https://。 在此範例中, 00000000-0000-0000-0000-000000000000 輸出中的 後面 /subscriptions/ 是訂用帳戶標識碼。

      az databricks workspace list --query "[?workspaceUrl==\`adb-0000000000000000.0.azuredatabricks.net\`].{id:id}" -o tsv
      
      # /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.Databricks/workspaces/my-ws
      

      如果出現下列訊息,表示您已登入錯誤的租使用者:The subscription of '<subscription-id>' doesn't exist in cloud 'AzureCloud'.若要登入正確的租使用者,您必須使用 -t--tenant 選項再次執行az login命令,以指定正確的租使用者標識符。

      您可以執行 命令 curl -v <per-workspace-URL>/aad/auth 並查看輸出 < location: https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000,其中 00000000-0000-0000-0000-000000000000 是租用戶標識碼,以取得 Azure Databricks 工作區的租使用者標識碼。 另請參閱取得 Azure 入口網站 中的訂用帳戶和租用戶標識碼。

      az login -t <tenant-id>
      
  3. 取得 Microsoft Entra ID 服務主體的正確 Azure 租使用者識別碼、用戶端識別碼、用戶端密碼和訂用帳戶標識碼之後,請使用 Azure CLI 執行 az login 命令來登入 Azure。 使用 --service-principal 選項,並針對在 Microsoft Entra ID 中註冊的相關應用程式,指定 (Directory (tenant) IDClient IDApplication (client) IDClient secretValue) 的參數Tenant ID值(先前稱為 Azure Active Directory)。

    az login \
    --service-principal \
    -t <Tenant-ID> \
    -u <Client-ID> \
    -p <Client-secret>
    
  4. 確認您已登入登入 Microsoft Entra ID 服務主體的正確訂用帳戶。 若要這樣做,請使用 -s--subscription 選項來執行 az account set 命令,以指定正確的訂用帳戶標識碼。

    az account set -s <subscription-id>
    
  5. 執行 az account get-access-token 命令,為已登入的 Microsoft Entra ID 服務主體產生 Microsoft Entra ID 存取令牌--resource使用 選項來指定 Azure Databricks 服務的唯一資源識別碼,也就是 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d。 您可以使用 和 -o--output 選項,在命令--query的輸出中只顯示 Microsoft Entra ID (先前稱為 Azure Active Directory) 令牌的值。

    az account get-access-token \
    --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \
    --query "accessToken" \
    -o tsv
    

使用服務主體的 Microsoft Entra 識別符存取令牌來存取 Databricks REST API

重要

本節說明如何使用 curl 和服務主體的 Microsoft Entra ID 存取令牌來存取 Databricks REST API。

curl您可以使用實作 Databricks 用戶端統一驗證標準的其中一個參與工具或 SDK,而不是 。 這些工具和 SDK 也會自動為您產生並取代過期的 Microsoft Entra ID 令牌,並利用下列 Databricks 驗證類型:

Databricks 使用者可以使用 Microsoft Entra 標識符令牌向 Databricks REST API 進行驗證的服務主體。

如果服務主體在 Azure 中目標工作區資源上具有參與者或擁有者角色,服務主體也可以將自己新增為工作區管理員。 如果服務主體是目標工作區上的參與者或擁有者,而且您想要使用其 Microsoft Entra ID 令牌將其新增至工作區,請移至 非 Azure Databricks 使用者之服務主體的工作區層級 API 存取權。

否則,請繼續 存取 Azure Databricks 使用者和系統管理員的服務主體。

Azure Databricks 使用者和系統管理員的服務主體 API 存取

若要完成此程式,您必須先將服務主體新增至 Azure Databricks 帳戶或工作區。 您可以使用 SCIM (帳戶) API,直接將服務主體新增至您的帳戶,而不授與其工作區存取權。

您可以使用服務主體 API 端點,將服務主體新增至工作區。 這也會將服務主體新增至您的 Azure Databricks 帳戶。 例如:

使用 Databricks CLI 0.205 版或更新版本 (建議):

新增服務主體:

databricks service-principals create --application-id 12a34b56-789c-0d12-e3fa-b456789c0123 --display-name "My Service Principal" -p <profile-name-that-references-calling-users-access-token>

更新服務主體的工作區權利:

databricks service-principals patch 1234567890123456 --json @update-service-principal.json -p <profile-name-that-references-access-token>

update-service-principal.json

{
  "Operations": [
    {
      "op": "add",
      "path": "entitlements",
      "value": {
        "value": "workspace-acccess",
        "value": "allow-cluster-create",
        "value": "databricks-sql-access"
      }
    }
  ],
  "schema": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ]
}

請參閱 Databricks CLI 的驗證。

使用 curl

curl -X POST \
-H 'Authorization: Bearer <access-token>' \
https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/preview/scim/v2/ServicePrincipals \
-H 'Content-type: application/scim+json' \
-d @create-service-principal.json

create-service-principal.json

{
  "displayName": "My Service Principal",
  "applicationId": "12a34b56-789c-0d12-e3fa-b456789c0123",
  "entitlements": [
    {
      "value": "allow-cluster-create"
    }
  ],
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
  ],
  "active": true
}

如果下列任一項成立,請直接跳至 非 Azure Databricks 使用者的 服務主體工作區層級 API 存取:

  • 您想要呼叫的 Azure Databricks REST API 需要工作區管理員存取權,而服務主體是工作區的成員,但目前沒有工作區的系統管理員存取權。
  • 服務主體尚未新增至目標 Azure Databricks 工作區。
  1. 收集以下資訊。

    參數 描述
    Microsoft Entra ID 存取令牌 使用 Microsoft 身分識別平台 REST API取得 Microsoft Entra ID 存取令牌或使用 Azure CLI 取得 Microsoft Entra ID 存取令牌中的要求所傳回的 Microsoft Entra ID 存取令牌。
  2. 使用 Microsoft Entra ID 存取令牌以及 curl 呼叫 Databricks REST API。 例如:

    使用 Databricks CLI 0.205 版或更新版本 (建議):

    databricks clusters list -p <profile-name-that-references-azure-ad-access-token>
    

    請參閱 Databricks CLI 的驗證。

    使用 curl

    curl -X GET \
    -H 'Authorization: Bearer <access-token>' \
    https://<databricks-instance>/api/2.0/clusters/list
    

    將:

    例如:

    curl -X GET \
    -H 'Authorization: Bearer <access-token>' \
    https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
    

非 Azure Databricks 使用者的服務主體工作區層級 API 存取

如果下列任一項成立,請遵循此程式:

  • 您想要呼叫的 Azure Databricks REST API 需要工作區管理員存取權,而服務主體是工作區的成員,但目前沒有工作區的系統管理員存取權。
  • 服務主體尚未新增至目標 Azure Databricks 工作區。

需求:

  • 服務主體需要 Azure 中目標工作區資源的參與者或擁有者角色。
  1. 收集以下資訊:

    參數 描述
    租用戶識別碼 Azure 入口網站 中布建服務主體中,於 Microsoft Entra ID 中註冊之相關應用程式的目錄(租使用者)標識符
    用戶端識別碼 Microsoft Entra ID 中註冊之相關應用程式的應用程式(用戶端) 標識碼。
    用戶端密碼 Microsoft Entra ID 中註冊之相關應用程式的用戶端密碼值,您在 Azure 入口網站 中布建服務主體中建立。
    Microsoft Entra ID 存取令牌 使用 Microsoft 身分識別平台 REST API取得 Microsoft Entra ID 存取令牌或使用 Azure CLI 取得 Microsoft Entra ID 存取令牌中的要求所傳回的 Microsoft Entra ID 存取令牌。
    訂用帳戶識別碼 與目標 Azure Databricks 工作區相關聯的 Azure 訂用帳戶標識碼(而非名稱)。 若要取得此專案和下列資訊,請參閱 開啟資源。 若要開啟目標資源,您可以搜尋 Azure Databricks 服務類型,以及您在 Azure 中了解目標 Azure Databricks 工作區的任何其他資訊。
    資源群組名稱 與目標 Azure Databricks 工作區相關聯的 Azure 資源群組名稱。
    工作區名稱 目標 Azure Databricks 工作區中的名稱。
  2. 使用上述一些資訊以及 curl 取得 Microsoft Entra ID 管理端點存取令牌。

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/<tenant-id>/oauth2/token \
    -d 'client_id=<client-id>' \
    -d 'grant_type=client_credentials' \
    -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \
    -d 'client_secret=<client-secret>'
    

    將:

    • <tenant-id> 具有已註冊應用程式的租用戶標識碼。
    • <client-id> 具有已註冊應用程式的用戶端標識碼。
    • <client-secret> 具有已註冊應用程式的客戶端密碼值。

    請勿變更 參數的值 resource 。 它代表 Microsoft Entra ID 管理端點(https://management.core.windows.net/URL 編碼為 https%3A%2F%2Fmanagement.core.windows.net%2F)。

    例如:

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
    https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/token \
    -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \
    -d 'grant_type=client_credentials' \
    -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \
    -d 'client_secret=abc1D~Ef...2ghIJKlM3'
    

    Microsoft Entra ID 管理端點存取令牌位於 access_token 呼叫輸出中的值中。

  3. 使用 Microsoft Entra ID 管理端點存取令牌以及上述資訊的其餘部分,以及 curl 呼叫 Databricks REST API,例如:

     curl -X GET \
     -H 'Authorization: Bearer <access-token>' \
     -H 'X-Databricks-Azure-SP-Management-Token: <management-access-token>' \
     -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/workspaces/<workspace-name>' \
     https://<databricks-instance>/api/2.0/clusters/list
    

    將:

    • <access-token> 使用 Microsoft Entra ID 存取令牌。

      • <management-access-token> 使用 Microsoft Entra ID 管理端點存取令牌。
      • <subscription-id> 具有與目標 Azure Databricks 工作區相關聯之訂用帳戶的標識碼。
      • <resource-group-name> 與目標 Azure Databricks 工作區相關聯的資源組名。
      • <workspace-name> 具有目標 Azure Databricks 工作區的名稱。
      • <databricks-instance>使用 Azure Databricks 部署的個別工作區 URL
      • GET/api/2.0/clusters/list 具有目標 Databricks REST API 的適當 HTTP 作業和端點。

      例如:

      curl -X GET \
      -H 'Authorization:Bearer <access-token>' \
      -H 'X-Databricks-Azure-SP-Management-Token: abC1dE...ghIj23kl' \
      -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/12a345...bcd6789e/resourceGroups/my-resource-group/providers/Microsoft.Databricks/workspaces/my-workspace' \
      https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
      

    向工作區進行驗證時,服務主體會成為 Azure Databricks 工作區管理員,不再需要參與者或擁有者角色才能存取工作區。