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

了解如何配置 Azure DevOps 管道,以便为自动化中的 Databricks CLI 命令和 API 调用提供身份验证。

Azure DevOps 身份验证

在 Azure DevOps 中管理身份验证(第一方和第三方)是通过服务连接完成的。 在 Azure DevOps 门户中,可以在 Project 设置的任何项目页上访问服务连接。

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

若要从 Azure DevOps 资源对 Azure Databricks CLI 访问进行身份验证和授权,请使用 Azure 资源管理器 服务连接类型。 对于此类型,请选择以下身份验证方法之一:

  • Microsoft Entra 工作负载联合身份验证
    • 使用 OpenID Connect (OIDC) 协议代表服务主体获取令牌。
    • 需要配置由 Azure DevOps 生成的问题和主题标识符,并将其与您打算使用的服务主体结合。
    • 适用的身份验证机制:Azure CLI。
  • Microsoft Entra 服务主体
    • 使用客户端 ID 和 MS Entra 客户端机密生成生存期较短的 OAuth 令牌。
    • 要求你为要用于服务连接的服务主体生成机密。
    • 适用的身份验证机制:Azure CLI,Microsoft Entra 客户端机密。
  • Microsoft Entra ID 托管标识
    • 使用分配给执行 CLI 的资源(例如计算)的标识。 在 Azure DevOps 的上下文中,这仅在您使用自托管运行器时才相关。 请参阅创建与使用托管标识的 VM 的 Azure 资源管理器服务连接。
    • 适用的身份验证机制:Azure CLI、Microsoft Entra 托管标识(以前称为“MSI”)。

选择最符合项目需求的身份验证机制后,必须在 Azure DevOps 管道定义(pipeline.yml)中对其进行配置,才能使用 Azure Databricks CLI。

将 Azure DevOps 管道配置为使用 Azure CLI 进行身份验证

默认情况下,Azure Databricks CLI 将使用 Azure CLI 作为使用 Azure Databricks 进行身份验证的机制。

请注意,使用 Azure CLI 进行身份验证需要对 Azure Databricks CLI 的所有调用都必须在一个 AzureCLI@2 task中执行,这意味着在后续任务中无法共享经过身份验证的会话。 每个任务都独立进行身份验证,这会在运行时引入延迟。

以下 Azure Pipelines 示例配置使用 Azure CLI 进行身份验证并运行 Azure Databricks CLI bundle deploy 命令:

- task: AzureCLI@2
  inputs:
    azureSubscription: {your-azure-subscription-id-here}
    useGlobalConfig: true
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      export DATABRICKS_HOST=https://adb...
      databricks bundle deploy

将 Azure DevOps 管道配置为使用 Azure CLI 运行 Azure Databricks CLI 命令时,请执行以下操作:

  • 使用 azureSubscription 来配置您要使用的服务连接。
  • 配置 useGlobalConfig 以使用默认 AZURE_CONFIG_FILE,因为 databricks bundle 命令对子进程使用环境变量筛选。 如果未设置,这些子进程将无法找到经过身份验证的会话的详细信息。
  • 如果尚未导出(例如在上一步或捆绑配置中),请导出DATABRICKS_HOST环境变量。

将 Azure DevOps 管道配置为使用 Microsoft Entra 客户端密码进行身份验证

如果不想使用 Azure CLI 进行身份验证,因为它增加了太多的延迟,或者由于需要在其他任务类型中使用 Azure CLI,请使用 Microsoft Entra 客户端密码。 必须从服务连接检索身份验证详细信息,因此必须在管道的声明中使用 AzureCLI@2 任务。

使用该 AzureCLI@2 任务从服务连接检索客户端 ID 和客户端密码,然后将其导出为环境变量。 后续任务可以直接使用它们。 有关示例,请参阅 使用 Microsoft Entra 服务主体来管理 Databricks Git 文件夹

以下 Azure Pipelines 示例配置使用 Microsoft Entra 客户端密码进行身份验证并运行 Azure Databricks CLI bundle deploy 命令:

- task: AzureCLI@2
  inputs:
    azureSubscription: {your-azure-subscription-id-here}
    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...
    databricks bundle deploy

将 Azure DevOps 管道配置为使用 Microsoft Entra 客户端机密运行 Azure Databricks CLI 命令时,请执行以下操作:

  • 配置 addSpnToEnvironment 以将相关环境变量导出到内联脚本。
  • 内联脚本在 Azure Databricks CLI 自动选取的名称下将任务范围的环境变量导出为作业范围的环境变量。
  • 如果尚未导出(例如在上一步或捆绑配置中),请导出DATABRICKS_HOST环境变量。
  • 如果将环境变量 ARM_CLIENT_SECRETissecret=true 标记,那么必须明确地把它添加到所有需要它的后续步骤中。
    • 如果不这样做,环境变量 ARM_CLIENT_SECRET 将对每个后续步骤都可访问。
    • ARM_CLIENT_SECRET 环境变量在输出中被屏蔽,无论设置如何。

将 Azure DevOps 管道配置为使用 Microsoft Entra 托管标识进行身份验证

由于 Azure 托管标识身份验证 依赖于虚拟机或容器配置,以确保 Azure Databricks CLI 在正确的标识下执行,因此 Azure DevOps 管道配置不需要指定 AzureCLI@2 任务。

以下 Azure Pipelines 示例配置使用 Microsoft Entra 托管标识进行身份验证并运行 Azure Databricks CLI bundle deploy 命令:

- script: |
    export DATABRICKS_AZURE_RESOURCE_ID=/subscriptions/<id>/resourceGroups/<name>/providers/Microsoft.Databricks/workspaces/<name>
    export ARM_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
    export ARM_USE_MSI=true
    export DATABRICKS_HOST=https://adb...
    databricks current-user me --log-level trace

将 Azure DevOps 管道配置为使用 Microsoft Entra 托管标识运行 Azure Databricks CLI 命令时,请执行以下操作:

  • 必须将 Microsoft Entra 托管标识分配到它在 Databricks 工作区中将要访问的“参与者”角色。
  • 环境变量的值DATABRICKS_AZURE_RESOURCE_ID位于Azure 门户中 Azure Databricks 实例的属性下
  • 环境变量的值 ARM_CLIENT_ID 是托管标识的客户端 ID。

注释

如果在此配置中未指定DATABRICKS_HOST环境变量,则将从DATABRICKS_AZURE_RESOURCE_ID推断该值。

在 Azure Pipelines 流水线中安装 Azure Databricks CLI

配置首选身份验证机制后,必须在将运行 Azure Databricks CLI 命令的主机或代理上安装 Azure Databricks CLI。

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

小窍门

  • 如果您不想自动安装最新版本的 Azure Databricks CLI,请将安装程序 URL 中的 main 替换为特定的版本(例如,v0.224.0)。

最佳做法

另请参阅