为 Databricks 应用配置网络

Databricks Apps 支持精细的网络控制,帮助你保护和管理应用与 Internet 和内部资源通信的方式。 可以使用 IP 访问列表、前端专用连接和网络策略的组合来配置入口(传入)和出口(传出)流量规则。

网络体系结构

Azure Databricks在无服务器计算平面上部署应用,在该平面上直接接收流量。 这类似于其他路由优化服务,如模型服务和矢量搜索。

连接过程如下所示:

  1. 对Azure Databricks应用的初始用户请求使用控制平面启动 OAuth 身份验证,以验证会话并授权访问应用。
  2. 成功身份验证后,所有后续请求将直接路由到无服务器计算平面,而无需遍历控制平面。

为无服务器计算平面配置的网络安全策略适用于 Databricks Apps 流量。 这包括 IP 访问列表和前端专用连接配置。

入口控件

使用以下功能限制从公共 Internet 访问Azure Databricks工作区和应用。

  • IP 访问列表: 通过在工作区级别启用 IP 访问列表,限制工作区和应用对已知和受信任的 IP 范围的访问。 仅允许来自配置的 IP 范围的流量。 有关详细信息,请参阅 配置工作区的 IP 访问列表
  • 前端专用连接:通过Azure Private Link连接路由入口流量,以通过 VNet 安全地访问应用。

    必须为 databricksapps.com 域配置条件 DNS 转发,以确保通过专用连接正确解析名称。 否则,应用程序域名的 DNS 查询可能会解析为公共 IP 地址,而不是私有终结点。 有关设置说明,请参阅 Configure Inbound Private Link

    Databricks 应用不支持旧区域 URL,因为它们不支持 OAuth,这是应用身份验证所必需的。 有关详细信息,请参阅 传统区域 URL

出口控制

若要控制来自应用的出站流量,请创建网络连接配置(NCC),并将网络策略应用到托管应用的工作区。

网络连接配置

使用 网络连接配置安全地将应用连接到Azure服务。 NCC 提供稳定的子网 ID,可将其添加到存储账户的防火墙中,以明确允许应用和其他无服务器计算资源的访问。

若要进一步限制流出流量到专用目标,请为Azure资源配置无服务器专用终结点,或通过 VNet 中的Azure负载均衡器路由流量。

网络策略

使用 网络策略 对 Databricks 应用和其他无服务器工作负荷强制实施出口限制。 如果需要满足组织或合规性要求来控制出站连接,这非常有用。

注释

网络策略仅在高级层上可用。

如果你的应用需应用网络策略,请注意:

  • 必须限制对特定一组已批准的外部域的访问
  • 需要防止意外数据外泄
  • 必须遵守限制出站 Internet 流量的安全或符合性标准

应用部署所需的出口域

使用受限出口网络策略时,必须允许列出应用生成或运行时的特定域才能成功。 如果没有这些域,应用部署会失败,因为生成过程无法下载依赖项或与所需服务通信。

所有 Databricks 应用部署都需要以下域:

域名 Purpose
*.databricksapps.com 应用服务和用户连接
pypi.orgfiles.pythonhosted.org 在应用构建期间下载Python包(如果你的应用使用 requirements.txt,这是必需的)
registry.npmjs.org 在应用构建期间下载 Node.js 包(如果你的应用使用 package.json,则是必需的)

:::

此外,Azure部署可能需要以下域:

域名 Purpose
*.blob.core.windows.net 连接到 Azure 存储的应用程序使用的 Azure Blob Storage 端点
*.dfs.core.windows.net 由连接到 ADLS 的应用程序使用的 Azure Data Lake Storage 终结点

:::

:::

你的应用可能需要其他域,具体取决于它调用的特定依赖项或外部 API。 例如,如果应用调用第三方 REST API,请将该 API 的域添加到允许列表。

重要

在具有受限出口的Private Link环境中,缺少域允许列表条目通常会导致应用部署失败。 如果应用无法部署,请检查 system.access.outbound_network 系统表,查看被拒绝的连接尝试,以确定要添加的域。 请参阅 检查拒绝日志

配置网络策略的最佳做法

遵循以下准则以避免意外的中断,并确保应用可以访问所需的资源:

  • 仅允许必要的目标地址。 为应用所需的公共或专用资源添加完全限定的域名(FQDN)。 关于应用部署所需的最低出口域集,请参阅 应用部署所需的出口域
  • 根据需要包括包存储库。 如果您的应用程序安装公共Python或Node.js包,您可能需要允许Python的pypi.org等域名或Node的registry.npmjs.org等域名。 您的应用程序可能需要额外或不同的域,具体取决于您的特定依赖项。 如果没有这些存储库,依赖于 requirements.txtpackage.json 的应用构建可能会失败。
  • 使用干运行模式验证网络策略。 此模式模拟策略强制实施,而不会阻止流量。
  • 使用 system.access.outbound_network 表查看被拒绝的连接尝试。 这有助于识别可能需要允许的域。 请参阅 检查拒绝日志
  • 添加任何必需的外部域,例如受信任的 API 或未在 Unity 目录中注册的Azure存储帐户。

如果工作区使用前端专用连接,则必须完成其他配置步骤才能部署和使用 Databricks 应用。 如果没有此配置,应用部署可能会失败,或者用户可能无法访问该应用。

DNS 配置

必须为 databricksapps.com 域配置条件 DNS 转发,使应用 URL 解析为私有 IP 地址,而不是公共 IP 地址。 如果没有此配置,专用网络后面的用户无法访问已部署的应用。

将以下域的条件转发规则添加到Azure DNS服务器:

  • *.databricksapps.com
  • *.azuredatabricks.net
  • *.privatelink.azuredatabricks.net

验证 VNet 是否链接到Azure Private DNS区域。 有关详细的 DNS 设置说明,请参阅 自定义 DNS 配置

出口要求

在具有受限出口的Private Link环境中,应用需要在生成时间和运行时期间与特定域建立出站连接。 请参阅 应用部署所需的出口域 以获取完整的允许清单域列表。

若要在Private Link环境中为应用配置出口,请执行以下操作:

  1. 创建或更新 网络连接配置(NCC), 并将其附加到托管应用的工作区。
  2. 创建或更新 网络策略 以允许列出 所需的域
  3. 首先使用试运行模式来验证配置,而不会阻止流量。
  4. 在应用部署期间查看 system.access.outbound_network 系统表,以查找任何被拒绝的连接尝试。

如果应用无法在Private Link环境中部署:

  1. 检查出口拒绝日志。 查询 system.access.outbound_network 系统表以获取最近的拒绝事件。 请参阅 检查拒绝日志

    SELECT *
    FROM system.access.outbound_network
    WHERE event_time >= CURRENT_TIMESTAMP() - INTERVAL 2 HOUR
    ORDER BY event_time DESC;
    
  2. 验证 DNS 解析。 确认应用的 URL 解析为专用 IP 地址,而不是公共 IP 地址。 在你的专用网络内部使用 nslookup 进行检查:

    nslookup <your-app-name>.databricksapps.com
    
  3. 查看网络策略配置。 验证 所需的域 是否在允许列表中。 包存储库的域缺失(pypi.orgregistry.npmjs.org)是构建失败的最常见原因。

  4. 重启应用。 更新网络策略后,重新部署或重启应用,使更新的策略生效。 请参阅 重启或重新部署无服务器工作负荷

加密和流量路由

Databricks Apps 使用专用路由路径和多个加密层来保护网络通信和保护数据。

流量路由

Azure Databricks控制平面、计算平面、其他Azure Databricks资源以及云服务之间的流量通过云提供商的全球网络传输,不会经过公共互联网。

用户与databricksapps.com之间的流量可能会根据用户的网络位置遍历公共互联网。 若要避免公共 Internet 路由,请配置前端专用连接。

传输中的加密

与应用之间的所有网络通信均已加密:

  • 用户流量: 用户与databricksapps.com之间的通信使用传输层安全(TLS)1.3加密。
  • 控制平面流量:Azure Databricks控制平面与计算平面之间的通信使用相互 TLS(mTLS)进行管理操作,包括应用创建、更新和删除。

静态加密

Databricks Apps 使用以下方法加密存储的数据:

  • Application code: Azure Databricks将应用代码存储在工作区文件中,并使用与笔记本和其他工作区文件相同的加密。
  • 计算存储: 应用使用通过 AES-256 加密的临时主机操作系统磁盘以及云提供商的默认加密实现。