每个 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 连接到工作区存储帐户:dfs
和 blob
。
注意
如果在创建专用终结点时在托管资源组上收到拒绝分配错误,请关闭工作区中的所有计算,并按照 步骤 5:在遵循步骤 1 到 4 之前为工作区存储帐户启用防火墙 。
导航到你的工作区。
在“概要”下,单击“托管资源组”的名称。
在 “资源”下,记下工作区存储帐户的名称。 名称以
dbstorage
开头。在门户顶部的搜索框中,输入并选择 “专用终结点”。
单击 + 创建。
在“资源组名称”字段中设置资源组。
重要
该资源组不能与工作区存储帐户所在的托管资源组相同。
在“名称”字段中,为此专用终结点输入唯一的名称:
- 对于为每个源网络创建的第一个专用终结点,请创建一个 DFS 终结点。 Databricks 建议添加后缀
-dfs-pe
- 对于为每个源网络创建的第二个专用终结点,请创建一个 Blob 终结点。 Databricks 建议添加后缀
-blob-pe
“网络接口名称”字段会自动填充。
- 对于为每个源网络创建的第一个专用终结点,请创建一个 DFS 终结点。 Databricks 建议添加后缀
将“区域”字段设置为你的工作区所在的区域。
单击“ 下一步:资源”。
在 Connection 方法中,选择“ 连接到我的目录中的 Azure 资源”。
在 “订阅”中,选择包含工作区的订阅。
在 资源类型中,选择 Microsoft.Storage/storageAccounts。
在 “资源”中,选择工作区存储帐户。
在 “目标”子资源中,选择目标资源类型。
- 对于为每个源网络创建的第一个专用终结点,请将其设置为 dfs。
- 对于为每个源网络创建的第二个专用终结点,请将其设置为 blob。
单击“ 下一步:虚拟网络”。
在“虚拟网络”字段中选择一个 VNet。
在子网字段中,将子网设置为你为存储帐户的专用终结点创建的独立子网。
此字段可能会使用专用终结点的子网自动填充,但可能需要显式设置它。 不能使用用于基本 Azure Databricks 工作区功能的两个工作区子网之一(通常名为
private-subnet
和public-subnet
)。根据需要更改默认 的专用 IP 配置 和 应用程序安全组 。
单击“ 下一步:DNS”。 “DNS”选项卡中会自动填充你先前选择的正确订阅和资源组。 请根据需要更改这些设置。
单击“ 下一步:标记 ”并根据需要添加标记。
单击“ 下一步:查看 + 创建 ”。并查看字段。
单击 “创建” 。
步骤 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 客户端的每个源网络,请创建以下两个专用终结点,它们使用两个不同的“目标子资源”值:dfs
和 blob
。 有关详细步骤,请参阅步骤 1:创建存储帐户的专用终结点。 在这些步骤中,对于创建专用终结点时出现的“虚拟网络”字段,请确保为每个 Cloud Fetch 客户端指定源 VNet。
步骤 3:确认终结点的批准状态
创建存储帐户的所有专用终结点后,检查它们是否已获批准。 系统可能会自动批准,或者你可能需要在存储帐户中批准它们。
- 在 Azure 门户中导航到工作区。
- 在“概要”下,单击“托管资源组”的名称。
- 在“资源”下,单击名称以 开头的“存储帐户”类型的资源
dbstorage
。 - 在边栏中,单击“网络”。
- 单击“专用终结点连接”。
- 检查“连接状态”以确认终结点显示为“已批准”,或者选择终结点并单击“批准”。
步骤 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
。
在 Azure 门户中,搜索并选择
Deploy a custom template
。单击“在编辑器中生成自己的模板”。
复制用于工作区存储帐户的防火墙支持的 ARM 模板中所述的 ARM 模板,并将其粘贴到编辑器中。
单击“ 保存”。
查看并编辑字段。 请使用创建工作区时所用的相同参数,例如订阅、区域、工作区名称、子网名称、现有 VNet 的资源 ID。
有关字段的说明,请参阅 ARM 模板字段。
依次单击“查看 + 创建”、“创建”。
注意
工作区存储帐户上的公共网络访问设置为“从所选虚拟网络和 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"