启用 Azure 专用链接后端和前端连接

本文总结了如何使用 Azure 专用链接来实现用户与其 Databricks 工作区之间的专用连接,以及 Databricks 工作区基础结构中经典计算平面上的群集与控制平面上的核心服务之间的专用连接。

概述

专用链接提供从 Azure VNet 和本地网络到 Azure 服务的专用连接,而无需公开流向公用网络的流量。 Azure Databricks 支持以下专用链接连接类型:

  • 前端专用链接,也称为“用户到工作区”:前端专用链接连接允许用户通过 VNet 接口终结点连接到 Azure Databricks Web 应用程序、REST API 和 Databricks Connect API。 JDBC/ODBC 和 Power BI 集成也可使用前端连接。 传输 VNet 与工作区的 Azure Databricks 控制平面之间的前端专用链接连接的网络流量通过 Microsoft 主干网络进行传输。
  • 后端专用链接,也称为计算平面到控制平面:客户管理的 VNet(计算平面)中的 Databricks Runtime 群集连接到 Azure Databricks 云帐户中的 Azure Databricks 工作区的核心服务(控制平面)。 这可实现从群集到安全群集连接中继终结点和 REST API 终结点的专用连接。
  • 浏览器身份验证专用终结点:若要为没有公共 Internet 连接的客户端支持与 Azure Databricks Web 应用程序的专用前端连接,必须添加浏览器身份验证专用终结点,以支持从 Microsoft Entra ID(以前称为 Azure Active Directory)对 Azure Databricks Web 应用程序的单一登录 (SSO) 登录回调。 如果允许从你的网络连接到公共 Internet,添加浏览器身份验证专用终结点是建议但不必需的操作。 浏览器身份验证专用终结点是具有子资源类型 browser_authentication 的专用连接。

如果同时为前端和后端连接实现专用链接,则可以选择为工作区强制使用专用连接,这意味着 Azure Databricks 会拒绝通过公用网络建立的任何连接。 如果拒绝实现前端或后端连接类型,则无法强制执行此要求。

本文的大部分内容与创建新工作区有关,但你可以在现有工作区上启用或禁用专用链接。 请参阅在现有工作区上启用或禁用 Azure 专用链接

术语

下表介绍了重要术语。

术语 说明
Azure 专用链接 一种 Azure 技术,它提供从 Azure VNet 和本地网络到 Azure 服务的专用连接,而无需公开流向公用网络的流量。
Azure 专用链接服务 一项可以作为专用链接连接目标的服务。 每个 Azure Databricks 控制平面实例都会发布一项 Azure 专用链接服务。
Azure 专用终结点 Azure 专用终结点实现 VNet 与专用链接服务之间的专用连接。 对于前端和后端连接,Azure 专用终结点的目标为 Azure Databricks 控制平面。

有关专用终结点的一般信息,请参阅 Azure 文章:什么是专用终结点?

选择标准部署或简化部署

Azure Databricks 支持两种类型的专用链接部署,必须选择一种:

  • 标准部署(建议):若要提高安全性,Databricks 建议使用单独的专用终结点从单独的传输 VNet 建立前端连接。 可以同时实现前端和后端专用链接连接,也可以仅实现后端连接。 使用单独的 VNet 封装用户访问,与用于经典计算平面中的计算资源的 VNet 分隔开。 创建用于后端和前端访问的单独专用链接终结点。 按照启用 Azure 专用链接作为标准部署中的说明进行操作。
  • 简化部署:某些组织出于各种网络策略原因无法使用标准部署,例如不允许多个专用终结点或阻止单独的传输 VNet。 或者,可以使用专用链接简化部署。 没有单独的 VNet 可以将用户访问与用于经典计算平面中的计算资源的 VNet 分隔开。 而是应将计算平面 VNet 中的传输子网用于用户访问。 只有一个专用链接终结点。 通常同时配置前端和后端连接。 可以选择仅配置后端连接。 在此部署类型中,无法选择仅使用前端连接。 按照启用 Azure 专用链接作为简化部署中的说明进行操作。

要求

Azure 订阅

Azure Databricks 工作区必须位于高级层或企业层

Azure Databricks 工作区网络体系结构

  • Azure Databricks 工作区必须使用 VNet 注入来添加任何专用链接连接(甚至是仅前端连接)。
  • 如果实现后端专用链接连接,Azure Databricks 工作区必须使用安全群集连接(SCC/无公共 IP/NPIP)
  • 需要满足 VNet 注入要求的 VNet。
    • 如主要的 VNet 注入文章所述,你必须定义两个子网(在 UI 中称为公共子网和专用子网)。 用于 Azure Databricks 的 VNet 和子网 IP 范围定义了一次可以使用的最大群集节点数。 请谨慎选择这些值。
    • 若要实现前端专用链接或/和后端专用链接,工作区 VNet 需要一个包含专用链接终结点的第三个子网,并且其 IP 地址范围不能与其他工作区子网的范围重叠。 在本文中,将第三个子网称为专用终结点子网。 示例和屏幕截图假定子网名称为 private-link。 这可以像 CIDR 范围 /27 一样小。 请勿为包含专用终结点的子网定义任何 NSG 规则。
    • 如果使用 UI 创建对象,则需要在创建 Azure Databricks 工作区之前手动创建网络和子网。 如果要使用模板,Azure Databricks 提供的模板会为你创建 VNet 和适当的子网,包括两个常规子网以及另一个用于专用终结点的子网。
  • 如果使用或计划使用 VNet 周围的网络安全组或防火墙来控制流出量,则必须在专用终结点子网上为流出量允许端口 443、6666、3306 和 8443-8451 以连接到 Azure Databricks 控制平面(包括安全群集连接中继)。 如果在专用终结点上启用了网络安全组策略,则还需要在部署了专用终结点的子网上为网络安全组中的流入量允许端口 443、6666 和 8443-8451。

前端连接网络体系结构

(仅适用于前端专用链接)若要让用户从本地网络访问工作区,你必须将该网络的专用连接添加到你的 Azure 网络。 在配置专用链接之前添加此连接。 详细信息取决于你选择的是专用链接标准部署还是简化部署。

  • 对于标准部署,你会创建或使用现有的传输 VNet,有时称为“堡垒 VNet”或“中心 VNet”。 必须可以使用 Expressroute 或 VPN 网关连接从本地用户环境访问此 VNet。 对于前端专用链接,Databricks 建议为与控制平面的连接创建单独的 VNet,而不是共享工作区 VNet。 请注意,传输 VNet 及其子网可以位于工作区 VNet 及其子网所在的同一区域和资源组中,但它们不必相匹配。 为单独的传输 VNet 创建一个资源组,并为该专用终结点使用不同的专用 DNS 区域。 如果使用两个单独的专用终结点,则无法共享 DNS 区域。
  • 对于简化部署,请在工作区 VNet 中创建一个传输子网。 在此部署中,传输子网没有单独的专用终结点。 工作区 VNet 中的传输子网使用单个专用终结点进行后端和前端连接。

Azure 用户权限

作为 Azure 用户,你必须具有足够的读/写权限来执行以下操作:

  • 预配新的 Azure Databricks 工作区。
  • 在工作区 VNet 和传输 VNet(供前端使用)中创建Azure 专用链接终结点。

如果为传输 VNet 创建专用终结点的用户对工作区不具有所有者/参与者权限,则对工作区具有所有者/参与者权限的单独用户必须手动批准专用终结点创建请求。

可以在现有工作区上启用专用链接。 升级要求工作区使用 VNet 注入安全群集连接和高级定价层。 可以在更新过程中更新到安全群集连接和高级定价层。

可以使用 ARM 模板或 azurerm Terraform 提供程序版本 3.41.0+。 可以使用 Azure 门户应用自定义模板并在 UI 中修改参数。 但是,Azure Databricks 工作区实例本身不支持在 Azure 门户用户界面中进行这种升级。

如果升级出现问题,可以重复工作区更新步骤,但需要将字段设置为禁用专用链接。

尽管本部分侧重于如何在现有工作区上启用专用链接,但你同样可以在现有工作区上禁用专用链接,方法是通过 ARM 模板或 Terraform 更新使用相同的工作区更新调用。 有关详细信息,请参阅步骤 4:应用工作区更新

步骤 1:阅读本页中的要求和文档

在尝试升级到专用链接之前,应该阅读一些重要概念和要求:

  1. 在继续操作之前,请阅读本文,其中包括概念和要求。
  2. 确定是要使用标准部署还是简化部署
  3. 标准部署简化部署(取决于使用的方法)的页面上,仔细查看包含各种方案的页面。 查找与用例匹配的方案。 记下你打算用于 publicNetworkAccessrequiredNsgRules 的值。 对于前端连接已锁定的前端和后端专用链接的建议配置,请使用设置 publicNetworkAccess=DisabledrequiredNsgRules=NoAzureDatabricksRules

步骤 2:停止所有计算资源

在尝试这种升级之前,必须停止所有计算资源,例如群集、池或经典 SQL 仓库。 不能有任何工作区计算资源正在运行,否则升级会失败。 Databricks 建议规划好升级时间,因为在此过程中会发生停机。

重要

不要尝试在更新期间启动任何计算资源。 如果 Azure Databricks 确定计算资源已启动(或仍在启动),Azure Databricks 会在更新后终止它们。

步骤 3:创建子网和专用终结点

  1. 将子网添加到后端专用终结点的工作区 VNet。

  2. 打开有关标准部署简化部署(取决于哪种的方法)的文章。

    按照该页面上的说明创建与你的部署类型匹配的专用终结点。

  3. 在进行工作区更新之前,创建所有专用终结点用于后端支持。

  4. 要在 UI 中进行访问,请创建一个包含子资源 databricks_ui_api 的专用终结点,以支持从中转 VNet 执行 SSO。 如果你有多个中转 VNet 访问工作区以进行前端访问,请创建多个包含子资源 databricks_ui_api 的专用终结点。

步骤 4:应用工作区更新

需要应用工作区更新,而不是创建新工作区。

必须将 publicNetworkAccessrequiredNsgRules 参数更新为在上一步骤中选择的值。

使用以下方法之一:

  • 使用 Azure 门户 UI(无模板)

  • 使用 Azure 门户应用更新的 ARM 模板

  • 使用 Terraform 应用更新

    使用 Azure 门户 UI(无模板)

    1. 在 Azure 门户中转到你的 Azure Databricks 服务实例。

    2. 在左侧导航栏中的“设置”下,单击“网络”。

    3. 根据你的用例,将“允许公用网络访问”和“所需的 NSG 规则”设置为适当的值。 请参阅步骤 1:阅读本页中的要求和文档

      注意

      要启用 Azure 专用链接,工作区必须启用安全群集连接(有时称为“无公共 IP”)。 如果尚未启用,在更新专用链接的同时,可以通过将“无公共 IP”设置为 True 来选择启用安全群集连接。 但是,Azure Databricks 建议在启用专用链接之前单独启用安全群集连接,以便可以单独验证它们是否成功。

    4. 单击“保存” 。

    网络更新可能需要 15 分钟以上才能完成。

使用 Azure 门户应用更新的 ARM 模板

注意

如果托管资源组使用自定义名称,则必须相应地修改模板。 有关详细信息,请联系 Azure Databricks 客户团队。

  1. 复制以下升级 ARM 模板 JSON:

    {
       "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
       "contentVersion": "1.0.0.0",
       "parameters": {
           "location": {
               "defaultValue": "[resourceGroup().location]",
               "type": "String",
               "metadata": {
                   "description": "Location for all resources."
               }
           },
           "workspaceName": {
               "type": "String",
               "metadata": {
                   "description": "The name of the Azure Databricks workspace to create."
               }
           },
           "apiVersion": {
               "defaultValue": "2023-02-01",
               "allowedValues": [
                "2018-04-01",
                   "2020-02-15",
                   "2022-04-01-preview",
                   "2023-02-01"
               ],
               "type": "String",
               "metadata": {
                   "description": "2018-03-15 for 'full region isolation control plane' and 2020-02-15 for 'FedRAMP certified' regions"
               }
           },
           "publicNetworkAccess": {
               "defaultValue": "Enabled",
               "allowedValues": [
                   "Enabled",
                   "Disabled"
               ],
               "type": "String",
               "metadata": {
                   "description": "Whether the workspace allows access from the public Internet"
               }
           },
           "requiredNsgRules": {
               "defaultValue": "AllRules",
               "allowedValues": [
                   "AllRules",
                   "NoAzureDatabricksRules"
               ],
               "type": "String",
               "metadata": {
                   "description": "The security rules that are applied to the security group of the Vnet"
               }
           },
           "enableNoPublicIp": {
               "defaultValue": true,
               "type": "Bool"
           },
           "pricingTier": {
               "defaultValue": "premium",
               "allowedValues": [
                   "premium",
                   "standard",
                   "trial"
               ],
               "type": "String",
               "metadata": {
                   "description": "The pricing tier of workspace."
               }
           },
           "privateSubnetName": {
               "defaultValue": "private-subnet",
               "type": "String",
               "metadata": {
                   "description": "The name of the private subnet."
               }
           },
           "publicSubnetName": {
               "defaultValue": "public-subnet",
               "type": "String",
               "metadata": {
                   "description": "The name of the public subnet."
               }
           },
           "vnetId": {
               "type": "String",
               "metadata": {
                   "description": "The virtual network Resource ID."
               }
           }
       },
       "variables": {
           "managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]",
           "managedResourceGroupId": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', variables('managedResourceGroupName'))]"
        },
        "resources": [
           {
               "type": "Microsoft.Databricks/workspaces",
               "apiVersion": "[parameters('apiVersion')]",
               "name": "[parameters('workspaceName')]",
               "location": "[parameters('location')]",
               "sku": {
                   "name": "[parameters('pricingTier')]"
               },
               "properties": {
                   "ManagedResourceGroupId": "[variables('managedResourceGroupId')]",
                   "publicNetworkAccess": "[parameters('publicNetworkAccess')]",
                   "requiredNsgRules": "[parameters('requiredNsgRules')]",
                   "parameters": {
                       "enableNoPublicIp": {
                           "value": "[parameters('enableNoPublicIp')]"
                       },
                       "customVirtualNetworkId": {
                           "value": "[parameters('vnetId')]"
                       },
                       "customPublicSubnetName": {
                           "value": "[parameters('publicSubnetName')]"
                       },
                       "customPrivateSubnetName": {
                           "value": "[parameters('privateSubnetName')]"
                       }
                   }
               }
           }
       ]
    }
    
    1. 转到 Azure 门户自定义部署页。

    2. 单击“在编辑器中生成自己的模板”。

    3. 粘贴复制的模板的 JSON。

    4. 单击“保存” 。

    5. 若要启用专用链接,请根据用例设置 publicNetworkAccessrequiredNsgRules 参数。

      若要禁用专用链接,请将 publicNetworkAccess 设置为 true,并将 requiredNsgRules 设置为 AllRules

    6. 对于其他字段,请使用创建工作区时所用的相同参数,例如订阅、区域、工作区名称、子网名称、现有 VNet 的资源 ID。

      重要

      资源组名称、工作区名称和子网名称必须与现有工作区相同,这样,此命令才能更新现有工作区而不是创建新工作区。

    7. 单击“查看 + 创建”。

    8. 如果没有验证问题,请单击“创建”。

    网络更新可能需要 15 分钟以上才能完成。

使用 Terraform 应用更新

对于使用 Terraform 创建的工作区,可以更新工作区以使用专用链接。

重要

必须使用 terraform-provider-azurerm 版本 3.41.0 或更高版本,因此请根据需要升级 Terraform 提供程序版本。 如果更改其中的任何设置,早期版本会尝试重新创建工作区。

大致步骤如下所示:

  1. 更改以下工作区设置:

    • public_network_access_enabled:设置为 true(启用)或 false(禁用)
    • network_security_group_rules_required:设置为 AllRulesNoAzureDatabricksRules

    网络更新可能需要 15 分钟以上才能完成。

  2. 创建专用终结点。

有关如何启用专用链接和创建专用终结点的详细指南:

网络更新可能需要 15 分钟以上才能完成。

步骤 5:测试用户 SSO 身份验证和后端连接

在部署主页中了解有关如何执行以下操作的详细信息:

  • 对工作区进行用户 SSO 身份验证测试。
  • 测试(后端连接所需的)后端专用链接连接

步骤 6:验证更新

  1. 在 Azure 门户中转到你的 Azure Databricks 服务实例。
  2. 在左侧导航栏中的“设置”下,单击“网络”。
  3. 确认“允许公用网络访问”的值与你设置的值匹配。
  4. 确认“所需的 NSG 规则”值与你设置的值匹配。

故障恢复

如果工作区更新失败,工作区可能会标记为“失败”状态,这意味着该工作区无法执行计算操作。 若要将失败的工作区还原为“活动”状态,请查看更新操作状态消息中的说明。 解决任何问题后,重新对失败的工作区进行更新。 重复这些步骤,直到更新成功完成。 如有疑问,请联系 Azure Databricks 客户团队。