共用方式為


使用 OAuth (OAuth M2M) 透過服務主體對 Azure Databricks 的存取進行驗證

本文說明如何建立 Azure Databricks 服務主體,並使用它向具有 OAuth 的目標實體進行驗證。

步驟 1:建立服務主體

帳戶管理員和工作區管理員可以建立服務主體。 此步驟說明在工作區中建立服務主體。 若要使用帳戶主控台,請參閱 您的帳戶中的管理服務主體。

您也可以建立Microsoft Entra ID 受控服務主體,並將其新增至 Azure Databricks。 如需詳細資訊,請參閱 Databricks 和 Microsoft Entra ID 服務主體

  1. 身為工作區管理員,登入 Azure Databricks 工作區。
  2. 按下 Azure Databricks 工作區頂端列中的使用者名稱,然後選取 [設定]
  3. 按一下 [身分識別與存取] 索引標籤。
  4. 在 [服務主體] 旁邊,按一下 [管理]。
  5. 按一下 [新增服務主體]
  6. 單擊搜尋方塊中的下拉式箭號,然後按兩下 [ 新增]。
  7. 在 [管理] 底下,選擇 [Databricks 受控]。
  8. 輸入服務主體的名稱。
  9. 按一下新增

服務主體會同時新增至您的工作區和 Azure Databricks 帳戶。

步驟 2:將許可權指派給服務主體

  1. 按兩下服務主體的名稱,以開啟其詳細數據頁面。
  2. 在 [組態] 索引標籤上,核取您希望服務主體為此工作區擁有的每個權利旁邊的方塊,然後按一下 [更新]
  3. 在 [權限] 索引標籤上,授與您想要管理及使用此服務主體的任何 Azure Databricks 使用者、服務主體和群組的存取權。 請參閱管理服務主體上的角色

步驟 3:建立服務主體的 OAuth 秘密

您必須先建立可用於產生 OAuth 存取權杖的 OAuth 祕密,然後才能使用 OAuth 向 Azure Databricks 進行驗證。 服務主體最多可以具有五個 OAuth 祕密。 帳戶管理員和工作區管理員可以建立服務主體的 OAuth 秘密。

  1. 在服務主體的詳細數據頁面上,按兩下 [ 秘密] 索引標籤

  2. 在 [OAuth 祕密] 下,按一下 [產生祕密]

    從工作區產生 OAuth 秘密

  3. 複製顯示的 [秘密 ] 和 [用戶端標識符],然後按兩下 [ 完成]。

祕密在建立期間僅顯示一次。 用戶端識別碼與服務主體的應用程式識別碼相同。

帳戶管理員也可以從帳戶控制台中的服務主體詳細數據頁面產生 OAuth 秘密。

  1. 身為帳戶管理員,登入帳戶主機

  2. 按下帳戶主機使用者管理圖示使用者管理

  3. 在 [ 服務主體] 索引標籤上 ,選取您的服務主體。

  4. 在 [OAuth 祕密] 下,按一下 [產生祕密]

    從工作區產生 OAuth 秘密

  5. 複製顯示的 [秘密 ] 和 [用戶端標識符],然後按兩下 [ 完成]。

注意

若要讓服務主體使用叢集或 SQL 倉儲,您必須授與服務主體存取權限。 請參閱計算權限管理 SQL 倉儲

步驟 4:使用 OAuth M2M 驗證

若要使用 OAuth M2M 驗證,您必須設定下列相關聯的環境變數、 .databrickscfg 欄位、Terraform 欄位或 Config 字段:

  • Azure Databricks 主機,指定為 https://accounts.azuredatabricks.net (對於帳戶作業) 或目標個別工作區 URL,例如 https://adb-1234567890123456.7.azuredatabricks.net (對於工作區作業)。
  • Azure Databricks 帳戶識別碼 (對於 Azure Databricks 帳戶作業)。
  • 服務主體用戶端識別碼。
  • 服務主體祕密。

若要執行 OAuth M2M 驗證,請根據參與工具或 SDK 將下列內容整合到您的程式碼中:

Environment

若要透過工具或 SDK 將環境變數用於特定 Azure Databricks 驗證類型,請參閱對 Azure Databricks 資源的存取進行驗證或者參閱工具或 SDK 的文件。 另請參閱用戶端統一驗證的環境變數和欄位用戶端統一驗證的預設方法

針對帳戶層級作業,請設定下列環境變數:

  • DATABRICKS_HOST,設定為 Azure Databricks 帳戶主控台 URL (https://accounts.azuredatabricks.net)。
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

針對工作區層級作業,請設定下列環境變數:

  • DATABRICKS_HOST,設定為 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

設定檔

使用 .databrickscfg 檔案中的下列欄位,建立或識別 Azure Databricks 組態設定檔。 如果您建立設定檔,請將預留位置取代為適當的值。 若要透過工具或 SDK 使用設定檔,請參閱對 Azure Databricks 資源的存取進行驗證或者參閱工具或 SDK 的文件。 另請參閱用戶端統一驗證的環境變數和欄位用戶端統一驗證的預設方法

針對帳戶層級作業,請在您的 .databrickscfg 檔案中設定下列值。 在此情況下,Azure Databricks 帳戶主控台網址為 https://accounts.azuredatabricks.net

[<some-unique-configuration-profile-name>]
host          = <account-console-url>
account_id    = <account-id>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

針對工作區層級作業,請在您的 .databrickscfg 檔案中設定下列值。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

[<some-unique-configuration-profile-name>]
host          = <workspace-url>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

CLI

針對 Databricks CLI,請執行下列其中一項:

  • 按照本文的「環境」一節所述,設定環境變數。
  • 按照本文的「設定檔」一節所述,設定 .databrickscfg 檔案中的值。

環境變數始終優先於 .databrickscfg 檔案中的值。

另請參閱 OAuth 機器對機器 (M2M) 驗證

連線

注意

下列 Databricks Connect 版本支援 OAuth M2M 驗證:

  • 對於 Python,為 Databricks Connect for Databricks Runtime 14.0 和更新版本的。
  • 針對 Scala,即為適用於 Databricks Runtime 13.3 LTS 和更新版本的 Databricks Connect。 Databricks Connect for Databricks Runtime 13.3 LTS 和更新版本隨附的 Databricks SDK for Java 必須升級至 Databricks SDK for Java 0.17.0 或更新版本。

針對 Databricks Connect,您可以執行下列其中一項:

  • 按照本文的「設定檔」一節所述,為 Azure Databricks 工作區層級作業設定 .databrickscfg 檔案中的值。 此外,將設定檔中的 cluster_id 環境變數設定為個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net
  • 按照本文的「環境」一節所述,為 Azure Databricks 工作區層級作業設定環境變數。 此外,將 DATABRICKS_CLUSTER_ID 環境變數設定為個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

.databrickscfg 檔案中的值始終優先於環境變數。

若要使用 .databrickscfg 檔案中的這些環境變數或值來初始化 Databricks Connect 用戶端,請參閱下列其中一項:

VS Code

針對適用於 Visual Studio Code 的 Databricks 延伸項目,請執行下列動作:

  1. 按照本文的「設定檔」一節所述,為 Azure Databricks 工作區層級作業設定 .databrickscfg 檔案中的值。
  2. 在適用於 Visual Studio Code 的 Databricks 延伸項目的 [設定] 窗格中,按下 [設定 Databricks]
  3. 在 [命令選擇區] 中,針對 [Databricks 主機],輸入個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net,然後按 Enter
  4. 在 [命令選擇區] 中,在您的網址清單中選取目標設定檔名稱。

如需詳細資料,請參閱適用於 Visual Studio Code 的 Databricks 延伸項目的驗證設定

Terraform

針對帳戶層級作業,對於預設驗證

provider "databricks" {
  alias = "accounts"
}

針對直接組態 (將 retrieve 預留位置取代為您自己的實作,以從主控台或某些其他設定存放區 (例如 HashiCorp Vault) 擷取值。另請參閱 Vault 提供者)。 在此情況下,Azure Databricks 帳戶主控台網址為 https://accounts.azuredatabricks.net

provider "databricks" {
  alias         = "accounts"
  host          = <retrieve-account-console-url>
  account_id    = <retrieve-account-id>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

針對工作區層級作業,對於預設驗證

provider "databricks" {
  alias = "workspace"
}

針對直接組態 (將 retrieve 預留位置取代為您自己的實作,以從主控台或某些其他設定存放區 (例如 HashiCorp Vault) 擷取值。另請參閱 Vault 提供者)。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

如需有關使用 Databricks Terraform 提供者進行驗證的詳細資訊,請參閱驗證

Python

對於帳戶層級作業,將下列內容用於預設驗證

from databricks.sdk import AccountClient

a = AccountClient()
# ...

對於直接組態,使用下列內容,將 retrieve 預留位置取代為您自己的實作,以從主控台或其他組態存放區 (例如 Azure KeyVault) 擷取值。 在此情況下,Azure Databricks 帳戶主控台網址為 https://accounts.azuredatabricks.net

from databricks.sdk import AccountClient

a = AccountClient(
  host          = retrieve_account_console_url(),
  account_id    = retrieve_account_id(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

對於工作區層級作業,特別是預設驗證,請執行以下程式碼:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

對於直接組態,將 retrieve 預留位置取代為您自己的實作,以從主控台或其他組態存放區 (例如 Azure KeyVault) 擷取值。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host          = retrieve_workspace_url(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

如需有關透過使用 Python 並實作 Databricks 用戶端統一驗證的 Databricks 工具和 SDK 進行驗證的詳細資訊,請參閱:

注意

適用於 Visual Studio Code 的 Databricks 延伸項目使用 Python,但尚未實作 OAuth M2M 驗證。

Java

針對工作區層級作業,對於預設驗證

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

對於直接組態,將 retrieve 預留位置取代為您自己的實作,以從主控台或其他組態存放區 (例如 Azure KeyVault) 擷取值。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
  .setClientId(retrieveClientId())
  .setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

如需有關透過使用 Java 並實作 Databricks 用戶端統一驗證的 Databricks 工具和 SDK 進行驗證的詳細資訊,請參閱:

Go

針對帳戶層級作業,對於預設驗證

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

對於直接組態,將 retrieve 預留位置取代為您自己的實作,以從主控台或其他組態存放區 (例如 Azure KeyVault) 擷取值。 在此情況下,Azure Databricks 帳戶主控台網址為 https://accounts.azuredatabricks.net

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host:         retrieveAccountConsoleUrl(),
  AccountId:    retrieveAccountId(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

針對工作區層級作業,對於預設驗證

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

對於直接組態,將 retrieve 預留位置取代為您自己的實作,以從主控台或其他組態存放區 (例如 Azure KeyVault) 擷取值。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

如需使用 Go 和實作 Databricks 用戶端統一驗證的 Databricks 工具和 SDK 進行驗證的詳細資訊,請參閱使用 Azure Databricks 帳戶或工作區驗證適用於 Go 的 Databricks SDK

手動產生和使用 OAuth M2M 驗證的存取權杖

實作 Databricks 用戶端統一驗證標準的 Azure Databricks 工具和 SDK 將根據 OAuth M2M 驗證的需要,代表您自動產生、重新整理和使用 Azure Databricks OAuth 存取權杖。

不過,如果您必須手動產生、重新整理或使用 Azure Databricks OAuth 存取令牌,請遵循本節中的指示,使用 Databricks 建議使用用戶端整合驗證。

使用服務主體的用戶端標識碼和 OAuth 秘密,要求 OAuth 存取令牌向帳戶層級 REST API 和工作區層級 REST API 進行驗證。 存取令牌將在一小時內到期。 您必須在到期后要求新的 OAuth 存取令牌。 OAuth 存取權杖的範圍取決於您從中建立權杖的層級。 您可以在帳戶層級或工作區層級建立權杖,如下所示:

手動產生帳戶層級存取權杖

從帳戶層級建立的 OAuth 存取令牌可以用於帳戶中的 Databricks REST API,以及服務主體可存取的任何工作區。

  1. 身為帳戶管理員,登入帳戶主機

  2. 按一下右上角使用者名稱旁邊的向下箭頭。

  3. 複製您的帳戶識別碼

  4. 透過將下列 URL 中的 <my-account-id> 取代為您複製的帳戶識別碼,來建構權杖端點 URL。

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. 使用用戶端,例如 curl ,使用令牌端點 URL 要求 OAuth 存取令牌、服務主體的用戶端識別碼(也稱為應用程式識別符),以及您建立的服務主體 OAuth 秘密。 all-apis範圍會要求 OAuth 存取令牌,此令牌可用來存取服務主體已授與存取權的所有 Databricks REST API。

    • <token-endpoint-URL> 取代為上述權杖端點 URL。
    • <client-id> 取代為服務主體的用戶端 ID,也稱為應用程式 ID。
    • <client-secret> 取代為您建立的服務主體 OAuth 祕密。
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    這會產生類似於下例的回應:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    從回應中複製 access_token

手動產生工作區層級存取權杖

從工作區層級建立的 OAuth 存取令牌只能存取該工作區中的 REST API,即使服務主體是帳戶管理員或屬於其他工作區的成員也一樣。

  1. 透過將 https://<databricks-instance> 取代為您的 Azure Databricks 部署的工作區 URL 來建構權杖端點 URL:

    https://<databricks-instance>/oidc/v1/token
    
  2. 使用用戶端,例如 curl ,使用令牌端點 URL 要求 OAuth 存取令牌、服務主體的用戶端識別碼(也稱為應用程式識別符),以及您建立的服務主體 OAuth 秘密。 all-apis範圍會要求 OAuth 存取令牌,此令牌可用來存取您要求令牌之工作區內服務主體已授與存取權的所有 Databricks REST API。

    • <token-endpoint-URL> 取代為上述權杖端點 URL。
    • <client-id> 取代為服務主體的用戶端 ID,也稱為應用程式 ID。
    • <client-secret> 取代為您建立的服務主體 OAuth 祕密。
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    這會產生類似於下例的回應:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    從回應中複製 access_token

呼叫 Databricks REST API

您現在可以使用 OAuth 存取令牌向 Azure Databricks 帳戶層級 REST API 和 工作區層級 REST API 進行驗證。 服務主體必須是帳戶管理員,才能呼叫帳戶層級 REST API。

您可以使用 Bearer 驗證將權杖包含在標頭中。 也可將此方法用於 curl 或您組建的任何用戶端。

範例帳戶層級 REST API 要求

此範例使用 Bearer 驗證來取得與帳戶關聯的所有工作區清單。

  • 將 取代 <oauth-access-token> 為您在上一個步驟中複製的服務主體 OAuth 存取令牌。
  • <account-id> 取代為您的帳戶識別碼。
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces'

範例工作區層級 REST API 要求

此範例使用 Bearer 驗證來列出指定工作區中的所有可用叢集。

  • 將 取代 <oauth-access-token> 為您在上一個步驟中複製的服務主體 OAuth 存取令牌。
  • <workspace-URL> 取代為您的基本工作區 URL,其格式類似於 dbc-a1b2345c-d6e7.cloud.databricks.com
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

其他資源