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
相关产品推荐
相关产品推荐

