通过


在 Azure Databricks 上使用 Azure DevOps 进行身份验证

本页介绍如何配置 Azure DevOps 管道,以对 Databricks CLI 进行身份验证并调用 Azure Databricks。

在您开始之前

在配置 Azure DevOps 身份验证之前完成以下步骤:

  1. 在 Azure 中创建服务主体,并将其添加到具有适当权限的 Azure Databricks 工作区。 如果没有此步骤,即使管道配置正确,身份验证也会失败。

    对于Microsoft Entra ID 托管服务主体,请在 Azure 中创建Microsoft Entra ID 应用程序,然后将其添加到工作区。 请参阅 服务主体管理服务主体

  2. 将一个步骤添加到管道中,以便在代理上安装 Databricks CLI。

    - script: |
        curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
      displayName: 'Install Databricks CLI'
    

    小窍门

    若要将 CLI 安装固定到特定版本而不是使用最新版本,请替换为 main 版本标记(例如, v0.224.0)。

选择身份验证方法

Azure DevOps 通过 服务连接管理身份验证。 在“ 项目设置>服务连接”下的 Azure DevOps 门户中访问它们。

在 Azure DevOps 中的“项目”设置下选择“服务连接”

若要对 Databricks CLI 进行身份验证,请使用以下方法之一的 Azure 资源管理器 服务连接类型:

方法 Description 最适用于
工作负载身份联合 (建议) 使用 OpenID Connect (OIDC) 获取令牌。 需要使用服务主体配置 Azure DevOps 生成的颁发者和使用者标识符。 安全、无机密的身份验证
带有客户端密钥的服务主体 使用客户端 ID 和机密生成生存期较短的 OAuth 令牌。 需要为服务主体生成机密。 需要在任务间共享凭据的场景
托管标识 使用分配给 VM 或容器的标识来运行管道。 仅适用于自托管运行器。 请参阅 Azure 文档 具有已分配标识的自托管运行器

注释

尽可能使用工作负载身份联合。 它不依赖于机密,因此它比其他方法更安全。 它无需手动配置即可自动处理 AzureCLI@2 任务。 请参阅 创建使用工作负荷标识联合的服务连接

配置 Azure CLI 身份验证

默认情况下,Databricks CLI 使用 Azure CLI 进行身份验证。 所有 Databricks CLI 命令都必须在任务内 AzureCLI@2 运行,这意味着每个任务都独立进行身份验证。 这引入了一些延迟,但需要最少的配置。

- task: AzureCLI@2
  inputs:
    azureSubscription: <your-service-connection-name>
    useGlobalConfig: true
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
      databricks bundle deploy

更新以下值:

  • azureSubscription:Azure 资源管理器服务连接的名称。
  • useGlobalConfig:必需。 确保由命令生成的 databricks bundle 子进程可以访问经过身份验证的会话。
  • DATABRICKS_HOST:如果尚未在捆绑配置或上一步中定义,请设置此值。

配置客户端密码身份验证

如果需要跨多个任务共享凭据,或者 Azure CLI 身份验证会增加太多的延迟,请使用客户端密码。

此方法从一个任务中的服务连接检索身份验证详细信息,然后将其导出为后续任务的作业范围的环境变量。

- task: AzureCLI@2
  inputs:
    azureSubscription: <your-service-connection-name>
    addSpnToEnvironment: true
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      echo "##vso[task.setvariable variable=ARM_CLIENT_ID]${servicePrincipalId}"
      echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET]${servicePrincipalKey}"
      echo "##vso[task.setvariable variable=ARM_TENANT_ID]${tenantId}"

- script: |
    export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
    databricks bundle deploy

注意:

  • 密钥addSpnToEnvironmentservicePrincipalIdservicePrincipalKeytenantId暴露于内联脚本。
  • 这些命令会将 ##vso 任务范围的变量升级为 Databricks CLI 自动识别的作业范围的变量。
  • 默认情况下, ARM_CLIENT_SECRET 所有后续步骤都可访问。 将 issecret=true 添加到变量定义中,然后将其显式传递给每个需要它的步骤,以限制访问。 无论此设置如何,机密都会在日志中屏蔽。

有关完整示例,请参阅 授权Microsoft Entra 服务主体访问 Git 文件夹

配置托管身份验证

托管标识认证依靠 VM 或容器的配置,而不是依靠管道任务。 此方法不需要 AzureCLI@2 任务。

- script: |
    export DATABRICKS_AZURE_RESOURCE_ID=/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Databricks/workspaces/<workspace-name>
    export ARM_CLIENT_ID=<managed-identity-client-id>
    export ARM_USE_MSI=true
    export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
    databricks current-user me

更新以下值:

  • DATABRICKS_AZURE_RESOURCE_ID:在 Azure 门户中工作区 的属性 下找到此值。
  • ARM_CLIENT_ID:托管标识的客户端 ID。
  • DATABRICKS_HOST:可选。 如果未设置,则从 DATABRICKS_AZURE_RESOURCE_ID中推断该值。

托管标识必须在 Azure Databricks 工作区中具有 “参与者” 角色。

另请参阅