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

如何在Azure DevOps Pipeline中使用服务主体认证调用Databricks任务?

服务主体认证Databricks的正确方式(Azure DevOps Pipeline)

首先明确:完全支持用服务主体(SP)替代个人Token认证Databricks,核心是通过Azure AD获取Databricks的短期访问令牌,而非直接使用SP的客户端密钥。

前置确认(你已完成大部分,再核对)

  • 服务主体已添加到Databricks工作区(可通过Azure门户的Databricks资源页→访问控制→添加,或Databricks工作区控制台→Admin→Service Principals添加)
  • 服务主体在Databricks工作区拥有足够权限(比如Contributor,或对应任务所需的具体权限)
  • Azure DevOps中已配置SP的三个关键参数(建议存在变量组/Key Vault,避免明文):
    • AZURE_CLIENT_ID:SP的应用ID
    • AZURE_CLIENT_SECRET:SP的客户端密钥
    • AZURE_TENANT_ID:你的Azure AD租户ID

修改后的Pipeline YAML代码

替换你原有bash任务的env部分,新增Azure CLI登录和令牌获取步骤:

- bash: |
    # 安装Databricks Azure CLI扩展(如果已安装可跳过)
    az extension add --name databricks --upgrade

    # 用服务主体登录Azure
    az login --service-principal -u $(AZURE_CLIENT_ID) -p $(AZURE_CLIENT_SECRET) --tenant $(AZURE_TENANT_ID)

    # 获取Databricks短期访问令牌
    DATABRICKS_TOKEN=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv)

    # 后续保持原有脚本逻辑,使用获取到的令牌
    find $(bashHome) -type f -exec chmod u+x {} \;
    cat > job-params.json << EOF
    {
      "param1": "$(PARAM1)",
      "param2": "$(PARAM2)"
    }
    EOF
    cat job-params.json
    echo "DATABRICKS JOB NAME: $(DATABRICKS_JOB_NAME)"
    RUN_ID=$($(run_databricks_sh) $(DATABRICKS_JOB_NAME) job-params.json)
  env:
    DATABRICKS_HOST: $(DATABRICKS_HOST)
    # 这里不再用个人Token,而是通过脚本动态设置DATABRICKS_TOKEN
  displayName: 'Run Databricks Job with Service Principal'

关键说明

  • az account get-access-token中的resource参数2ff814a6-3304-4ab8-85cb-cd0e6f879c1d是Databricks服务的固定Azure AD资源ID,无需修改
  • 获取到的令牌是短期有效(默认1小时),避免了个人Token长期有效带来的安全风险
  • 如果你的Pipeline使用了Azure DevOps的Azure Resource Manager服务连接,也可以用AzureCLI任务简化登录,无需手动输入SP参数:
- task: AzureCLI@2
  inputs:
    azureSubscription: '<你的ARM服务连接名>'
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      DATABRICKS_TOKEN=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv)
      # 后续原有脚本逻辑...
    env:
      DATABRICKS_HOST: $(DATABRICKS_HOST)

常见排查点

  • 如果认证失败,检查SP是否在Databricks工作区被正确授予权限(可在Databricks工作区→Admin→Service Principals中查看权限)
  • 确保Azure DevOps中的SP参数(客户端ID、密钥、租户ID)正确无误
  • 检查Azure CLI版本是否足够新,旧版本可能不支持Databricks扩展的某些命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:26:01