工作区托管虚拟网络隔离
适用范围:Azure CLI ml 扩展 v2(当前版本)Python SDK azure-ai-ml v2(当前版本)
Azure 机器学习为托管虚拟网络(托管 VNet)隔离提供支持。 托管 VNet 隔离通过内置的工作区级别 Azure 机器学习托管 VNet 简化并自动执行网络隔离配置。
托管虚拟网络体系结构
启用托管虚拟网络隔离时,会为工作区创建托管 VNet。 为工作区创建的托管计算资源会自动使用此托管 VNet。 托管 VNet 可以将专用终结点用于工作区使用的 Azure 资源,例如 Azure 存储、Azure Key Vault 和 Azure 容器注册表。
托管 VNet 的出站流量有两种不同的配置模式:
提示
无论使用哪种出站模式,都可以将发往 Azure 资源的流量配置为使用专用终结点。 例如,可以允许所有发往 Internet 的出站流量,但通过为资源添加出站规则来限制与 Azure 资源的通信。
出站模式 | 说明 | 方案 |
---|---|---|
允许 Internet 出站 | 允许来自托管 VNet 的所有 Internet 出站流量。 | 你希望不受限制地访问 Internet 上的机器学习资源,例如 Python 包或预先训练的模型。1 |
仅允许已批准的出站 | 通过指定服务标记允许出站流量。 | * 你希望最大程度地减少数据外泄的风险,但需要在专用环境中准备所有必需的机器学习项目。 * 你想要配置对已批准的服务、服务标记或 FQDN 列表的出站访问。 |
已禁用 | 入站和出站流量不受限制,或者你正在使用自己的 Azure 虚拟网络来保护资源。 | 你想要从工作区进行公共入站和出站连接,或者正在使用自己的 Azure VNet 处理网络隔离。 |
1:可以将出站规则与“仅允许批准的出站连接”模式配合使用,使结果与使用“允许 Internet 出站连接”相同。 不同之处在于:
- 必须为需要允许的每个出站连接添加规则。
- 添加 FQDN 出站规则会增加成本,因为此规则类型使用 Azure 防火墙。 有关详细信息,请参阅定价
- “仅允许批准的出站连接”的默认规则旨在最大程度地减少数据外泄的风险。 添加的任何出站规则都可能会增加风险。
托管 VNet 已预先配置了所需的默认规则。 它还配置为与工作区、工作区默认存储、容器注册表和密钥保管库建立专用终结点连接(如果这些组件配置为专用组件或工作区隔离模式设置为仅允许批准的出站连接)。 选择隔离模式后,只需考虑可能需要添加的其他出站要求。
下图显示了配置为允许 Internet 出站连接的托管 VNet:
下图显示了配置为仅允许批准的出站连接的托管 VNet:
注意
在此配置中,工作区使用的存储、密钥保管库和容器注册表均标记为专用。 由于它们标记为专用,因此会使用专用终结点来与它们通信。
注意
将托管 VNet 工作区配置为“允许 Internet 出站”后,该工作区将无法重新配置为“禁用”。 同样,将托管 VNet 工作区配置为“仅允许已批准的出站”后,该工作区将无法重新配置为“允许 Internet 出站”。 在工作区中选择托管 VNet 的隔离模式时,请牢记这一点。
Azure 机器学习工作室
如果要使用集成笔记本或在工作室的默认存储帐户中创建数据集,客户端需要访问默认存储帐户。 为客户端使用的 Azure 虚拟网络中的默认存储帐户创建专用终结点或服务终结点。
部分 Azure 机器学习工作室在客户端的 Web 浏览器中本地运行,并与工作区的默认存储直接通信。 在客户端的虚拟网络中(为默认存储帐户)创建专用终结点或服务终结点可确保客户端能够与存储帐户通信。
有关创建专用终结点或服务终结点的详细信息,请参阅以私密方式连接到存储帐户和服务终结点文章。
先决条件
在按照本文中的步骤操作之前,请确保满足以下先决条件:
Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 试用免费版或付费版 Azure 机器学习。
必须为 Azure 订阅注册 Microsoft.Network 资源提供程序。 为托管虚拟网络创建专用终结点时,工作区会使用此资源提供程序。
有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误。
部署托管网络时使用的 Azure 标识需要下列 Azure 基于角色的访问控制 (Azure RBAC)操作来创建专用终结点:
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
Azure CLI 和 Azure CLI 的
ml
扩展。 有关详细信息,请参阅安装、设置和使用 CLI (v2)。提示
Azure 机器学习托管 VNet 是在 2023 年 5 月 23 日推出的。 如果你的 ml 扩展版本较旧,则可能需要进行更新,以便顺利完成本文中的示例。 若要更新扩展,请使用以下 Azure CLI 命令:
az extension update -n ml
本文中的 CLI 示例假定你使用的是 Bash(或兼容的)shell。 例如,从 Linux 系统或者适用于 Linux 的 Windows 子系统。
本文中的 Azure CLI 示例使用
ws
表示工作区的名称,并使用rg
表示资源组的名称。 将命令用于 Azure 订阅时,请根据需要更改这些值。借助 Azure CLI 和托管 VNet,使用公共 IP 的 SSH 会生效,但使用专用 IP 的 SSH 不会生效。
注意
如果使用的是 UAI 工作区,请确保将“网络参与者”角色添加到你的标识。 有关详细信息,请参阅用户分配的托管标识。
配置托管虚拟网络以允许 Internet 出站
提示
托管 VNet 的创建将推迟到创建计算资源或手动启动预配后。 允许自动创建时,创建第一个计算资源可能需要大约 30 分钟,因为此过程还需要预配网络。 有关详细信息,请参阅手动预配网络。
重要
如果计划提交无服务器 Spark 作业,则必须手动启动预配。 有关详细信息,请参阅为无服务器 Spark 作业配置部分。
若要配置允许 Internet 出站通信的托管 VNet,可以使用 --managed-network allow_internet_outbound
参数或包含以下条目的 YAML 配置文件:
managed_network:
isolation_mode: allow_internet_outbound
还可以为工作区所依赖的其他 Azure 服务定义出站规则。 这些规则定义允许 Azure 资源与托管 VNet 安全通信的专用终结点。 以下规则演示如何将专用终结点添加到 Azure Blob 资源。
managed_network:
isolation_mode: allow_internet_outbound
outbound_rules:
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
可以使用 az ml workspace create
或 az ml workspace update
命令配置托管 VNet:
创建新的工作区:
以下示例将创建新工作区。
--managed-network allow_internet_outbound
参数为工作区配置托管 VNet:az ml workspace create --name ws --resource-group rg --managed-network allow_internet_outbound
若要改为使用 YAML 文件创建工作区,请使用
--file
参数并指定包含配置设置的 YAML 文件:az ml workspace create --file workspace.yaml --resource-group rg --name ws
以下 YAML 示例定义具有托管 VNet 的工作区:
name: myworkspace location: ChinaNorth3 managed_network: isolation_mode: allow_internet_outbound
更新现有工作区:
警告
在更新现有工作区以使用托管虚拟网络之前,必须删除工作区的所有计算资源。 这包括计算实例、计算群集和托管联机终结点。
以下示例更新现有工作区。
--managed-network allow_internet_outbound
参数为工作区配置托管 VNet:az ml workspace update --name ws --resource-group rg --managed-network allow_internet_outbound
若要使用 YAML 文件更新现有工作区,请使用
--file
参数并指定包含配置设置的 YAML 文件:az ml workspace update --file workspace.yaml --name ws --resource-group MyGroup
以下 YAML 示例定义工作区的托管 VNet。 它还演示了如何将专用终结点连接添加到工作区使用的资源;在本例中,即 blob 存储的专用终结点:
name: myworkspace managed_network: isolation_mode: allow_internet_outbound outbound_rules: - name: added-perule destination: service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME> spark_enabled: true subresource_target: blob type: private_endpoint
将托管虚拟网络配置为仅允许已批准的出站
提示
创建计算资源时,会自动预配托管 VNet。 允许自动创建时,创建第一个计算资源可能需要大约 30 分钟,因为此过程还需要预配网络。 如果配置了 FQDN 出站规则,则第一个 FQDN 规则会使预配时间增加 10 分钟左右。 有关详细信息,请参阅手动预配网络。
重要
如果计划提交无服务器 Spark 作业,则必须手动启动预配。 有关详细信息,请参阅为无服务器 Spark 作业配置部分。
若要配置仅允许已批准的出站通信的托管 VNet,可以使用 --managed-network allow_only_approved_outbound
参数或包含以下条目的 YAML 配置文件:
managed_network:
isolation_mode: allow_only_approved_outbound
还可以定义出站规则以定义已批准的出站通信。 可以创建 service_tag
、fqdn
和 private_endpoint
类型的出站规则。 以下规则演示了如何将专用终结点添加到 Azure Blob 资源,将服务标记添加到 Azure 数据工厂,并将 FQDN 添加到 pypi.org
:
重要
- 仅当托管 VNet 配置为
allow_only_approved_outbound
时,为服务标记或 FQDN 添加出站这一操作才有效。 - 如果添加出站规则,则 Microsoft 无法保证数据不会外泄。
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。
managed_network:
isolation_mode: allow_only_approved_outbound
outbound_rules:
- name: added-servicetagrule
destination:
port_ranges: 80, 8080
protocol: TCP
service_tag: DataFactory
type: service_tag
- name: add-fqdnrule
destination: 'pypi.org'
type: fqdn
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
可以使用 az ml workspace create
或 az ml workspace update
命令配置托管 VNet:
创建新的工作区:
以下示例使用
--managed-network allow_only_approved_outbound
参数配置托管 VNet:az ml workspace create --name ws --resource-group rg --managed-network allow_only_approved_outbound
以下 YAML 文件定义具有托管 VNet 的工作区:
name: myworkspace location: ChinaNorth3 managed_network: isolation_mode: allow_only_approved_outbound
若要使用 YAML 文件创建工作区,请使用
--file
参数:az ml workspace create --file workspace.yaml --resource-group rg --name ws
更新现有工作区
警告
在更新现有工作区以使用托管虚拟网络之前,必须删除工作区的所有计算资源。 这包括计算实例、计算群集和托管联机终结点。
以下示例使用
--managed-network allow_only_approved_outbound
参数为现有工作区配置托管 VNet:az ml workspace update --name ws --resource-group rg --managed-network allow_only_approved_outbound
以下 YAML 文件定义工作区的托管 VNet。 它还演示如何将已批准的出站添加到托管 VNet。 在此示例中,为两个服务标记都添加了出站规则:
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙的费用将添加到账单中。有关详细信息,请参阅定价。
name: myworkspace_dep managed_network: isolation_mode: allow_only_approved_outbound outbound_rules: - name: added-servicetagrule destination: port_ranges: 80, 8080 protocol: TCP service_tag: DataFactory type: service_tag - name: add-fqdnrule destination: 'pypi.org' type: fqdn - name: added-perule destination: service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME> spark_enabled: true subresource_target: blob type: private_endpoint
为无服务器 Spark 作业配置
提示
仅当计划提交无服务器 Spark 作业时,才需要执行本部分中的步骤。 如果你不打算提交无服务器 Spark 作业,则可以跳过本部分。
若要为托管 VNet 启用无服务器 Spark 作业,必须执行以下操作:
- 为工作区配置托管 VNet,并为 Azure 存储帐户添加出站专用终结点。
- 配置托管 VNet 后,对其进行预配并标记以允许 Spark 作业。
配置出站专用终结点。
使用 YAML 文件定义托管 VNet 配置,并为 Azure 存储帐户添加专用终结点。 此外,设置
spark_enabled: true
:提示
此示例适用于通过
isolation_mode: allow_internet_outbound
配置为允许 Internet 流量的托管 VNet。 如果只想允许已批准的出站流量,请使用isolation_mode: allow_only_approved_outbound
。name: myworkspace managed_network: isolation_mode: allow_internet_outbound outbound_rules: - name: added-perule destination: service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME> spark_enabled: true subresource_target: blob type: private_endpoint
可以通过指定
--file
参数和 YAML 文件的名称,将 YAML 配置文件与az ml workspace update
命令一起使用。 例如,以下命令使用名为workspace_pe.yml
的 YAML 文件更新现有工作区:az ml workspace update --file workspace_pe.yml --resource_group rg --name ws
注意
启用“仅允许已批准的出站” (
isolation_mode: allow_only_approved_outbound
) 后,Spark 会话配置中定义的 conda 包依赖项将无法安装。 若要解决此问题,请将没有外部依赖项的独立 Python 包 wheel 上传到 Azure 存储帐户,并为此存储帐户创建专用终结点。 使用 Python 包 wheel 的路径作为 Spark 作业中的py_files
参数。 设置 FQDN 出站规则不会绕过此问题,因为 Spark 不支持 FQDN 规则传播。预配托管 VNet。
注意
如果工作区已针对公共终结点(例如,使用 Azure 虚拟网络)进行了配置,并且启用了公用网络访问,则必须在预配托管 VNet 之前将其禁用。 如果在预配托管 VNet 时未禁用公用网络访问,则可能无法成功创建托管终结点的专用终结点。
以下示例演示如何使用
--include-spark
参数为无服务器 Spark 作业预配托管 VNet。az ml workspace provision-network -g my_resource_group -n my_workspace_name --include-spark
手动预配托管 VNet
创建计算资源时,会自动预配托管 VNet。 依赖于自动预配时,创建第一个计算资源可能需要大约 30 分钟,因为此过程还需要预配网络。 如果配置了 FQDN 出站规则(仅适用于“仅允许批准的连接”模式),则第一个 FQDN 规则会使预配时间大约增加 10 分钟。
若要减少用户在尝试创建第一个计算时所需的等待时间,可以在创建工作区后手动预配托管 VNet,而无需创建计算资源:
注意
如果工作区已针对公共终结点(例如,使用 Azure 虚拟网络)进行了配置,并且启用了公用网络访问,则必须在预配托管 VNet 之前将其禁用。 如果在预配托管 VNet 时未禁用公用网络访问,则可能无法成功创建托管终结点的专用终结点。
以下示例演示如何预配托管 VNet。
提示
如果你打算提交无服务器 Spark 作业,请添加 --include-spark
参数。
az ml workspace provision-network -g my_resource_group -n my_workspace_name
配置映像生成
当工作区的 Azure 容器注册表位于虚拟网络后面时,它不能用于直接生成 Docker 映像。 应该将工作区配置为使用计算群集或计算实例来生成映像。
重要
用于生成 Docker 映像的计算资源需要能够访问用于训练和部署模型的包存储库。 如果使用的网络配置为仅允许批准的出站连接,则你可能需要添加允许访问公共存储库的规则或使用专用 Python 包。
若要将工作区更新为使用计算群集或计算实例来生成 Docker 映像,请结合 --image-build-compute
参数使用 az ml workspace update
命令:
az ml workspace update --name ws --resource-group rg --image-build-compute mycompute
管理出站规则
若要列出工作区的托管 VNet 出站规则,请使用以下命令:
az ml workspace outbound-rule list --workspace-name ws --resource-group rg
若要查看托管 VNet 出站规则的详细信息,请使用以下命令:
az ml workspace outbound-rule show --rule rule-name --workspace-name ws --resource-group rg
若要从托管 VNet 中删除出站规则,请使用以下命令:
az ml workspace outbound-rule remove --rule rule-name --workspace-name ws --resource-group rg
所需规则列表
提示
这些规则会自动添加到托管 VNet。
专用终结点:
- 当托管 VNet 的隔离模式为
Allow internet outbound
时,专用终结点出站规则将自动创建为已禁用公用网络访问的工作区和相关资源(密钥保管库、存储帐户、容器注册表、Azure 机器学习工作区)的托管 VNet 中的所需规则。 - 当托管 VNet 的隔离模式为
Allow only approved outbound
时,专用终结点出站规则将自动创建为工作区和相关资源(密钥保管库、存储帐户、容器注册表、Azure 机器学习工作区)的托管 VNet 中的所需规则,无论这些资源的公用网络访问模式如何。
出站服务标记规则:
AzureActiveDirectory
AzureMachineLearning
BatchNodeManagement.region
AzureResourceManager
AzureFrontDoor
MicrosoftContainerRegistry
AzureMonitor
入站服务标记规则:
AzureMachineLearning
特定于方案的出站规则列表
场景:访问公共机器学习包
若要允许安装用于训练和部署的 Python 包,请添加出站 FQDN 规则以允许以下主机名的出站流量:
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。
注意
这不是 Internet 上所有 Python 资源所需的完整主机列表,这只是最常使用的主机列表。 例如,如果需要访问 GitHub 存储库或其他主机,则必须标识并添加该方案所需的主机。
主机名 | 用途 |
---|---|
anaconda.com *.anaconda.com |
用于安装默认包。 |
*.anaconda.org |
用于获取存储库数据。 |
pypi.org |
用于列出默认索引的依赖项(如果有),索引不会被用户设置覆盖。 如果索引被覆盖,则还必须允许 *.pythonhosted.org 。 |
pytorch.org *.pytorch.org |
由基于 PyTorch 的一些示例使用。 |
*.tensorflow.org |
由基于 Tensorflow 的一些示例使用。 |
场景:将 Visual Studio Code 桌面或 Web 与计算实例配合使用
如果计划将 Visual Studio Code 与 Azure 机器学习配合使用,请添加出站 FQDN 规则以允许流量流向以下主机:
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。
*.vscode.dev
vscode.blob.core.chinacloudapi.cn
*.gallerycdn.vsassets.io
raw.githubusercontent.com
*.vscode-unpkg.net
*.vscode-cdn.net
*.vscodeexperiments.azureedge.net
default.exp-tas.com
code.visualstudio.com
update.code.visualstudio.com
*.vo.msecnd.net
marketplace.visualstudio.com
vscode.download.prss.microsoft.com
场景:使用批处理终结点
如果计划使用 Azure 机器学习批处理终结点进行部署,请添加出站专用终结点规则,以允许流量流向默认存储帐户的以下子资源:
queue
table
场景:将提示流与 Azure Open AI、内容安全和 Azure AI 搜索配合使用
- Azure AI 服务的专用终结点
- Azure AI 搜索的专用终结点
方案:使用 HuggingFace 模型
如果计划将 HuggingFace 模型与 Azure 机器学习配合使用,请添加出站 FQDN 规则以允许流量流向以下主机:
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。
docker.io
*.docker.io
*.docker.com
production.cloudflare.docker.com
cdn.auth0.com
cdn-lfs.huggingface.co
场景:启用从所选 IP 地址访问
如果要启用从特定 IP 地址访问,请使用以下操作:
添加一个出站专用终结点规则,以允许流向 Azure 机器学习工作区的流量。 这允许在托管虚拟网络中创建的计算实例访问工作区。
提示
创建工作区期间无法添加此规则,因为工作区尚不存在。
启用公用网络对工作区的访问。 有关详细信息,请参阅启用公用网络访问。
将 IP 地址添加到 Azure 机器学习的防火墙。 有关详细信息,请参阅启用仅限从 IP 范围访问。
专用终结点
以下 Azure 服务当前支持专用终结点:
- Azure 机器学习
- Azure 机器学习注册表
- Azure 存储(所有子资源类型)
- Azure 容器注册表
- Azure Key Vault
- Azure AI 服务
- Azure AI 搜索(以前称为认知搜索)
- Azure SQL Server
- Azure 数据工厂
- Azure Cosmos DB(所有子资源类型)
- Azure 事件中心
- Azure Redis 缓存
- Azure Databricks
- Azure Database for MariaDB
- Azure Database for PostgreSQL
- Azure Database for MySQL
- Azure SQL 托管实例
创建专用终结点时,需要提供终结点连接到的资源类型和子资源。 某些资源有多个类型和子资源。 有关详细信息,请参阅什么是专用终结点。
为 Azure 机器学习依赖项资源(例如 Azure 存储、Azure 容器注册表和 Azure 密钥保管库)创建专用终结点时,该资源可以位于不同的 Azure 订阅中。 但是,资源必须与 Azure 机器学习工作区位于同一租户中。
重要
为 Azure 机器学习托管 VNet 配置专用终结点时,只有进行第一个计算时创建或强制进行托管 VNet 预配时,才会创建专用终结点。 有关强制实施托管 VNet 预配的详细信息,请参阅 为无服务器 Spark 作业配置。
定价
Azure 机器学习托管 VNet 功能是免费的。 但是,你需要为托管 VNet 使用的以下资源付费:
Azure 专用链接 - 用于保护托管 VNet 与 Azure 资源之间的通信的专用终结点依赖于 Azure 专用链接。 有关定价详细信息,请参阅 Azure 专用链接定价。
FQDN 出站规则 - FQDN 出站规则使用 Azure 防火墙实现。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 Azure 防火墙(标准 SKU)由 Azure 机器学习预配。
重要
在添加出站 FQDN 规则之前,不会创建防火墙。 有关定价的详细信息,请参阅 Azure 防火墙定价,并查看标准版的价格。
限制
- 一旦启用工作区的托管 VNet 隔离,便无法禁用它。
- 托管 VNet 使用专用终结点连接来访问专用资源。 不能同时为 Azure 资源(例如存储帐户)提供专用终结点和服务终结点。 我们建议在所有情况下都使用专用终结点。
- 删除工作区时,将删除托管 VNet。
- 数据外泄保护会自动为唯一已批准的出站模式启用。 如果将其他出站规则(例如添加到 FQDN),Microsoft 无法保证不会将数据外泄到这些出站目标。
- 使用托管 VNet 时,不支持在工作区以外的区域创建计算群集。
- Azure 机器学习托管 VNet 不支持 Kubernetes 和附加的 VM。
- 使用 FQDN 出站规则会增加托管 VNet 的成本,因为 FQDN 规则使用 Azure 防火墙。 有关详细信息,请参阅定价。
迁移计算资源
如果你有一个现有的工作区,并且想要为其启用托管 VNet,目前没有现有托管计算资源支持的迁移路径。 需要删除所有现有托管计算资源,并在启用托管 VNet 后重新创建它们。 以下列表包含必须删除和重新创建的计算资源:
- 计算群集
- 计算实例
- Kubernetes 群集
- 托管联机终结点