适用范围: Azure CLI ml 扩展 v2(最新版)
Azure CLI ml 扩展 v2(最新版) Python SDK azure-ai-ml v2(最新版)
Python SDK azure-ai-ml v2(最新版)
Azure 机器学习为托管虚拟网络(托管虚拟网络)隔离提供支持。 托管虚拟网络隔离通过内置的工作区级别 Azure 机器学习托管虚拟网络简化并自动执行网络隔离配置。 托管虚拟网络保护托管的 Azure 机器学习资源,例如计算实例、计算群集、无服务器计算和托管联机终结点。
使用托管网络保护工作区,可以为工作区和托管计算出站访问提供网络隔离。 你创建和管理的 Azure 虚拟网络用于对工作区的入站访问提供网络隔离。 例如,在 Azure 虚拟网络中创建工作区的专用终结点。 连接到虚拟网络的任何客户端都可以通过专用终结点访问工作区。 在托管计算上运行作业时,托管网络会限制计算可以访问的内容。
托管虚拟网络体系结构
启用托管虚拟网络隔离时,会为工作区创建托管虚拟网络。 为工作区创建的托管计算资源会自动使用此托管虚拟网络。 托管虚拟网络可以将专用终结点用于工作区使用的 Azure 资源,例如 Azure 存储、Azure Key Vault 和 Azure 容器注册表。
托管虚拟网络的出站流量有两种不同的配置模式:
提示
无论使用哪种出站模式,都可以将发往 Azure 资源的流量配置为使用专用终结点。 例如,可以允许发到 Internet 的所有出站流量,但通过为资源添加出站规则来限制与 Azure 资源的通信。
| 出站模式 | 说明 | 方案 | 
|---|---|---|
| 允许 Internet 出站 | 允许来自托管虚拟网络的所有 Internet 出站流量。 | 你希望不受限制地访问 Internet 上的机器学习资源,例如 Python 包或预先训练的模型。1 | 
| 仅允许已批准的出站 | 通过指定服务标记允许出站流量。 | * 你希望最大程度地减少数据外泄的风险,但需要在专用环境中准备所有必需的机器学习项目。 * 你想要配置对已批准的服务、服务标记或 FQDN 列表的出站访问。 | 
| 已禁用 | 入站和出站流量不受限制,或者你正在使用自己的 Azure 虚拟网络来保护资源。 | 你想要从工作区进行公共入站和出站连接,或者正在使用自己的 Azure 虚拟网络处理网络隔离。 | 
- 可以使用 仅允许批准的出站 模式的出站规则来实现与使用允许 Internet 出站相同的结果。 不同之处在于:
- 必须为需要允许的每个出站连接添加规则。
- 添加 FQDN 出站规则会增加成本,因为此规则类型使用 Azure 防火墙。 有关详细信息,请参阅定价
- “仅允许批准的出站连接”的默认规则旨在最大程度地减少数据外泄的风险。 添加的任何出站规则都可能会增加风险。
托管虚拟网络预先配置了所需的默认规则。 对于与工作区、工作区默认存储、容器注册表和密钥保管库建立的专用终结点连接(如果它们配置为“专用”或工作区隔离模式设置为“仅允许已批准的出站”),也会配置它。 选择隔离模式后,只需考虑可能需要添加的其他出站要求。
下图显示了配置为 允许 Internet 出站 的托管虚拟网络:
下图显示了配置为 仅允许已批准的出站 的托管虚拟网络:
注意
在此配置中,工作区使用的存储、密钥保管库和容器注册表均标记为专用。 由于它们标记为专用,因此会使用专用终结点来与它们通信。
注意
将托管 VNet 工作区配置为 允许 Internet 出站后,无法将工作区重新配置为 禁用。 同样,一旦将托管 VNet 工作区配置为 仅允许批准的出站,则无法重新配置工作区以 允许 Internet 出站。
Azure 机器学习工作室
如果要使用集成笔记本或在工作室的默认存储帐户中创建数据集,客户端需要访问默认存储帐户。 为客户端使用的 Azure 虚拟网络中的默认存储帐户创建专用终结点或服务终结点。
部分 Azure 机器学习工作室在客户端的 Web 浏览器中本地运行,并与工作区的默认存储直接通信。 在客户端的虚拟网络中(为默认存储帐户)创建专用终结点或服务终结点可确保客户端能够与存储帐户通信。
如果与工作区关联的 Azure 存储帐户已禁用公用网络访问权限,请确保为在客户端虚拟网络中创建的专用终结点授予针对工作区托管标识的“读取者”角色。 这同时适用于博客和文件存储专用终结点。 托管虚拟网络创建的专用终结点不需要该角色。
有关创建专用终结点或服务终结点的详细信息,请参阅以私密方式连接到存储帐户和服务终结点文章。
受保护的关联资源
如果使用服务终结点或专用终结点(禁用公共访问)将以下服务添加到虚拟网络,则允许受信任的 Microsoft 服务访问这些服务:
| 服务 | 终结点信息 | 允许受信任的信息 | 
|---|---|---|
| Azure Key Vault | 专用终结点 服务终结点 | 允许受信任的 Microsoft 服务绕过此防火墙 | 
| Azure 存储帐户 | 服务和专用终结点 专用终结点 | 从 Azure 资源实例授予访问权限 或 | 
| Azure 容器注册表 | 专用终结点 | 允许受信任的服务 | 
先决条件
在按照本文中的步骤操作之前,请确保满足以下先决条件:
- 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 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 试用免费版或付费版 Azure 机器学习。 
- 必须为 Azure 订阅注册 Microsoft.Network 资源提供程序。 为托管虚拟网络创建专用终结点时,工作区会使用此资源提供程序。 - 有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误。 
- 部署托管网络时使用的 Azure 标识需要下列 Azure 基于角色的访问控制 (Azure RBAC)操作来创建专用终结点: - Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
 
- Azure 机器学习 Python SDK v2。 有关 SDK 的详细信息,请参阅安装适用于 Azure 机器学习的 Python SDK v2。 - 提示 - Azure 机器学习托管 VNet 是在 2023 年 5 月 23 日推出的。 如果你安装的 SDK 版本较旧,可能需要进行更新,以便顺利完成本文中的示例。 使用以下命令更新 SDK: - pip install --upgrade azure-ai-ml azure-identity
- 本文中的示例假定代码以以下 Python 开头。 此代码导入使用托管虚拟网络创建工作区时所需的类,为 Azure 订阅和资源组设置变量,并创建 - ml_client:- from azure.ai.ml import MLClient from azure.ai.ml.entities import ( Workspace, ManagedNetwork, IsolationMode, ServiceTagDestination, PrivateEndpointDestination, FqdnDestination ) from azure.identity import DefaultAzureCredential # Replace with the values for your Azure subscription and resource group. subscription_id = "<SUBSCRIPTION_ID>" resource_group = "<RESOURCE_GROUP>" # get a handle to the subscription ml_client = MLClient(DefaultAzureCredential(), subscription_id=subscription_id, resource_group_name=resource_group)
- Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 试用免费版或付费版 Azure 机器学习。 
- 必须为 Azure 订阅注册 Microsoft.Network 资源提供程序。 为托管虚拟网络创建专用终结点时,工作区会使用此资源提供程序。 - 有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误。 
- 部署托管网络时使用的 Azure 标识需要下列 Azure 基于角色的访问控制 (Azure RBAC)操作来创建专用终结点: - Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
 
若要使用 Azure 机器学习在托管虚拟网络中建立专用终结点连接,工作区托管标识(无论是系统分配还是用户分配)以及启动创建专用终结点的用户标识必须有权批准目标资源上的专用终结点连接。 2025 年 4 月 30 日之后,不会自动向托管标识授予权限,必须手动分配权限。
Microsoft 建议将 Azure AI 企业网络连接审批人 角色分配给托管标识。 以下列表包含 Azure AI 企业网络连接审批者 角色涵盖的专用终结点目标资源类型:
- Azure 应用程序网关
- Azure Monitor
- Azure AI 搜索
- 事件中心
- Azure SQL 数据库
- Azure 存储
- Azure 机器学习工作区
- Azure 机器学习注册表
- Azure Key Vault
- Azure Cosmos DB(Azure 宇宙数据库)
- 适用于 MySQL 的 Azure 数据库
- 适用于 PostgreSQL 的 Azure 数据库
- Azure AI 服务
- 适用于 Redis 的 Azure 缓存
- 容器注册表
- API 管理
若要改为创建自定义角色,请参阅 Azure AI 企业网络连接审批者角色 ,以添加每个资源类型的特定操作。
若要为 Azure AI 企业网络连接审批者 角色未涵盖的目标资源类型创建专用终结点出站规则,建议使用自定义的精简角色。 应定义角色,包括在目标资源类型上批准专用终结点连接所需的操作。 此类资源类型的示例包括 Azure 数据工厂、Azure Databricks 和 Azure 函数应用。
若要创建专用终结点出站规则到默认工作区资源,所需的权限由创建工作区期间授予的角色分配自动涵盖,因此无需执行其他操作。
配置托管虚拟网络以允许 Internet 出站
提示
托管 VNet 的创建将推迟到创建计算资源或手动启动预配后。 允许自动创建时,创建第一个计算资源大约需要 30 分钟 ,因为它也在预配网络。 有关详细信息,请参阅手动预配网络。
重要
如果计划提交无服务器 Spark 作业,则必须手动启动预配。 有关详细信息,请参阅为无服务器 Spark 作业配置部分。
若要配置允许 Internet 出站通信的托管虚拟网络,可以使用 --managed-network allow_internet_outbound 参数或包含以下条目的 YAML 配置文件:
managed_network:
  isolation_mode: allow_internet_outbound
还可以为工作区所依赖的其他 Azure 服务定义出站规则。 这些规则定义允许 Azure 资源与托管虚拟网络进行安全通信的专用终结点。 以下规则演示如何将专用终结点添加到 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 命令配置托管虚拟网络:
以下示例将创建新工作区。 
              --managed-network allow_internet_outbound 参数为工作区配置托管虚拟网络:
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 示例定义具有托管虚拟网络的工作区:
name: myworkspace
location: EastUS
managed_network:
    isolation_mode: allow_internet_outbound
若要配置允许 Internet 出站通信的托管虚拟网络,请使用 ManagedNetwork 类定义具有 IsolationMode.ALLOW_INTERNET_OUTBOUND 的网络。 然后,可以使用 ManagedNetwork 对象创建新工作区或更新现有工作区。 若要定义工作区所依赖的 Azure 服务的出站规则,请使用  类定义服务的新专用终结点。
以下示例创建一个名为 myworkspace 的新工作区,其中包含一个名为 myrule 的出站规则,该规则为 Azure Blob 存储添加专用终结点:
# Basic managed VNet configuration
network = ManagedNetwork(IsolationMode.ALLOW_INTERNET_OUTBOUND)
# Workspace configuration
ws = Workspace(
    name="myworkspace",
    location="ChinaNorth3",
    managed_network=network
)
# Example private endpoint outbound to a blob
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
# Add the outbound 
ws.managed_network.outbound_rules = [PrivateEndpointDestination(
    name=rule_name, 
    service_resource_id=service_resource_id, 
    subresource_target=subresource_target, 
    spark_enabled=spark_enabled)]
# Create the workspace
ws = ml_client.workspaces.begin_create(ws).result()
- 登录到 Azure 门户,然后从“创建资源”菜单中选择“Azure 机器学习”。 
- 在“基本信息”选项卡中,提供必填的信息。 
- 在“网络”选项卡中,选择“Internet 出站专用”。 
- 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息: - 规则名称:规则的名称。 此工作区的名称必须是唯一的。
- 目标类型:当网络隔离是 Internet 出站专用时,专用终结点是唯一的选项。 Azure 机器学习托管虚拟网络不支持为所有 Azure 资源类型创建专用终结点。 请参阅 专用终结点 部分查看受支持资源的列表。
- 订阅:包含要为其添加专用终结点的 Azure 资源的订阅。
- 资源组:包含要为其添加专用终结点的 Azure 资源的资源组。
- 资源类型:Azure 资源的类型。
- 资源名称:Azure 资源的名称。
- 子资源:Azure 资源类型的子资源。
- Spark 已启用:如果要为工作区启用无服务器 Spark 作业,请选择此选项。 仅当资源类型为 Azure 存储时,此选项才可用。
 - 选择“保存”以保存规则。 可以继续使用“添加用户定义的出站规则”来添加规则。 
- 继续照常创建工作区。 
将托管虚拟网络配置为仅允许已批准的出站
提示
创建计算资源时,会自动预配托管 VNet。 允许自动创建时,创建第一个计算资源大约需要 30 分钟 ,因为它也在预配网络。 如果配置了 FQDN 出站规则,则第一个 FQDN 规则会使预配时间增加 10 分钟左右。 有关详细信息,请参阅手动预配网络。
重要
如果计划提交无服务器 Spark 作业,则必须手动启动预配。 有关详细信息,请参阅为无服务器 Spark 作业配置部分。
若要配置仅允许已批准的出站通信的托管虚拟网络,可以使用 --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 命令配置托管虚拟网络:
以下示例使用 --managed-network allow_only_approved_outbound 参数配置托管虚拟网络:
az ml workspace create --name ws --resource-group rg --managed-network allow_only_approved_outbound
以下 YAML 文件定义具有托管虚拟网络的工作区:
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
若要配置仅允许已批准的出站通信的托管虚拟网络,请使用 ManagedNetwork 类定义具有 IsolationMode.ALLOw_ONLY_APPROVED_OUTBOUND 的网络。 然后,可以使用 ManagedNetwork 对象创建新工作区或更新现有工作区。 若要定义 出站规则,请使用以下类:
| 目标 | 类 | 
|---|---|
| 工作区依赖的 Azure 服务 | PrivateEndpointDestination | 
| Azure 服务标记 | ServiceTagDestination | 
| 完全限定的域名 (FQDN) | FqdnDestination | 
以下示例创建一个名为 myworkspace 的新工作区,其中包含多个出站规则:
- 
              myrule- 为 Azure Blob 存储添加专用终结点。
- 
              datafactory- 添加服务标记规则以与 Azure 数据工厂通信。
重要
- 仅当托管 VNet 配置为 IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND时,为服务标记或 FQDN 添加出站这一操作才有效。
- 如果添加出站规则,则 Microsoft 无法保证数据不会外泄。
警告
FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。
# Basic managed VNet configuration
network = ManagedNetwork(IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND)
# Workspace configuration
ws = Workspace(
    name="myworkspace",
    location="ChinaNorth3",
    managed_network=network
)
# Append some rules
ws.managed_network.outbound_rules = []
# Example private endpoint outbound to a blob
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
ws.managed_network.outbound_rules.append(
    PrivateEndpointDestination(
        name=rule_name, 
        service_resource_id=service_resource_id, 
        subresource_target=subresource_target, 
        spark_enabled=spark_enabled
    )
)
# Example service tag rule
rule_name = "datafactory"
service_tag = "DataFactory"
protocol = "TCP"
port_ranges = "80, 8080-8089"
ws.managed_network.outbound_rules.append(
    ServiceTagDestination(
        name=rule_name, 
        service_tag=service_tag, 
        protocol=protocol, 
        port_ranges=port_ranges
    )
)
# Example FQDN rule
ws.managed_network.outbound_rules.append(
    FqdnDestination(
        name="fqdnrule", 
        destination="pypi.org"
    )
)
# Create the workspace
ws = ml_client.workspaces.begin_create(ws).result()
- 登录到 Azure 门户,然后从“创建资源”菜单中选择“Azure 机器学习”。 
- 在“基本信息”选项卡中,提供必填的信息。 
- 在“网络”选项卡中,选择“已批准出站专用”。 
- 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息: - 规则名称:规则的名称。 此工作区的名称必须是唯一的。
- 目标类型:专用终结点、服务标记或 FQDN。 服务标记和 FQDN 仅在网络隔离为专用且已批准的出站时可用。
 - 如果目标类型为 专用终结点,请提供以下信息: - 订阅:包含要为其添加专用终结点的 Azure 资源的订阅。
- 资源组:包含要为其添加专用终结点的 Azure 资源的资源组。
- 资源类型:Azure 资源的类型。
- 资源名称:Azure 资源的名称。
- 子资源:Azure 资源类型的子资源。
- Spark 已启用:如果要为工作区启用无服务器 Spark 作业,请选择此选项。 仅当资源类型为 Azure 存储时,此选项才可用。
 - 提示 - Azure 机器学习托管 VNet 不支持为所有 Azure 资源类型创建专用终结点。 请参阅 专用终结点 部分查看受支持资源的列表。 - 如果目标类型为 服务标记,请提供以下信息: - 服务标记:要添加到已批准出站规则的服务标记。
- 协议:允许服务标记的协议。
- 端口范围:服务标记允许的端口范围。
 - 如果目标类型为 FQDN,请提供以下信息: - 警告 - FQDN 出站规则是使用 Azure 防火墙实现的。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 有关详细信息,请参阅定价。 - FQDN 目标:要添加到已批准的出站规则的完全限定域名。
 - 选择“保存”以保存规则。 可以继续使用“添加用户定义的出站规则”来添加规则。 
- 继续照常创建工作区。 
为无服务器 Spark 作业配置
提示
仅当计划提交无服务器 Spark 作业时,才需要执行本部分中的步骤。 如果你不打算提交无服务器 Spark 作业,则可以跳过本部分。
若要为托管虚拟网络启用无服务器 Spark 作业,必须执行以下操作:
- 为工作区配置托管虚拟网络,并为 Azure 存储帐户添加出站专用终结点。
- 配置托管虚拟网络后,对其进行预配并标记以允许 Spark 作业。
- 配置出站专用终结点。 - 使用 YAML 文件定义托管虚拟网络配置,并为 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- 可以通过指定 - az ml workspace update参数和 YAML 文件的名称,将 YAML 配置文件与- --file命令一起使用。 例如,以下命令使用名为- 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 规则传播。- 以下示例演示如何为名为 - myworkspace的现有 Azure 机器学习工作区创建托管虚拟网络。 它还为 Azure 存储帐户添加专用终结点,并设置- spark_enabled=true:- 提示 - 以下示例适用于通过 - IsolationMode.ALLOW_INTERNET_OUTBOUND配置为允许 Internet 流量的托管 VNet。 如果只想允许已批准的出站流量,请使用- IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND。- # Get the existing workspace ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, "myworkspace") ws = ml_client.workspaces.get() # Basic managed VNet configuration ws.managed_network = ManagedNetwork(IsolationMode.ALLOW_INTERNET_OUTBOUND) # Example private endpoint outbound to a blob rule_name = "myrule" service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>" subresource_target = "blob" spark_enabled = True # Add the outbound ws.managed_network.outbound_rules = [PrivateEndpointDestination( name=rule_name, service_resource_id=service_resource_id, subresource_target=subresource_target, spark_enabled=spark_enabled)] # Create the workspace ml_client.workspaces.begin_update(ws)- 注意 - 启用“仅允许已批准的出站”时 (isolation_mode: allow_only_approved_outbound),Spark 会话配置中定义的 conda 包依赖项无法安装。 若要解决此问题,请将没有外部依赖项的独立 Python 包 wheel 上传到 Azure 存储帐户,并为此存储帐户创建专用终结点。 使用 Python 包 wheel 的路径作为 Spark 作业中的py_files参数。
- 如果使用 IsolationMode.ALLOW_INTERNET_OUTBOUND创建工作区,则无法在以后将其更新为使用IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND。
 - 登录到 Azure 门户,然后选择 Azure 机器学习工作区。 
- 依次选择“网络”、“添加用户定义的出站规则”。 为 Azure 存储帐户添加规则,并确保已选中“已启用 Spark”。 
- 选择“保存”以保存规则,然后在“网络”顶部选择“保存”,将更改保存到托管虚拟网络。 
 
- 启用“仅允许已批准的出站”时 (
- 预配托管虚拟网络。 - 注意 - 如果工作区已启用公共网络访问,则必须在预配托管 VNet 之前禁用它。 如果在预配托管 VNet 时未禁用公共网络访问,则可能不会在托管 VNet 中自动创建工作区的专用终结点。 否则,必须在预配后为工作区手动配置专用终结点出站规则。 - 以下示例演示如何使用 - --include-spark参数为无服务器 Spark 作业预配托管虚拟网络。- az ml workspace provision-network -g my_resource_group -n my_workspace_name --include-spark- 以下示例演示如何为无服务器 Spark 作业预配托管虚拟网络: - # Connect to a workspace named "myworkspace" ml_client = MLClient(DefaultAzureCredential(), subscription_id=subscription_id, resource_group_name=resource_group, workspace_name="myworkspace") # whether to provision Spark vnet as well include_spark = True provision_network_result = ml_client.workspaces.begin_provision_network(workspace_name=ws_name, include_spark=include_spark).result()- 在 Azure 门户中,只能在创建工作区期间选择预配托管网络。 为此,请从“出站访问”选项卡中选择“预配托管虚拟网络”。若要为现有工作区的无服务器 Spark 作业预配托管网络,必须使用 Azure CLI 或 Python SDK。 
手动预配托管 VNet
创建计算实例时,会自动预配托管虚拟网络。 依赖于自动预配时,创建第一个计算实例可能需要大约 30 分钟,因为此过程还需要预配网络。 如果配置了 FQDN 出站规则(仅适用于“仅允许批准的连接”模式),则第一个 FQDN 规则会使预配时间大约增加 10 分钟。 如果在托管网络中有大量出站规则需要预配,则完成预配可能需要较长的时间。 预配时间增加可能会导致第一个计算实例创建超时。
若要减少等待时间并避免潜在的超时错误,建议手动预配托管网络。 然后等待预配完成后再创建计算实例。
你也可以使用 provision_network_now 标志在工作区创建期间预配托管网络。
注意
要创建联机部署,必须手动预配托管网络,或先创建一个计算实例,该实例将自动预配托管网络。
以下示例演示如何在工作区创建期间预配托管虚拟网络。
az ml workspace create -n myworkspace -g my_resource_group --managed-network AllowInternetOutbound --provision-network-now
以下示例演示如何手动预配托管虚拟网络。
提示
如果你打算提交无服务器 Spark 作业,请添加 --include-spark 参数。
az ml workspace provision-network -g my_resource_group -n my_workspace_name
若要验证预配是否已完成,请使用以下命令:
az ml workspace show -n my_workspace_name -g my_resource_group --query managed_network
若要在工作区创建期间预配托管网络,请将 provision_network_now 标志设置为 True。
provision_network_now: True
以下示例演示如何预配托管虚拟网络:
# Connect to a workspace named "myworkspace"
ml_client = MLClient(DefaultAzureCredential(), subscription_id=subscription_id, resource_group_name=resource_group, workspace_name="myworkspace")
# whether to provision Spark vnet as well
include_spark = True
provision_network_result = ml_client.workspaces.begin_provision_network(workspace_name=ws_name, include_spark=include_spark).result()
若要验证工作区是否已预配,请使用 ml_client.workspaces.get() 获取工作区信息。 
              managed_network 属性包含托管网络的状态。
ws = ml_client.workspaces.get()
print(ws.managed_network.status)
在工作区创建期间,选择“在创建时主动预配托管网络”来预配托管网络。 预配了虚拟网络后,就会从网络资源(例如专用终结点)产生费用。 此配置选项仅在创建工作区期间可用。
配置映像生成
当工作区的 Azure 容器注册表位于虚拟网络后面时,它不能用于直接生成 Docker 映像。 应该将工作区配置为使用计算群集或计算实例来生成映像。
重要
用于生成 Docker 映像的计算资源需要能够访问用于训练和部署模型的包存储库。 如果使用的网络配置为仅允许批准的出站连接,则你可能需要添加允许访问公共存储库的规则或使用专用 Python 包。
若要将工作区更新为使用计算群集或计算实例来生成 Docker 映像,请结合 az ml workspace update 参数使用 --image-build-compute 命令:
az ml workspace update --name ws --resource-group rg --image-build-compute mycompute
以下示例演示如何将工作区更新为使用计算群集来生成映像:
# import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
subscription_id = "<your subscription ID>"
resource_group = "<your resource group name>"
workspace = "<your workspace name>"
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id=subscription_id, resource_group_name=resource_group, workspace_name=workspace
)
# Get workspace info
ws=ml_client.workspaces.get(name=workspace)
# Update to use cpu-cluster for image builds
ws.image_build_compute="mycompute"
ml_client.workspaces.begin_update(ws)
# To switch back to using ACR to build (if ACR is not in the virtual network):
# ws.image_build_compute = ''
# ml_client.workspaces.begin_update(ws)
无法通过 Azure 门户设置映像生成计算。 请改用 Azure CLI 或 Python SDK。
管理出站规则
若要列出工作区的托管虚拟网络出站规则,请使用以下命令:
az ml workspace outbound-rule list --workspace-name ws --resource-group rg
若要查看托管虚拟网络出站规则的详细信息,请使用以下命令:
az ml workspace outbound-rule show --rule rule-name --workspace-name ws --resource-group rg
若要从托管虚拟网络中删除出站规则,请使用以下命令:
az ml workspace outbound-rule remove --rule rule-name --workspace-name ws --resource-group rg
以下示例演示如何管理名为 myworkspace 的工作区的出站规则:
# Connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id=subscription_id, resource_group_name=resource_group, workspace_name="myworkspace")
# Specify the rule name
rule_name = "<some-rule-name>"
# Get a rule by name
rule = ml_client._workspace_outbound_rules.get(resource_group, ws_name, rule_name)
# List rules for a workspace
rule_list = ml_client._workspace_outbound_rules.list(resource_group, ws_name)
# Delete a rule from a workspace
ml_client._workspace_outbound_rules.begin_remove(resource_group, ws_name, rule_name).result()
- 登录到Azure 门户,然后选择要为其启用托管虚拟网络隔离的 Azure 机器学习工作区。 
- 选择“网络”。 可通过“工作区出站访问”部分管理出站规则。 
- 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息: 
- 若要启用或禁用规则,请使用“活动”列中的切换按钮。 
- 若要 删除 出站规则,请为该规则选择“删除”。 
所需规则列表
专用终结点:
- 当托管虚拟网络的隔离模式为 Allow internet outbound时,专用终结点出站规则将自动创建为已禁用公用网络访问的工作区和相关资源(密钥保管库、存储帐户、容器注册表、Azure 机器学习工作区)的托管虚拟网络中的所需规则。
- 当托管虚拟网络的隔离模式为 Allow only approved outbound时,专用终结点出站规则将自动创建为工作区和相关资源(密钥保管库、存储帐户、容器注册表、Azure 机器学习工作区)的托管虚拟网络中的所需规则,无论这些资源的公用网络访问模式如何。
- 这些规则会自动添加到托管虚拟网络。
为了使 Azure 机器学习正常运行,需要一组必需的服务标记,无论是托管还是自定义虚拟网络设置都需要这些标记。 对更换某些必需的服务标记没有其他选择。 下表描述了每个必需的服务标记及其在 Azure 机器学习中的用途。
| 服务标签规则 | 入站或出站 | 目的 | 
|---|---|---|
| AzureMachineLearning | 入站 | 创建、更新和删除 Azure 机器学习计算实例/群集。 | 
| AzureMachineLearning | 出站 | 使用 Azure 机器学习服务。 笔记本中的 Python Intellisense 使用端口 18881。 创建、更新和删除 Azure 机器学习计算实例时使用端口 5831。 | 
| AzureActiveDirectory | 出站 | 使用 Microsoft Entra ID 进行身份验证。 | 
| BatchNodeManagement.region | 出站 | 与 Azure Batch 后端进行通信,以支持 Azure 机器学习计算实例/群集。 | 
| AzureResourceManager | 出站 | 使用 Azure 机器学习、Azure CLI 和 Azure 机器学习 SDK 创建 Azure 资源。 | 
| AzureFrontDoor.FirstParty | 出站 | 访问由 Microsoft 提供的 Docker 镜像。 | 
| MicrosoftContainerRegistry | 出站 | 访问由 Microsoft 提供的 Docker 镜像。 为 Azure Kubernetes 服务设置 Azure 机器学习路由器。 | 
| AzureMonitor | 出站 | 用于将监视和指标数据记录到 Azure Monitor。 仅当工作区的 Azure Monitor 不受保护时才需要。 此出站也用于记录支持事件的信息。 | 
| VirtualNetwork | 出站 | 当虚拟网络或对等虚拟网络中存在专用终结点时所需。 | 
注意
仅作为安全边界的服务标记是不够的。 对于租户级隔离,请尽可能使用专用终结点。
特定于方案的出站规则列表
场景:访问公共机器学习包
若要允许安装用于训练和部署的 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 规则以允许流量流向以下主机:
注意
以下列表不是 Internet 上所有 Visual Studio Code 资源所需的主机的完整列表,只是最常用的主机。 例如,如果需要访问 GitHub 存储库或其他主机,则必须标识并添加该方案所需的主机。 有关主机名的完整列表,请参阅 Visual Studio Code 中的网络连接。
| 主机名 | 用途 | 
|---|---|
| *.vscode.dev*.vscode-unpkg.net*.vscode-cdn.net*.vscodeexperiments.azureedge.netdefault.exp-tas.com | 需要访问 vscode.dev(Web 版 Visual Studio Code) | 
| code.visualstudio.com | 是下载和安装 VS Code 桌面所必需的。 VS Code Web 不需要此主机。 | 
| update.code.visualstudio.com*.vo.msecnd.net | 用于通过设置脚本检索安装在计算实例上的 VS Code 服务器组件。 | 
| marketplace.visualstudio.comvscode.blob.core.chinacloudapi.cn*.gallerycdn.vsassets.io | 是下载并安装 VS Code 扩展所必需的。 这些主机可实现与计算实例的远程连接。 有关详细信息,请参阅在 VS Code 中管理 Azure 机器学习资源。 | 
| vscode.download.prss.microsoft.com | 用于 Visual Studio Code 的下载 CDN | 
方案:使用批处理终结点或 ParallelRunStep
如果计划使用 Azure 机器学习批处理终结点进行部署或使用 ParallelRunStep,请添加出站专用终结点规则,以允许流量流向默认存储帐户的以下子资源:
- queue
- table
场景:将提示流与 Azure OpenAI、内容安全和 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 范围访问。 - 注意 - 仅支持 IPv4 地址。 
有关详细信息,请参阅配置专用链接。
专用终结点
以下 Azure 服务当前支持专用终结点:
- Azure 机器学习
- Azure 机器学习注册表
- Azure 存储(所有子资源类型)
- Azure 容器注册表
- Azure Key Vault
- Azure AI 服务
- Azure AI 搜索(以前称为认知搜索)
- Azure SQL Server
- Azure 数据工厂
- Azure Cosmos DB(所有子资源类型)
- Azure 事件中心
- Azure Redis 缓存
- Azure Databricks
- 适用于 MariaDB 的 Azure 数据库
- Azure Database for PostgreSQL 单一服务器
- Azure Database for PostgreSQL 灵活服务器
- 适用于 MySQL 的 Azure 数据库
- Azure API 管理
创建专用终结点时,需要提供终结点连接到的资源类型和子资源。 某些资源有多个类型和子资源。 有关详细信息,请参阅什么是专用终结点。
为 Azure 机器学习依赖项资源(例如 Azure 存储、Azure 容器注册表和 Azure 密钥保管库)创建专用终结点时,该资源可以位于不同的 Azure 订阅中。 但是,资源必须与 Azure 机器学习工作区位于同一租户中。
定价
Azure 机器学习托管虚拟网络功能是免费的。 但是,需要为托管虚拟网络使用的以下资源付费:
- Azure 专用链接 - 用于保护托管虚拟网络与 Azure 资源之间的通信的专用终结点依赖于 Azure 专用链接。 有关定价详细信息,请参阅 Azure 专用链接定价。 
- FQDN 出站规则 - FQDN 出站规则使用 Azure 防火墙实现。 如果使用出站 FQDN 规则,则 Azure 防火墙费用将添加到账单中。 默认情况下会使用标准版本的 Azure 防火墙。 有关选择基本版本的信息,请参阅选择 Azure 防火墙版本。 - 重要 - 在添加出站 FQDN 规则之前,不会创建防火墙。 有关定价的详细信息,请参阅 Azure 防火墙定价,并查看标准版的价格。 
限制
- 启用工作区的托管虚拟网络隔离(允许 Internet 出站或仅允许已批准的出站)后,将无法将其禁用。
- 托管虚拟网络使用专用终结点连接来访问专用资源。 不能同时为 Azure 资源(例如存储帐户)提供专用终结点和服务终结点。 我们建议在所有情况下都使用专用终结点。
- 删除工作区时,将删除托管虚拟网络。
- 确保 Azure 机器学习资源和资源组上没有范围锁。 可能会阻止与托管虚拟网络相关的内部操作。
- 数据外泄保护会自动为唯一已批准的出站模式启用。 如果将其他出站规则(例如添加到 FQDN),Microsoft 无法保证不会将数据外泄到这些出站目标。
- 使用托管虚拟网络时,不支持在工作区以外的区域创建计算群集。
- Azure 机器学习托管虚拟网络不支持 Kubernetes 和附加的 VM。
- 使用 FQDN 出站规则会增加托管虚拟网络的成本,因为 FQDN 规则使用 Azure 防火墙。 有关详细信息,请参阅定价。
- FQDN 出站规则仅支持端口 80 和 443。
- 如果计算实例位于托管网络中,并且未配置任何公共 IP,请使用 az ml compute connect-ssh命令通过 SSH 连接到该实例。
- 使用托管虚拟网络时,无法在自定义虚拟网络内部署计算资源。 只能在托管虚拟网络内创建计算资源。
- 如果将托管网络配置为“仅允许已批准的出站”,则无法使用 FQDN 规则访问 Azure 存储帐户。 必须改用专用终结点。
- 确保将为自定义策略中的托管虚拟网络创建的 Azure 托管专用终结点加入允许列表。
迁移计算资源
如果有现有工作区,并且想要为其启用托管虚拟网络,则当前不支持现有托管计算资源的迁移路径。 需要删除所有现有托管计算资源,并在启用托管虚拟网络后重新创建它们。 以下列表包含必须删除和重新创建的计算资源:
- 计算群集
- 计算实例
- 托管联机终结点
 
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
              