You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps部署Databricks资源遇权限及认证错误求助

问题描述

场景

需要发布Databricks工作区、集群、作业和Notebook。本地通过VS Code搭配az login操作完全正常,但在Azure DevOps Pipeline中执行时出现权限与认证错误。

错误信息

Error: cannot read job: User *** does not have Admin or Manage Run or Owner or View permissions on job 419617767162993
    │ 
    │   with databricks_job.this,
    │   on **job.tf** line 1, in resource "databricks_job" "this":
    │    1: resource "databricks_job" "this" {
     

Error: cannot read group member: /2.0/preview/scim/v2/Groups/576792616350882 is only accessible by admins.
╷
│ Error: cannot read service principal: /2.0/preview/scim/v2/ServicePrincipals/3879246038660033 is only accessible by admins.

╷
│ Error: cannot read job: default auth: cannot configure default credentials, please check https://docs.databricks.com/en/dev-tools/auth.html#databricks-client-unified-authentication to configure credentials for your preferred authentication method

当前配置

Azure DevOps Pipeline YAML步骤

- task: AzureCLI@2
    displayName: 'tf plan '
    inputs:
      azureSubscription: '${{ variables.backendServiceArm }}'
      scriptType: bash
      scriptLocation: inlineScript
      inlineScript: 'terraform plan -lock=false -out notebooks.state.plan'
      # scriptArguments: "-out notebooks.state.plan"
      workingDirectory: '$(System.DefaultWorkingDirectory)/terraform/'
      addSpnToEnvironment: true

job.tf 片段

resource "databricks_job" "this" {
  # provider = databricks.etl_workspace_provider <-- tried both on/off

已尝试的排查操作

  • 创建新作业集群/复用现有集群
  • 添加/移除provider配置
  • 将Azure DevOps服务主体添加为集群管理员并勾选所有权限

需求

希望Pipeline正常运行,且不使用Unity Catalog或任何SCIM相关功能。


解决方案

1. 修正Databricks认证配置

Azure DevOps Pipeline中的服务主体需要明确获取Databricks凭据,确保Terraform能正常认证:
修改AzureCLI任务的inlineScript内容,添加令牌获取逻辑:

# 获取Databricks专用访问令牌
DATABRICKS_TOKEN=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv)
# 导出环境变量供Terraform调用
export DATABRICKS_HOST="https://<你的Databricks工作区URL>"
export DATABRICKS_TOKEN=$DATABRICKS_TOKEN
# 执行Terraform计划
terraform plan -lock=false -out notebooks.state.plan

注:2ff814a6-3304-4ab8-85cb-cd0e6f879c1d是Azure Databricks的固定资源ID,无需修改。

2. 调整服务主体的Databricks权限

集群管理员权限不足以覆盖作业和SCIM相关操作(即使你不需要SCIM,Terraform默认会尝试读取相关资源),可按以下方式处理:

  • 快速方案:将Azure DevOps服务主体添加到Databricks工作区的admin组中(登录Databricks工作区 → 管理员设置 → 用户与组 → 找到对应服务主体并加入admin组)。
  • 精细化方案:创建自定义权限组,分配Job Admin权限(或至少Job View + Job Manage Run),同时在Terraform的Databricks provider中禁用SCIM资源读取:
    provider "databricks" {
      host = var.databricks_host
      token = var.databricks_token
      # 禁用SCIM相关资源的自动读取
      skip_scim = true
    }
    

3. 匹配Terraform状态与资源权限

如果是增量部署,现有作业可能由本地用户创建,服务主体无读取权限:

  • 若允许,删除现有作业,让Pipeline重新创建;
  • 或手动给服务主体分配目标作业的Owner或View权限。

内容的提问来源于stack exchange,提问作者BI Dude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:50:37