共用方式為


取得 Microsoft Entra ID 權杖以供服務主體使用

這很重要

本節說明如何手動取得服務主體的Microsoft項目標識符令牌。

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 令牌。 這是因為每個Microsoft Entra ID 令牌都是短期的,通常會在一小時內到期。 在此之後,您必須手動生成替代的 Microsoft Entra ID 代碼。 請改用其中一個符合 Databricks 客戶端統一驗證標準的工具或 SDK。 這些工具和 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 ID 身份令牌

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

  1. 登入 Azure 入口網站

    備註

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

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

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

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

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

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

  7. 按一下 [註冊]

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

    • 應用程式 (用戶端) 識別碼
    • 租戶 (目錄) ID
  9. 若要產生用戶端密碼,請在 [管理] 中按一下 [認證與祕密]。

    備註

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

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

    新用戶端密碼

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

  12. 對於 [過期],選取用戶端密碼的過期時限,然後按下 [新增]

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

使用 Azure CLI 布建服務主體

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

使用 Microsoft 身分識別平台 REST API 取得Microsoft專案標識碼存取令牌

這很重要

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

Databricks 不建議手動為Microsoft Entra ID 服務主體建立Microsoft Entra ID 令牌。 這是因為每個Microsoft Entra ID 令牌都是短期的,通常會在一小時內到期。 在此之後,您必須手動生成替代的 Microsoft Entra ID 代碼。 請改用其中一個符合 Databricks 客戶端統一驗證標準的工具或 SDK。 這些工具和 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 在 Microsoft Entra ID 中註冊的相關應用程式的客戶端密鑰 Value
  2. 使用上述資訊以及 curl 來取得Microsoft Entra ID 存取令牌。

    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 ID 存取令牌

這很重要

本節說明如何使用 Azure CLI 手動取得服務主體的Microsoft項目標識碼令牌。

Databricks 不建議手動為Microsoft Entra ID 服務主體建立Microsoft Entra ID 令牌。 這是因為每個Microsoft Entra ID 令牌都是短期的,通常會在一小時內到期。 在此之後,您必須手動生成替代的 Microsoft Entra ID 代碼。 請改用其中一個符合 Databricks 客戶端統一驗證標準的工具或 SDK。 這些工具和 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 在 Microsoft Entra ID 中註冊的相關應用程式的客戶端密鑰 Value
  2. 如果您還不知道此標識碼,請執行下列其中一項,取得Microsoft Entra ID 服務主體的正確 Azure 訂用帳戶標識碼:

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

    • 使用 Azure CLI 來執行 az databricks workspace list 命令 ,使用 選項來縮小結果範圍。 請將 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'.若要登入正確的租戶,您必須再次執行az login命令,並使用-t--tenant選項以指定正確的租戶ID。

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

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

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

    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。 您可以使用 --query-o--output 選項,在命令的輸出中只顯示 Microsoft Entra ID 令牌的值。

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

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

這很重要

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

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

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

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

否則,請繼續到 服務主體作為 Azure Databricks 使用者和管理員的 API 存取

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 Entra ID 存取令牌,可透過 Microsoft 身分識別平臺 REST API 取得Azure CLI 取得
  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
    

    替換為:

    • <access-token> 使用 Microsoft Entra ID 存取令牌。
    • <databricks-instance> 使用您 Azure Databricks 部署中每個工作區的 URL
    • GET/api/2.0/clusters/list 具有目標 Databricks REST API 的適當 HTTP 作業和端點。

    例如:

    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 工作區。
  • 服務主體正在建立或更新 Unity 目錄記憶體或服務認證。

要求:

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

    參數 說明
    租戶識別碼 在 Microsoft Entra ID 中註冊的相關應用程式,其目錄(租使用者)ID 用於 Azure 入口網站的服務主體布建
    用戶端識別碼 相關應用程式於 Microsoft Entra ID 中註冊的 應用程式(用戶端)ID
    客戶端密碼 您在 Azure 入口網站中布建服務主體中所建立之Microsoft Entra ID 中註冊之相關應用程式的用戶端密碼
    Microsoft Entra ID 存取權杖 從要求傳回之 Microsoft Entra ID 存取令牌,可透過 Microsoft 身分識別平臺 REST API 取得Azure CLI 取得
    訂用帳戶識別碼 與目標 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 工作區管理員,不再需要參與者或擁有者角色才能存取工作區。