为 Azure Databricks 自动化设置和使用 Azure 托管标识身份验证

按照本文的步骤对 Azure 资源托管标识(旧称为托管服务标识 (MSI))进行身份验证,以自动化 Azure Databricks 帐户和工作区。

Azure 会自动管理 Microsoft Entra ID(以前称为 Azure Active Directory)中的标识,供应用程序在连接到支持 Microsoft Entra ID 身份验证的资源时使用。 这些资源包括 Azure Databricks 帐户和工作区。 Azure Databricks 的 Azure 托管标识身份验证使用托管标识来获取 Microsoft Entra ID 令牌,而无需管理任何凭据。

注意

Azure 资源的托管标识不同于 Microsoft Entra ID 托管服务主体,Azure Databricks 也支持该服务主体进行身份验证。 若要了解如何将 Microsoft Entra ID 托管服务主体用于 Azure Databricks 身份验证,而不是 Azure 资源托管标识,请参阅:

本文演示如何设置和使用 Azure 托管标识身份验证,如下所示:

  • 创建用户分配的托管标识。 Azure 支持系统分配的和用户分配的托管标识。 Databricks 建议使用用户分配的托管标识进行 Azure Databricks 的 Azure 托管标识身份验证。
  • 将托管标识分配给 Azure Databricks 帐户和该帐户中的 Azure Databricks 工作区。
  • 创建并登录到 Azure 虚拟机 (Azure VM)。 必须使用支持托管标识(例如 Azure VM)的资源,并将托管标识分配给该 Azure VM,然后以编程方式调用 Azure Databricks 帐户和工作区操作。
  • 将用户分配的托管标识分配给 Azure VM。
  • 在 Azure VM 上安装 Databricks CLI,然后使用分配的托管标识为 Azure Databricks 配置用于 Azure Databricks 的 Azure 托管标识身份验证的 Databricks CLI。
  • 使用 Databricks CLI 运行命令,以便使用 Azure Databricks 的 Azure 托管标识身份验证和分配的托管标识对自动化处理 Azure Databricks 帐户和工作区。

要求

步骤 1:创建用户分配的托管标识

在此步骤中,将为 Azure 资源创建用户分配的托管标识。 Azure 支持系统分配的和用户分配的托管标识。 Databricks 建议使用用户分配的托管标识进行 Azure Databricks 的 Azure 托管标识身份验证。 另请参阅管理用户分配的托管标识

  1. 登录 Azure 门户

    注意

    要使用的门户会有所不同,具体取决于是使用 Azure 公有云还是国家或主权云。 有关详细信息,请参阅国家云

  2. 如果有权访问多个租户、订阅或目录,请单击顶部菜单中的齿轮(设置)图标,切换到要在其中创建托管标识的目录。

  3. 在“搜索资源、服务和文档”中,搜索并选择名为“托管标识”的 Azure 服务。

  4. 单击“+ 创建”。

  5. 在“基本信息”选项卡上,对于“资源组”,请选择要向其添加此托管标识的现有资源组,或单击“新建”以创建新的资源组来添加此托管标识。 有关资源组的信息,请参阅使用 Azure 门户管理 Azure 资源组

  6. 对于“区域”,请选择要向其添加此托管标识的相应区域。 有关区域的信息,请参阅为你选择正确的 Azure 区域

  7. 对于“名称”,请为此托管标识输入容易记住的唯一名称。

  8. 在“查看 + 创建”选项卡中,单击“创建”

  9. 单击“转到资源”。

  10. 复制“客户端 ID”字段的值,因为稍后需要在步骤 2、3 和 8 中用到:

    如果忘记复制该值,可以稍后返回到托管标识的概述页面获取该值。 若要返回到托管标识的概述页,请在“搜索资源、服务和文档”中搜索并选择托管标识的名称。 然后,在托管标识的设置页上单击边栏中的“概述”。

步骤 2:将托管标识分配给 Azure Databricks 帐户

在此步骤中,为托管标识授予对 Azure Databricks 帐户的访问权限。 如果不想授予托管标识对 Azure Databricks 帐户的访问权限,请跳到步骤 3。

  1. 在 Azure Databricks 工作区中,单击顶部栏中的用户名,然后选择“管理帐户”。

    或者,直接转到 Azure Databricks 帐户控制台 (https://accounts.databricks.azure.cn)。

  2. 根据提示登录到你的 Azure Databricks 帐户。

  3. 在边栏上,单击“用户管理”。

  4. 单击“服务主体”选项卡。

    注意

    尽管此选项卡显示为“服务主体”,但它也适用于托管标识。 Azure Databricks 将托管标识视为 Azure Databricks 帐户中的服务主体。

  5. 单击“添加服务主体”。

  6. 为服务主体输入容易记住的唯一名称。

  7. 对于“UUID”,输入步骤 1 中托管标识的“客户端 ID”值。

  8. 单击“添加”。 托管标识将作为服务主体添加到 Azure Databricks 帐户中。

  9. 分配希望服务主体具有的任何帐户级权限:

    1. 在“服务主体”选项卡上,单击服务主体的名称
    2. 在“角色”选项卡上,按切换开关以启用或禁用你希望此服务主体具有的每个目标角色
    3. 在“权限”选项卡上,对你想要其管理和使用此服务主体的任何 Azure Databricks 用户、服务主体和帐户组角色授予访问权限。 请参阅管理服务主体上的角色

步骤 3:将托管标识分配到 Azure Databricks 工作区

在此步骤中,为托管标识授予对 Azure Databricks 工作区的访问权限。

如果工作区已启用联合身份验证

  1. 在 Azure Databricks 工作区中,单击顶部栏中的用户名,然后选择“管理设置”。

  2. 单击“服务主体”。

    注意

    尽管此选项卡显示为“服务主体”,但它也适用于托管标识。 Azure Databricks 将托管标识视为 Azure Databricks 帐户中的服务主体。

  3. 单击“添加服务主体”。

  4. 从步骤 2 中选择服务主体,然后单击“添加”。 服务主体将作为服务主体添加到 Azure Databricks 工作区中。

  5. 分配希望服务主体具有的任何工作区级权限:

    1. 在“服务主体”选项卡上,单击服务主体的名称
    2. 在“配置”选项卡上,选择或清除以授予或撤销希望此服务主体拥有的每个目标状态或权利。
    3. 在“权限”选项卡上,对你想要其管理和使用此服务主体的任何 Azure Databricks 用户、服务主体和帐户组角色授予访问权限。 请参阅管理服务主体上的角色

跳转到步骤 4。

如果工作区未启用联合身份验证:

  1. 在 Azure Databricks 工作区中,单击顶部栏中的用户名,然后选择“管理设置”。

  2. 单击“服务主体”。

    注意

    尽管此选项卡显示为“服务主体”,但它也适用于托管标识。 Azure Databricks 将托管标识视为 Azure Databricks 工作区中的服务主体。

  3. 单击“添加服务主体”。

  4. 在“服务主体”列表中,选择“添加新服务主体”。

  5. 对于“ApplicationId”,输入步骤 1 中托管标识的“客户端 ID”

  6. 为新服务主体输入容易记住的“显示名称”,然后单击“添加”。 托管标识将作为服务主体添加到 Azure Databricks 工作区中。

  7. 分配希望服务主体具有的任何工作区级权限:

    1. 在“服务主体”选项卡上,单击服务主体的名称
    2. 在“配置”选项卡上,选择或清除以授予或撤销希望此服务主体拥有的每个目标状态或权利。
    3. 在“权限”选项卡上,对你想要其管理和使用此服务主体的任何 Azure Databricks 用户、服务主体和帐户组角色授予访问权限。 请参阅管理服务主体上的角色

步骤 4:获取 Azure Databricks 工作区的 Azure 资源 ID

在此步骤中,你将获取 Azure 分配给 Azure Databricks 工作区的资源 ID。 稍后需要此 Azure 资源 ID 来帮助 Azure 托管标识身份验证确定 Azure 与 Azure Databricks 工作区关联的特定 Azure 资源。

  1. 在 Azure Databricks 工作区中,单击顶部栏中的用户名,然后选择“Azure 门户”

  2. 在侧窗格中的“设置”部分中,单击“属性”

  3. 在“Essentials”部分中,复制“ID”值,因为稍后在步骤 8 中需要该值。 该属性应与下面类似:

    /subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.Databricks/workspaces/<workspace-id>
    

步骤 5:创建并登录到 Azure VM

在此步骤中,需要创建并登录到 Azure 虚拟机 (Azure VM)。 Azure VM 是支持托管标识的资源类型之一。 另请参阅快速入门:在 Azure 门户中创建 Linux 虚拟机

此 Azure VM 仅用于演示目的。 此 Azure VM 使用的设置不一定针对持续使用需求进行了优化。 完成此 Azure VM 试验后,应将其删除,如后面的步骤 11 所示。

  1. 在步骤 1 中登录到的 Azure 门户中,在“搜索资源、服务和文档”中,搜索并选择名为“虚拟机”的 Azure 服务。

  2. 单击“+ 创建 Azure 虚拟机”>

  3. 在“基本信息”选项卡上,对于“资源组”,请选择要向其添加此 Azure VM 的现有资源组,或单击“新建”以创建新的资源组,并将此 Azure VM 添加到该资源组。 有关资源组的信息,请参阅使用 Azure 门户管理 Azure 资源组

  4. 对于“虚拟机名称”,请为此 Azure VM 输入容易记住的唯一名称。

  5. 对于“区域”,请选择要向其添加此 Azure VM 的相应区域。 有关区域的信息,请参阅为你选择正确的 Azure 区域

  6. 对于“映像”,请选择 Ubuntu Server 22.04 LTS - x64 Gen 2

  7. 对于“身份验证类型”,请选择“SSH 公钥”

  8. 对于“用户名”,请输入 azureuser

  9. 对于“SSH 公钥源”,请保留默认的“生成新密钥对”

  10. 对于“密钥对名称”,请输入 myKey

  11. 对于“公共入站端口”,请选择“允许所选端口”

  12. 对于“选择入站端口”,请选择“HTTP (80)” 和“SSH (22)”

  13. 保留剩余的默认值。

  14. 在“查看 + 创建”选项卡中,单击“创建”

  15. 单击“下载私钥并创建资源”。 密钥文件将作为 myKey.pem下载到本地开发计算机。 记下下载此 myKey.pem 文件的位置,因为需要在此步骤的后面部分登录到 Azure VM。

    如果丢失了密钥文件,可以稍后返回到 Azure VM 的设置页获取替换的密钥文件。 若要返回到 Azure VM 的设置页,请在“搜索资源、服务和文档”中搜索并选择 Azure VM 的名称。 若要从 Azure VM 的设置页获取替换密钥文件,请执行以下操作:

    1. 在侧窗格中的“帮助”部分中,单击“重置密码”
    2. 选择“添加SSH 公钥”
    3. 对于“密钥对名称”,请输入一些唯一名称。
    4. 单击“更新” 。
    5. 单击“下载 + 创建”。 密钥文件会以 .pem 扩展名下载。 记下下载此 .pem 文件的位置,因为需要在此步骤的后面部分登录到 Azure VM。
  16. 创建 Azure VM 后,单击“转到资源”

  17. 复制“公共 IP 地址”字段的值,因为需要在此步骤的后面部分登录到 Azure VM。

    如果忘记复制此值,可以稍后返回到 Azure VM 的概述页面获取此值。 若要返回到 Azure VM 的概述页面,请在“搜索资源、服务和文档”中搜索并选择 Azure VM 的名称。 然后,在 Azure VM 的设置页上,单击边栏中的“概述”并查找“公共 IP 地址”字段。

  18. 如果本地开发计算机在 Windows 上运行 Linux、macOS 或 WSL,请检查你是否对刚刚下载的私钥具有只读访问权限。 为此,请从本地开发计算机的终端或命令提示符运行以下命令。 在此命令中,替换以下值:

    • </path/to> 替换为下载的 .pem 文件的路径。
    • myKey.pem 替换为下载的 .pem 文件的文件名。
    chmod 400 </path/to>/myKey.pem
    
  19. 登录到 Azure VM。 为此,请从本地开发计算机的终端或命令提示符运行以下命令。 在此命令中,替换以下值:

    • </path/to> 替换为下载的 .pem 文件的路径。
    • myKey.pem 替换为下载的 .pem 文件的文件名。
    • <public-ip-address> 替换为在此步骤前面复制的“公共 IP 地址”字段的值。
    ssh -i </path/to>/myKey.pem azureuser@<public-ip-address>
    

    例如:

    ssh -i ./myKey.pem azureuser@192.0.2.0
    
  20. 如果以前从未连接过此 Azure VM,系统会提示你验证主机的指纹。 为此,请按照屏幕上的提示进行操作。 Databricks 建议始终验证主机的指纹。

  21. 终端或命令提示符更改为 azureuser@<your-azure-vm-name>:~$

  22. 若要随时退出 Azure VM,请运行命令 logoutexit。 然后,终端或命令提示符将更改回正常状态。

步骤 6:将托管标识分配到 Azure VM

在此步骤中,将托管标识与 Azure VM 相关联。 这使 Azure 能够在 Azure VM 运行时根据需要使用托管标识进行身份验证。 另请参阅将用户分配的托管标识分配给现有 VM

  1. 在步骤 1 登录的 Azure 门户中,在 Azure VM 的设置页侧窗格中的“设置”部分,单击“标识”。

    若要返回到之前关闭的 Azure VM 概述页面,请在“搜索资源”、服务和文档”中搜索并选择 Azure VM 的名称。

  2. 在“用户分配”选项卡上,单击“+ 添加”

  3. 选择在步骤 1 中创建的用户分配的托管标识,然后单击“添加

步骤 7:在 Azure VM 上安装 Databricks CLI

在此步骤中,安装 Databricks CLI,以便使用它来运行自动执行 Azure Databricks 帐户和工作区的命令。

提示

还可以使用 Databricks Terraform 提供程序或 Databricks SDK for Go 以及 Azure 托管标识身份验证,通过运行 HCL 或 Go 代码自动运行 Azure Databricks 账户和工作区。 请参阅 Databricks SDK for GoAzure 托管标识身份验证

  1. 在终端或命令提示符仍然打开并仍登录到步骤 5 中的 Azure VM 的情况下,运行以下两条命令安装 Databricks CLI:

    sudo apt install unzip
    curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sudo sh
    
  2. 通过运行以下命令确认安装了 Databricks CLI,该命令显示已安装的 Databricks CLI 的当前版本:

    databricks -v
    

步骤 8:为 Azure 托管标识身份验证配置 Databricks CLI

在此步骤中,将 Databricks CLI 设置为将 Azure Databricks 的 Azure 托管标识身份验证与你的托管标识设置配合使用。 为此,需要在 Databricks CLI 希望找到所需身份验证设置的默认位置创建一个文件,文件名为默认文件名。

  1. 在步骤 5 中终端或命令提示符仍然打开并登录到 Azure VM 时,请使用 vi 文本编辑器创建并打开一个名为 .databrickscfg 的文件,以便在已登录用户的主目录中进行编辑,方法是运行以下命令:

    vi ~/.databrickscfg
    
  2. 按编辑器组合键 Esc 后跟 i ,开始编辑 .databrickscfg文件。 命令提示符消失,vi 编辑器将启动,-- INSERT -- 一词显示在编辑器底部,以指示 .databrickscfg 文件处于编辑模式。

  3. 输入以下内容。 在此内容中,替换以下值:

    • <account-console-url> 替换为 Azure Databricks 帐户控制台 URL,例如 https://accounts.databricks.azure.cn
    • <account-id> 替换为 Azure Databricks 帐户 ID。 请参阅查找帐户 ID
    • <azure-managed-identity-application-id> 替换为步骤 1 中托管标识的“客户端 ID”值。
    • <workspace-url> 替换为每工作区 URL,例如 https://adb-1234567890123456.7.databricks.azure.cn
    • <azure-workspace-resource-id> 替换为步骤 4 中的 Azure 资源 ID。
    • 如果需要,您可以用不同的配置文件名称替换建议的配置文件名称 AZURE_MI_ACCOUNTAZURE_MI_WORKSPACE。 这些特定名称并非必需。

    如果不想运行帐户级操作,可以省略以下内容中的 [AZURE_MI_ACCOUNT] 部分。

    [AZURE_MI_ACCOUNT]
    host            = <account-console-url>
    account_id      = <account-id>
    azure_client_id = <azure-managed-identity-application-id>
    azure_use_msi   = true
    
    [AZURE_MI_WORKSPACE]
    host                        = <workspace-url>
    azure_workspace_resource_id = <azure-workspace-resource-id>
    azure_client_id             = <azure-managed-identity-application-id>
    azure_use_msi               = true
    
  4. 按编辑器组合 Esc,然后输入 :wq,并输入 Enter,将编辑保存到 .databrickscfg 文件中。 vi 编辑器将关闭,命令提示符将重新出现。

步骤 9:运行帐户级命令

在此步骤中,使用 Databricks CLI 运行一个命令,该命令可自动执行步骤 8 中配置的 Azure Databricks 帐户。

如果不想运行帐户级命令,请跳到步骤 10。

在终端或命令提示符仍然打开并登录到步骤 5 中的 Azure VM 的情况下,运行以下命令列出 Azure Databricks 账户中的所有可用用户。 如果在步骤 8 中重命名了 AZURE_MI_ACCOUNT,请务必在此处替换它。

databricks account users list -p AZURE_MI_ACCOUNT

步骤 10:运行工作区级命令

在此步骤中,使用 Databricks CLI 运行一个命令,该命令可自动执行步骤 8 中配置的 Azure Databricks 工作区。

在终端或命令提示符仍然打开并登录到步骤 5 中的 Azure VM 的情况下,运行以下命令列出 Azure Databricks 工作区中的所有可用用户。 如果在步骤 8 中重命名了 AZURE_MI_WORKSPACE,请务必在此处替换它。

databricks users list -p AZURE_MI_WORKSPACE

步骤 11:清理

此步骤是可选的。 它会删除 Azure VM 以节省成本,如果不再想要继续使用托管标识,则会删除托管标识。 此步骤还会从 Azure Databricks 帐户和工作区中删除已删除的托管标识,以确保完整性。

删除 Azure VM

  1. 如果终端或命令提示符仍然打开并登录到步骤 5 中的 Azure VM,请运行命令 logoutexit 退出 Azure VM。 然后,终端或命令提示符将更改回正常状态。
  2. 在步骤 1 中登录的 Azure 门户中,如果之前关闭了 Azure VM 的概述页面,请返回到该页面。 为此,请在“搜索资源、服务和文档”中搜索并选择 Azure VM 的名称。
  3. 在 Azure VM 的概述页面菜单栏中,单击“删除”。
  4. 选中“我已阅读并理解”复选框,然后单击“删除”

从 Azure 订阅中删除托管标识

  1. 在步骤 1 中登录的 Azure 门户中,如果之前关闭了托管标识的概述页,请返回到该页面。 为此,请在“搜索资源、服务和文档”中搜索并选择托管标识的名称。
  2. 在托管标识的概述页面菜单栏中,单击“删除”。
  3. 选中“我已阅读并理解”复选框,然后单击“删除”

从 Azure Databricks 帐户中移除托管标识

  1. 在 Azure Databricks 帐户的边栏中,单击“用户管理”
  2. 单击“服务主体”选项卡。
  3. 单击在步骤 2 中添加的服务主体的名称。 如果服务主体的名称不可见,请使用“筛选器服务主体”查找它。
  4. 单击省略号按钮,然后单击“删除”
  5. 单击“确认删除”

从 Azure Databricks 工作区中移除托管标识

  1. 在 Azure Databricks 工作区中,单击顶部栏中的用户名,然后选择“管理设置”。
  2. 单击“服务主体”选项卡。
  3. 单击在步骤 3 中添加的服务主体的名称。 如果服务主体的名称不可见,请使用“筛选器服务主体”查找它。
  4. 单击 “删除”
  5. 在确认对话框中,单击“删除”