安全群集连接(无公共 IP/NPIP)

启用安全群集连接后,客户虚拟网络没有开放的端口,并且经典计算平面中的计算资源没有公共 IP 地址。 安全群集连接也称为无公共 IP (NPIP)。

  • 在网络级别,每个群集在群集创建过程中会启动到控制平面安全群集连接中继的连接。 群集使用端口 443 (HTTPS) 和一个与 Web 应用程序和 REST API 所用 IP 地址不同的 IP 地址来建立此连接。
  • 控制平面按逻辑启动新的 Databricks Runtime 作业或执行其他群集管理任务时,这些请求将通过此隧道发送到群集。
  • 计算平面 (VNet) 没有开放端口,并且经典计算平面资源没有公共 IP 地址。

好处:

  • 网络管理简单,无需在安全组上配置端口,也无需配置网络对等互连。
  • 凭借增强的安全性和简单的网络管理,信息安全团队可以加快通过针对将 Databricks 作为 PaaS 提供程序的审批。

注意

经典计算平面 VNet 与 Azure Databricks 控制平面之间的所有 Azure Databricks 网络流量都会经过 Microsoft 网络主干线,而不是公共 Internet。 即使禁用了安全群集连接也是如此。

安全群集连接

使用安全群集连接

若要将安全群集连接与新的 Azure Databricks 工作区结合使用,请使用以下任一选项。

  • Azure 门户:预配工作区时,转到“网络”选项卡,将“使用安全群集连接(无公共 IP)部署 Azure Databricks 工作区”选项设置为“是”。
  • ARM 模板:对于创建新工作区的 Microsoft.Databricks/workspaces 资源,将 enableNoPublicIp 布尔参数设置为 true

重要

在任一情况下,你需要在用于启动具有安全群集连接的工作区的 Azure 订阅中注册 Azure 资源提供程序 Microsoft.ManagedIdentity。 每个订阅只需进行一次注册操作。 有关说明,请参阅 Azure 资源提供程序和类型

可以将安全群集连接添加到已使用 VNet 注入的现有工作区。 请参阅将安全群集连接添加到现有工作区

如果使用的是 ARM 模板,则根据你是希望让 Azure Databricks 为工作区创建默认(托管)虚拟网络还是希望使用你自己的虚拟网络(也称为 VNet 注入),将参数添加到下列其中一个模板。 VNet 注入是一项可选功能,允许你提供自己的 VNet 来承载新的 Azure Databricks 群集。

工作区子网的流出量

启用安全群集连接时,两个工作区子网都是专用子网,因为群集节点没有公共 IP 地址。

根据你是使用默认(托管)VNet 还是使用可选的 VNet 注入功能提供自己的用于部署工作区的 VNet,网络流出量的实现详细信息有所不同。 有关详细信息,请参阅以下部分。

重要

在使用安全群集连接时,由于出口流量的增加,可能会产生额外的成本。 对于需要成本优化型解决方案的小型组织,可以选择在部署工作区时禁用安全群集连接。 但是,为了实现最安全的部署,Azure 和 Databricks 强烈建议启用安全群集连接。

默认(托管)VNet 的流出量

如果将安全群集连接与 Azure Databricks 创建的默认 VNet 结合使用,Azure Databricks 会自动为从工作区子网到 Azure 主干网和公用网络的出站流量创建一个 NAT 网关。 NAT 网关是在 Azure Databricks 管理的托管资源组中创建的。 不能修改此资源组,也不能修改其中预配的任何资源。

自动创建的 NAT 网关会产生额外的成本。

使用 VNet 注入的出口

如果对使用 VNet 注入的工作区启用安全群集连接,Databricks 建议工作区有一个稳定的出口公共 IP。

稳定的出口公共 IP 地址非常有用,因为你可以将它们添加到外部允许列表。 例如,若要使用稳定的传出 IP 地址从 Azure Databricks 连接到 Salesforce。

警告

Azure 宣布将于 2025 年 9 月 30 日停用 Azure 中虚拟机的默认出站访问连接。 请参阅此公告。 这意味着使用默认出站访问(而不是稳定的出口公共 IP)的现有 Azure Databricks 工作区在该日期后可能无法继续工作。 Databricks 建议在该日期之前为工作区添加显式出站方法。

选择以下选项之一:

  • 对于需要进行一些自定义的部署,请选择 Azure NAT 网关。 在工作区的两个子网上配置网关,以确保到 Azure 主干网和公用网络的所有出站流量都通过该网关传输。 群集具有稳定的流出量公共 IP,并且你可以根据自定义流出量需求修改配置。 可以使用 Azure 模板或通过 Azure 门户来实现此解决方案。
  • 对于具有复杂路由要求的部署或将 VNet 注入与流出量防火墙(例如 Azure 防火墙或其他自定义网络体系结构)结合使用的部署,可以使用称为用户定义路由 (UDR) 的自定义路由。 UDR 确保为工作区正确路由网络流量,无论是直接路由到所需终结点还是通过流出量防火墙路由。 如果使用此类解决方案,则必须为 Azure Databricks 安全群集连接中继和用户定义的 Azure Databricks 路由设置中列出的其他所需终结点添加直接路由或允许的防火墙规则。

警告

不要将流出量负载均衡器用于启用了安全群集连接的工作区。 在生产系统中,流出量负载均衡器可能会导致端口耗尽的风险。

将安全群集连接添加到现有工作区

可以在现有工作区上启用安全群集连接。 若要升级,工作区需要使用 VNet 注入

可以使用门户 UI、ARM 模板或azurerm Terraform 提供程序版本 3.41.0+。 可以使用 Azure 门户应用自定义模板并在 UI 中修改参数。 还可以在 Azure 门户 UI 中升级 Azure Databricks 工作区实例本身。

重要

在进行此更改之前,如果使用防火墙或进行了其他网络配置更改以控制经典计算平面的入口或出口,可能需要更新防火墙或网络安全组规则,以便这些更改完全生效。 例如,使用安全群集连接时,与控制平面建立额外的传出连接,并且不再使用来自控制平面的传入连接。

如果升级出现问题并且需要临时回滚更改,请参阅临时回滚升级到安全群集连接的操作

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

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

步骤 2:更新工作区

必须更新无公共 IP参数(在模版上,它是enableNoPublicIp)。 将其设置为值True (true)。

使用以下方法之一:

使用 Azure 门户 UI(无模板)

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

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

  3. 选择无公共 IP

    注意

    同时,还可以选择启用Azure 专用链接,方法是将允许公用网络访问所需的 NSG 规则的值设置为用例的相应值。 但是,启用专用链接需要其他配置和验证,因此可能需要在此更新后单独执行该操作,从而实现安全的群集连接。 有关重要的详细信息和要求,请参阅启用 Azure 专用链接

  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"
                }
            },
            "enableNoPublicIp": {
                "defaultValue": true,
                "type": "Bool"
            },
            "pricingTier": {
                "defaultValue": "premium",
                "allowedValues": [
                    "premium",
                    "standard",
                    "trial"
                ],
                "type": "String",
                "metadata": {
                    "description": "The pricing tier of workspace."
                }
            },
            "publicNetworkAccess": {
              "type": "string",
              "defaultValue": "Enabled",
              "allowedValues": [
                "Enabled",
                "Disabled"
              ],
              "metadata": {
                "description": "Indicates whether public network access is allowed to the workspace - possible values are Enabled or Disabled."
              }
            },
            "requiredNsgRules": {
              "type": "string",
              "defaultValue": "AllRules",
              "allowedValues": [
                "AllRules",
                "NoAzureDatabricksRules"
              ],
              "metadata": {
                "description": "Indicates whether to retain or remove the AzureDatabricks outbound NSG rule - possible values are AllRules or NoAzureDatabricksRules."
              }
            }
        },
        "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')]"
                        }
                    }
                }
            }
        ]
    }
    
    1. 转到 Azure 门户自定义部署页。

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

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

    4. 单击“保存” 。

    5. 填写这些参数。

    6. 若要更新现有工作区,请使用用于创建工作区的相同参数,但不能使用 enableNoPublicIp,该参数必须设置为 true。 设置现有 VNet 的订阅、区域、工作区名称、子网名称、资源 ID。

      重要

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

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

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

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

使用 Terraform 应用更新

对于使用 Terraform 创建的工作区,无需重新创建工作区即可更新该工作区。

重要

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

更改以下工作区设置:

  • custom_parameters 块中的 no_public_ip 可以从 false 更改为 true

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

步骤 3:验证更新

在工作区处于活动状态后,更新作业即告完成。 验证是否已应用更新:

  1. 在 Web 浏览器中打开 Azure Databricks。

  2. 启动工作区的某个群集,并等待群集完全启动。

  3. 在 Azure 门户中转到你的工作区实例。

  4. 单击字段标签“托管资源组”旁边的蓝色 ID。

  5. 在该组中找到群集的 VM,然后单击其中一个 VM。

  6. 在 VM 设置的“属性”中,查看“网络”区域中的字段。

  7. 确认“公共 IP 地址”字段为空。

    如果已填充,则表示 VM 使用公共 IP 地址,这也意味着更新失败。

故障恢复

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

临时回滚升级到安全群集连接的操作

如果在部署过程中出现问题,可以通过临时回滚来逆转部署过程,但不支持在工作区上禁用 SCC,而只能在稍后继续升级之前临时回滚。 如果需要临时这样做,可以按照上面的说明进行升级,但需要将 enableNoPublicIp 设置为 false 而不是 true。