使用 Azure DevOps 对 Databricks 进行身份验证

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

Azure DevOps 身份验证

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

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

若要对 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_FILEdatabricks 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_SECRET 标记环境变量 issecret=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=eda1f2c4-07cb-4c2c-a126-60b9bafee6d0
    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)。

最佳做法

另请参阅