为 Azure DevOps Pipelines 启用工作负载身份联合

重要

Databricks OAuth 令牌联合身份验证处于 公共预览版

Databricks OAuth 令牌联合(也称为 OpenID Connect(OIDC))允许在 Databricks 外部运行的自动化工作负载安全地访问 Databricks,而无需 Databricks 密钥。 请参阅使用 OAuth 令牌联合身份验证对 Azure Databricks 进行身份验证。

若要为 Azure DevOps Pipelines 启用工作负载身份联合验证,请执行以下步骤:

  1. 创建联合策略
  2. 配置 YAML

启用工作负荷标识联合后,Databricks SDK 和 Databricks CLI 会自动从 Azure DevOps Pipelines 提取工作负荷标识令牌,并将其交换为 Databricks OAuth 令牌。

创建联合策略

首先使用 Databricks CLI 创建 工作负荷标识联合策略。 对于 Azure DevOps,请为策略设置以下值:

  • issuerhttps://vstoken.dev.azure.com/<org_id>,其中 <org-id> 是 Azure DevOps 组织的 GUID
  • audiences: api://AzureADTokenExchange
  • subjectp://<org-name>/<project-name>/<pipeline-name> 其中 <org-name> 是 Azure DevOps 组织名称, <project-name> 是 Azure DevOps 项目名称,是 <pipeline-name> Azure DevOps 管道的名称

例如,给定一个组织 ID 7f1078d6-b20d-4a20-9d88-05a2f0d645a3 和一个 Databricks 服务主体数字 ID 5581763342009999,请使用以下 Databricks CLI 命令创建联合策略:

databricks account service-principal-federation-policy create 5581763342009999 --json '{
  "oidc_policy": {
	"issuer": "https://vstoken.dev.azure.com/7f1078d6-b20d-4a20-9d88-05a2f0d645a3",
	"audiences": [
  	    "api://AzureADTokenExchange"
	],
	"subject": "p://my-org/my-project/my-pipeline"
  }
}
'

配置 YAML

接下来,修改配置文件。 除了设置以下工作区环境变量外,使用 Azure CLI 获取作业中的令牌并将其存储在其中 DATABRICKS_OIDC_TOKEN

  • DATABRICKS_AUTH_TYPE: env-oidc
  • DATABRICKS_HOST:你的 Databricks 工作区网址
  • DATABRICKS_CLIENT_ID:服务主体(应用程序)ID
trigger: none
pool: test # my self-hosted pool name

variables:
  DATABRICKS_HOST: https://my-workspace.cloud.databricks.com/
  DATABRICKS_AUTH_TYPE: env-oidc
  DATABRICKS_CLIENT_ID: a1b2c3d4-ee42-1eet-1337-f00b44r

steps:
  - script: |
      OIDC_REQUEST_URL="${SYSTEM_OIDCREQUESTURI}?api-version=7.1"
      export DATABRICKS_OIDC_TOKEN=$(curl -s -H "Content-Length: 0" -H "Content-Type: application/json" -H "Authorization: Bearer $(System.AccessToken)" -X POST $OIDC_REQUEST_URL | jq -r '.oidcToken')
      databricks current-user me
    displayName: 'Display Databricks current user information'