服務主體的 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 權杖。 請改用其中一個參與的工具或 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專案標識碼令牌。
在 Azure 入口網站 中布建服務主體
登入 Azure 入口網站。
注意
使用的入口網站有所不同,取決於您的 Microsoft Entra ID 應用程式是在 Azure 公用雲端中執行,還是在國家雲端或主權雲端中執行。 如需詳細資訊,請參閱國家雲端。
如果您有權存取多個租用戶、訂用帳戶或目錄,請按一下頂端功能表中的 [目錄 + 訂用帳戶] (帶篩選器的目錄) 圖示,切換至您要佈建服務主體的目錄。
在 [搜尋資源、服務和文件] 中,搜尋並選取 [Microsoft Entra ID]。
按一下 [+ 新增],然後選取 [應用程式註冊]。
針對 [名稱],輸入應用程式的名稱。
在 [支援的帳戶類型] 區段,選取 [僅此組織目錄中的帳戶 (單一租用戶)]。
按下 [註冊]。
在應用程式頁面 [概觀] 頁面的 [基本資訊] 區段,拷貝下列值:
- 應用程式 (用戶端) ID
- 目錄 (租用戶) ID
若要產生用戶端密碼,請在 [管理] 中按一下 [認證與祕密]。
注意
您可以使用此用戶端密碼來產生 Microsoft Entra ID 權杖,以使用 Azure Databricks 驗證 Microsoft Entra ID 服務主體。 若要判斷 Azure Databricks 工具或 SDK 是否可以使用 Microsoft Entra ID 權杖,請參閱工具或 SDK 文件。
在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]。
在 [新增用戶端描述] 窗格的 [描述] 中輸入用戶端祕密金鑰的描述。
對於 [過期],選取用戶端密碼的過期時限,然後按下 [新增]。
將用戶端祕密金鑰的值複製並儲存在安全的地方,因為此用戶端祕密金鑰是應用程式的密碼。
使用 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 權杖。 請改用其中一個參與的工具或 SDK 來實作 Databricks 用戶端統一驗證標準。 這些工具和 SDK 會自動為您產生並取代過期 Microsoft Entra ID 權杖,並利用下列 Databricks 驗證類型:
若要使用服務主體存取 Databricks REST API,您可以取得並使用服務主體的 Microsoft Entra ID 存取令牌。 如需詳細資訊,請參閱 第一個案例:使用共用密碼存取令牌要求。
提示
您也可以使用 Azure CLI 來取得Microsoft Entra ID 存取令牌。 請參閱 使用 Azure CLI 取得Microsoft專案識別碼存取令牌。
收集以下資訊:
參數 描述 Tenant ID
Directory (tenant) ID
Microsoft Entra ID 中註冊之相關應用程式的 。Client ID
Application (client) ID
Microsoft Entra ID 中註冊之相關應用程式的 。Client secret
Value
Microsoft Entra ID 中註冊之相關應用程式的客戶端密碼。使用上述資訊以及 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
) 的程式設計標識碼,以及預設範圍 (/.default
URL 編碼為%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 權杖。 請改用其中一個參與的工具或 SDK 來實作 Databricks 用戶端統一驗證標準。 這些工具和 SDK 會自動為您產生並取代過期 Microsoft Entra ID 權杖,並利用下列 Databricks 驗證類型:
若要使用服務主體存取 Databricks REST API,您可以取得並使用服務主體的 Microsoft Entra ID 存取令牌。
收集以下資訊:
參數 描述 Tenant ID
Directory (tenant) ID
Microsoft Entra ID 中註冊之相關應用程式的 。Client ID
Application (client) ID
Microsoft Entra ID 中註冊之相關應用程式的 。Client secret
Value
Microsoft Entra ID 中註冊之相關應用程式的客戶端密碼。如果您還不知道此標識碼,請執行下列其中一項,取得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>
在您擁有正確的 Azure 租使用者標識碼、用戶端標識碼、用戶端密碼和訂用帳戶標識符之後,Microsoft Entra ID 服務主體,使用 Azure CLI 執行 az login 命令來登入 Azure。
--service-principal
使用 選項,並針對在 entra ID Microsoft 中註冊的相關應用程式,指定 (Directory (tenant) ID
)、Client ID
和Application (client) ID
Client secret
(Value
) 參數Tenant ID
的值。az login \ --service-principal \ -t <Tenant-ID> \ -u <Client-ID> \ -p <Client-secret>
確認您已登入 Microsoft Entra ID 服務主體登入正確的訂用帳戶。 若要這樣做,請使用
-s
或--subscription
選項來執行 az account set 命令,以指定正確的訂用帳戶標識碼。az account set -s <subscription-id>
執行 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 令牌的值。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
您可以使用實作 Databricks 用戶端統一驗證標準的其中一個參與工具或 SDK,而不是 。 這些工具和 SDK 也會自動為您產生並取代過期Microsoft Entra ID 令牌,並利用下列 Databricks 驗證類型:
Databricks 使用者可以使用 Microsoft Entra ID 令牌向 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"
]
}
使用 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 工作區。
收集以下資訊。
參數 描述 Microsoft Entra ID 存取權杖 使用 Microsoft 身分識別平台 REST API 取得Microsoft Entra ID 存取令牌或使用 Azure CLI 取得Microsoft Entra ID 存取令牌中,從要求傳回Microsoft Entra ID 存取令牌。 使用 Microsoft Entra ID 存取令牌以及
curl
呼叫 Databricks REST API。 例如:使用 Databricks CLI 0.205 版或更新版本 (建議):
databricks clusters list -p <profile-name-that-references-azure-ad-access-token>
使用
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 工作區。
需求:
- 服務主體需要 Azure 中目標工作區資源的參與者或擁有者角色。
收集以下資訊:
參數 描述 租用戶識別碼 在 Azure 入口網站 中布建服務主體中,Microsoft Entra ID 中註冊之相關應用程式的目錄(租使用者)標識符。 Client ID Microsoft Entra ID 中註冊之相關應用程式的應用程式(用戶端) 標識碼。 用戶端密碼 您在 Azure 入口網站 中布建服務主體中所建立之相關應用程式之Microsoft Entra ID 中註冊之用戶端密碼的值。 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 工作區中的名稱。 使用上述一些資訊,以及
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
呼叫輸出中的值中。使用 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 工作區管理員,不再需要參與者或擁有者角色才能存取工作區。