为工作区存储帐户启用防火墙支持

每个 Azure Databricks 工作区都在托管的资源组中有关联的 Azure 存储帐户,称为工作区存储帐户。 工作区存储帐户包含工作区系统数据(作业输出、系统设置和日志)、DBFS 根,在某些情况下还包含 Unity Catalog 工作区目录。 本文介绍如何使用 ARM(Azure 资源管理器)模板、Azure CLI 或 PowerShell,限制只有授权的资源和网络能访问您的工作区存储帐户。

工作区存储帐户的防火墙支持是什么?

默认情况下,工作区存储帐户的 Azure 存储帐户接受来自所有网络的、经过身份验证的连接。 可以通过为工作区存储帐户启用防火墙支持来限制这种访问。 这可以确保禁止公用网络访问,并且无法从未经授权的网络访问工作区存储帐户。 如果组织中的 Azure 策略要求确保存储帐户的私密性,则可以配置此功能。

为工作区存储帐户启用防火墙支持后,来自 Azure Databricks 外部服务的所有访问都必须使用经过批准的专用终结点和专用链接。 Azure Databricks 将创建一个访问连接器,以使用 Azure 托管标识连接到存储。 必须使用服务终结点或专用终结点才能从 Azure Databricks 无服务器计算进行访问。

要求

  • 工作区必须为来自经典计算平面的连接启用 VNet 注入

  • 工作区必须为来自经典计算平面的连接启用安全群集连接(无公共 IP/NPIP)

  • 你的工作区必须采用高级计划

  • 必须为存储帐户的专用终结点设置独立的子网。 这是对基本 Azure Databricks 功能的两个主要子网的补充。

    该子网必须与工作区位于同一 VNet 中,或者位于工作区可访问的独立 VNet 中。 以 CIDR 表示法使用最小大小 /28

  • 如果将 Cloud Fetch 与 Microsoft Fabric Power BI 服务配合使用,则始终必须使用网关对工作区存储帐户进行私密访问,或禁用 Cloud Fetch。 请参阅步骤 2(建议):为 Cloud Fetch 客户端 VNet 配置专用终结点

  • 对于 Azure CLI 或 PowerShell 部署方法,必须创建 Azure Databricks 访问连接器并保存其资源 ID。 这需要使用系统分配的托管标识或用户分配的托管标识。 请参阅 用于 Databricks 的访问连接器。 不能在托管资源组中使用 Azure Databricks 访问连接器。

还可以使用 步骤 5 中的 ARM 模板:为工作区存储帐户启用防火墙 以创建新的工作区。 在这种情况下,请在执行步骤 1 到 4 之前关闭工作区中的所有计算。

步骤 1:创建存储帐户的专用终结点

对于“目标子资源”值,请创建以下两个专用终结点,它们从用于 VNet 注入的 VNet 连接到工作区存储帐户:dfsblob

注意

如果在创建专用终结点时在托管资源组上收到拒绝分配错误,请关闭工作区中的所有计算,并按照 步骤 5:在遵循步骤 1 到 4 之前为工作区存储帐户启用防火墙

  1. 导航到你的工作区。

  2. 在“概要”下,单击“托管资源组”的名称

  3. “资源”下,记下工作区存储帐户的名称。 名称以dbstorage开头。

  4. 在门户顶部的搜索框中,输入并选择 “专用终结点”。

  5. 单击 + 创建

  6. 在“资源组名称”字段中设置资源组

    重要

    该资源组不能与工作区存储帐户所在的托管资源组相同。

  7. 在“名称”字段中,为此专用终结点输入唯一的名称

    • 对于为每个源网络创建的第一个专用终结点,请创建一个 DFS 终结点。 Databricks 建议添加后缀 -dfs-pe
    • 对于为每个源网络创建的第二个专用终结点,请创建一个 Blob 终结点。 Databricks 建议添加后缀 -blob-pe

    “网络接口名称”字段会自动填充

  8. 将“区域”字段设置为你的工作区所在的区域

  9. 单击“ 下一步:资源”。

  10. Connection 方法中,选择“ 连接到我的目录中的 Azure 资源”。

  11. “订阅”中,选择包含工作区的订阅。

  12. 资源类型中,选择 Microsoft.Storage/storageAccounts

  13. “资源”中,选择工作区存储帐户。

  14. “目标”子资源中,选择目标资源类型。

    • 对于为每个源网络创建的第一个专用终结点,请将其设置为 dfs
    • 对于为每个源网络创建的第二个专用终结点,请将其设置为 blob
  15. 单击“ 下一步:虚拟网络”。

  16. 在“虚拟网络”字段中选择一个 VNet

  17. 在子网字段中,将子网设置为你为存储帐户的专用终结点创建的独立子网。

    此字段可能会使用专用终结点的子网自动填充,但可能需要显式设置它。 不能使用用于基本 Azure Databricks 工作区功能的两个工作区子网之一(通常名为 private-subnetpublic-subnet)。

  18. 根据需要更改默认 的专用 IP 配置应用程序安全组

  19. 单击“ 下一步:DNS”。 “DNS”选项卡中会自动填充你先前选择的正确订阅和资源组。 请根据需要更改这些设置。

  20. 单击“ 下一步:标记 ”并根据需要添加标记。

  21. 单击“ 下一步:查看 + 创建 ”。并查看字段。

  22. 单击 “创建”

步骤 2(建议):为 Cloud Fetch 客户端 VNet 配置专用终结点

Cloud Fetch 是 ODBC 和 JDBC 中的一种机制,用于通过云存储并行提取数据,以便更快地将数据引入 BI 工具。 如果你正在通过 BI 工具提取大于 1 MB 的查询结果,则有可能使用的是 Cloud Fetch。

注意

如果你要将 Microsoft Fabric Power BI 服务与 Azure Databricks 配合使用,则必须禁用 Cloud Fetch,因为此功能会阻止从 Fabric Power BI 直接访问工作区存储帐户。 或者,可以配置虚拟网络数据网关或本地数据网关,以允许对工作区存储帐户进行私密访问。 这不适用于 Power BI Desktop。 若要禁用 Cloud Fetch,请使用配置 EnableQueryResultDownload=0

如果使用 Cloud Fetch,请创建专用终结点用于从 Cloud Fetch 客户端的任何 VNet 连接到工作区存储帐户。

对于 Cloud Fetch 客户端的每个源网络,请创建以下两个专用终结点,它们使用两个不同的“目标子资源”值:dfsblob。 有关详细步骤,请参阅步骤 1:创建存储帐户的专用终结点。 在这些步骤中,对于创建专用终结点时出现的“虚拟网络”字段,请确保为每个 Cloud Fetch 客户端指定源 VNet

步骤 3:确认终结点的批准状态

创建存储帐户的所有专用终结点后,检查它们是否已获批准。 系统可能会自动批准,或者你可能需要在存储帐户中批准它们。

  1. 在 Azure 门户中导航到工作区。
  2. 在“概要”下,单击“托管资源组”的名称
  3. 在“资源”下,单击名称以 开头的“存储帐户”类型的资源dbstorage
  4. 在边栏中,单击“网络”
  5. 单击“专用终结点连接”。
  6. 检查“连接状态”以确认终结点显示为“已批准”,或者选择终结点并单击“批准”

步骤 4:授权无服务器计算连接

必须通过将网络连接配置 (NCC) 附加到工作区,来授权无服务器计算连接到工作区存储帐户。 将 NCC 附加到工作区时,会自动将网络规则添加到用作工作区存储帐户的 Azure 存储帐户中。 如需说明,请参阅配置防火墙以进行无服务器计算访问

如果你希望能够使用专用终结点从 Azure Databricks 无服务器计算进行访问,请联系你的 Azure Databricks 帐户团队。

步骤 5:为工作区存储帐户启用防火墙

使用 ARM 模板部署、Azure CLI 或 PowerShell 为 Databricks 工作区配置存储防火墙支持。

使用 ARM 模板启用存储防火墙支持

此步骤使用 ARM 模板来管理 Azure Databricks 工作区。 还可以使用 Terraform 更新或创建工作区。 请参阅 azurerm_databricks_workspace Terraform 提供程序。 若要禁用工作区存储帐户的防火墙支持,请遵循相同的过程,但将参数存储帐户防火墙(storageAccountFirewall 在模板中)设置为 Disabled

  1. 在 Azure 门户中,搜索并选择 Deploy a custom template

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

  3. 复制用于工作区存储帐户的防火墙支持的 ARM 模板中所述的 ARM 模板,并将其粘贴到编辑器中。

  4. 单击“ 保存”。

  5. 查看并编辑字段。 请使用创建工作区时所用的相同参数,例如订阅、区域、工作区名称、子网名称、现有 VNet 的资源 ID。

    有关字段的说明,请参阅 ARM 模板字段

  6. 依次单击“查看 + 创建”、“创建”

注意

工作区存储帐户上的公共网络访问设置为“从所选虚拟网络和 IP 地址启用”,而不是“禁用”,以便无需专用终结点也可支持无服务器计算资源。 工作区存储帐户位于受管理资源组中,存储防火墙只能在为工作区的无服务器连接添加网络连接配置 (NCC) 时才能更新。 如果你希望能够使用专用终结点从 Azure Databricks 无服务器计算进行访问,请联系你的 Azure Databricks 帐户团队。

使用 Azure CLI 启用存储防火墙支持

  • 若要使用具有系统分配标识的访问连接器启用防火墙支持,请在 Cloud Shell 中运行:

    az databricks workspace update \
       --resource-group "<resource-group-name>" \
       --name "<workspace-name>" \
       --subscription "<subscription-id>" \
       --default-storage-firewall "Enabled" \
       --access-connector "{\"id\":\"/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/accessConnectors/<access-connector-name>\", \"identity-type\":\"SystemAssigned\"}"
    
  • 若要使用具有用户分配标识的访问连接器启用防火墙支持,请在 Cloud Shell 中运行:

    az databricks workspace update \
    --resource-group "<resource-group-name>" \
    --name "<workspace-name>" \
    --subscription "<subscription-id>" \
    --default-storage-firewall "Enabled" \
    --access-connector "{\"id\":\"/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/accessConnectors/<access-connector-name>\", \"identity-type\":\"UserAssigned\", \"user-assigned-identity-id\":\"/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>\"}"
    
  • 若要使用访问连接器禁用防火墙支持,请在 Cloud Shell 中运行:

    az databricks workspace update \
       --name "<workspace-name>" \
       --subscription "<subscription-id>" \
       --resource-group "<resource-group-name>" \
       --default-storage-firewall "Disabled"
    

使用 PowerShell 启用存储防火墙支持

  • 若要使用具有系统分配标识的访问连接器启用防火墙支持,请在 Cloud Shell 中运行:

    Update-AzDatabricksWorkspace `
       -Name "<workspace-name>" `
       -ResourceGroupName "<resource-group-name>" `
       -SubscriptionId "<subscription-ID>" `
       -Sku "Premium" `
       -AccessConnectorId "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/accessConnectors/<access-connector-name>" `
       -AccessConnectorIdentityType "SystemAssigned" `
       -DefaultStorageFirewall "Enabled"
    
  • 若要使用具有用户分配标识的访问连接器启用防火墙支持,请在 Cloud Shell 中运行:

    Update-AzDatabricksWorkspace `
       -Name "<workspace-name>" `
       -ResourceGroupName "<resource-group-name>" `
       -SubscriptionId "<subscription-ID>" `
       -Sku "Premium" `
       -AccessConnectorId "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/accessConnectors/<access-connector-name>" `
       -AccessConnectorIdentityType "UserAssigned" `
       -AccessConnectorUserAssignedIdentityId "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>" `
       -DefaultStorageFirewall "Enabled"
    
  • 若要使用访问连接器禁用防火墙支持,请在 Cloud Shell 中运行:

    Update-AzDatabricksWorkspace `
       -Name "<workspace-name>" `
       -ResourceGroupName "<resource-group-name>" `
       -SubscriptionId "<subscription-ID>" `
       -DefaultStorageFirewall "Disabled"