工作区管理的虚拟网络隔离

适用于:Azure CLI ml 扩展 v2 (当前版本)Python SDK azure-ai-ml v2 (当前版本)

Azure 机器学习支持托管虚拟网络(托管虚拟网络)隔离。 托管虚拟网络隔离通过在工作区级别使用内置的 Azure 机器学习 托管虚拟网络来简化和自动化您的网络隔离配置。 托管虚拟网络保护托管Azure 机器学习资源,例如计算实例、计算群集、无服务器计算和托管联机终结点。

使用托管网络保护工作区,可以为工作区和托管计算设备的出站网络访问提供网络隔离。 您创建和管理的 Azure 虚拟网络 提供网络隔离的 入站访问到工作区。 例如,为 “Azure 虚拟网络” 中的工作区创建专用终结点。 连接到虚拟网络的任何客户端都可以通过专用终结点访问工作区。 在托管计算上运行作业时,托管网络会限制计算可以访问的内容。

托管虚拟网络体系结构

启用托管虚拟网络隔离时,工作区会创建托管虚拟网络。 为工作区创建的托管计算资源会自动使用此托管虚拟网络。 托管虚拟网络可以为工作区使用的 Azure 资源(如 Azure 存储、Azure 密钥保管库 和 Azure 容器注册表)使用专用终结点。

托管虚拟网络的出站流量存在两种配置模式:

提示

无论使用哪种出站模式,您都可以将流量配置到 Azure 资源,以便使用专用终结点。 例如,您可以允许所有出站流量访问internet,但通过添加出站规则来限制与Azure资源的通信。

出站模式 说明 场景
允许互联网出站 允许来自托管虚拟网络的所有 Internet 出站流量。 你希望对 Internet 上的机器学习资源(例如 Python 包或预训练的模型)进行不受限制的访问1
仅允许已批准的出站流量 指定服务标签以允许出站流量。 * 你希望最大程度地减少数据外泄的风险,但需要在专用环境中准备所有必需的机器学习项目。
* 你想要配置对已批准的服务、服务标记或 FQDN 列表的出站访问。
已禁用 入站和出站流量没有限制,或者您正在使用自己的 Azure 虚拟网络来保护资源。 需要从工作区进行公共入站和出站,或者使用自己的Azure虚拟网络处理网络隔离。
  1. 可以使用 仅允许批准的出站 模式的出站规则来实现与 使用允许 Internet 出站相同的结果。 不同之处在于:
  • 您必须为每个需要允许的出站连接添加规则。
  • 添加 FQDN 出站规则增加成本,因为此规则类型使用Azure 防火墙。 有关详细信息,请参阅定价
  • 仅允许批准的出站连接”的默认规则旨在最大程度地减少数据外泄的风险。 添加的任何出站规则都可能会增加风险。

托管虚拟网络预先配置了所需的默认规则。 它还配置用于私有终结点连接,包括工作区、工作区的默认存储、容器注册表和密钥保管库的连接<如果它们被配置为私有或工作区隔离模式设置为仅允许已批准的出站。 选择隔离模式后,只需考虑可能需要添加的其他出站要求。

下图显示了一个托管的虚拟网络,该网络被配置为允许 Internet 出站:

为 Internet 出站配置的托管虚拟网络隔离示意图。

下图显示了已配置为仅允许批准的出站连接的托管虚拟网络。

注意

在此配置中,工作区使用的存储、密钥保管库和容器注册表均标记为专用。 由于它们标记为专用,因此会使用专用终结点来与它们通信。

托管虚拟网络隔离的示意图,配置为仅允许已批准的出站。

注意

将托管 VNet 工作区配置为 允许 Internet 出站后,无法将工作区重新配置为 禁用。 同样,将托管 VNet 工作区配置为 仅允许已批准的出站后,无法将工作区重新配置为 允许 Internet 出站

Azure 机器学习工作室

若要使用集成笔记本或从工作室在默认存储帐户中创建数据集,客户端需要访问默认存储帐户。 为客户端使用的默认 Azure 虚拟网络存储帐户创建 private endpointservice endpoint

Azure 机器学习工作室的一部分在客户端的 Web 浏览器中本地运行,并与工作区的默认存储直接通信。 在客户端的虚拟网络中(为默认存储帐户)创建专用终结点或服务终结点可确保客户端能够与存储帐户通信。

如果工作区关联的 Azure 存储帐户已禁用公用网络访问权限,请确保在客户端虚拟网络中创建的专用端点被授予工作区托管标识的“读取者”角色。 此要求适用于 Blob 和文件存储专用终结点。 托管虚拟网络创建的专用终结点不需要该角色。

有关创建专用终结点或服务终结点的详细信息,请参阅以私密方式连接到存储帐户服务终结点文章。

受保护的关联资源

如果使用服务终结点或专用终结点将以下服务添加到虚拟网络(禁用公共访问),则允许受信任的Microsoft 服务访问这些服务:

服务 终结点信息 允许受信任的信息
Azure 密钥保管库 专用终结点
服务终结点
允许受信任的 Microsoft 服务绕过此防火墙
Azure 存储 帐户 服务和专用终结点
专用终结点
授予从 Azure 资源实例的访问权限

授予对受信任 Azure 服务的访问权限
Azure 容器注册表 专用终结点 允许受信任的服务

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

  • 一个 Azure 订阅。 如果没有Azure订阅,请在开始前创建试用版。 试用 免费或付费版本的 Azure 机器学习

  • Microsoft.Network 资源提供程序必须为您的 Azure 订阅注册。 创建托管虚拟网络的专用终结点时,工作区会使用此资源提供程序。

    有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误

  • 部署托管网络时使用的Azure标识需要以下Azure基于角色的访问控制(Azure RBAC)操作来创建专用终结点:

    • Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
    • Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
  • Azure CLIml Azure CLI 的扩展。 有关详细信息,请参阅安装、设置和使用 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 机器学习

  • Microsoft.Network 资源提供程序必须为您的 Azure 订阅注册。 创建托管虚拟网络的专用终结点时,工作区会使用此资源提供程序。

    有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误

  • 部署托管网络时使用的Azure标识需要以下Azure基于角色的访问控制(Azure RBAC)操作来创建专用终结点:

    • Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
    • Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
  • Azure 机器学习 Python SDK v2。 有关 SDK 的详细信息,请参阅 为 Azure 机器学习

    提示

    Azure 机器学习 托管虚拟网络于 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 机器学习

  • Microsoft.Network 资源提供程序必须为您的 Azure 订阅注册。 创建托管虚拟网络的专用终结点时,工作区会使用此资源提供程序。

    有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误

  • 部署托管网络时使用的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 密钥保管库
  • Azure Cosmos DB
  • Azure MySQL 数据库 (Azure Database for MySQL)
  • Azure 数据库适用于 PostgreSQL
  • Foundry 工具
  • Azure 托管 Redis
  • 容器注册表
  • API Management

如果您想创建自定义角色,请参阅 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

还可以将 outbound 规则定义为工作区依赖的其他Azure服务。 这些规则定义 private 终结点,使 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 createaz 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 服务定义 出站规则,请使用 PrivateEndpointDestination 类定义与该服务的新专用终结点。

以下示例创建名为 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()
  1. 登录到 Azure 门户,然后从“创建资源”菜单中选择Azure 机器学习。

  2. 在“基本信息”选项卡中,提供必填的信息。

  3. 在“网络”选项卡中,选择“Internet 出站专用”。

    创建带有 Internet 出站托管虚拟网络的工作区的屏幕截图。

  4. 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息:

    • 规则名称:规则的名称。 此工作区的名称必须是唯一的。
    • 目标类型:当网络隔离是 Internet 出站专用时,专用终结点是唯一的选项。 Azure 机器学习托管虚拟网络不支持为所有Azure资源类型创建专用终结点。 请参阅 专用终结点 部分查看受支持资源的列表。
    • Subscription:包含您想要为其添加专用终结点的 Azure 资源的订阅。
    • Resource group:包含要为其Azure资源添加私有终结点的资源组。
    • 资源类型:Azure资源的类型。
    • 资源名称:Azure资源的名称。
    • Sub Resource:Azure资源类型的子资源。
    • Spark 已启用:如果要为工作区启用无服务器 Spark 作业,请选择此选项。 仅当资源类型Azure 存储时,此选项才可用。

    为专用终结点添加出站规则的截图。

    选择“保存”以保存规则。 可以继续使用“添加用户定义的出站规则”来添加规则。

  5. 继续照常创建工作区。

将托管的虚拟网络配置为仅允许批准的出站连接

提示

创建计算资源时,托管 VNet 会自动预配。 允许自动创建时,创建第一个计算资源大约需要 30 分钟 ,因为它也在预配网络。 如果配置了 FQDN 出站规则,则第一个 FQDN 规则会使预配时间增加 10 分钟左右。 有关详细信息,请参阅手动预配网络

重要

如果计划提交无服务器 Spark 作业,则必须手动启动预配。 有关详细信息,请参阅为无服务器 Spark 任务配置章节。

若要配置仅允许已批准的出站通信的托管虚拟网络,可以使用 --managed-network allow_only_approved_outbound 参数或包含以下条目的 YAML 配置文件:

managed_network:
  isolation_mode: allow_only_approved_outbound

还可以定义出站规则以定义已批准的出站通信。 出站规则可以为 service_tagfqdnprivate_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 createaz 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()
  1. 登录到 Azure 门户,然后从“创建资源”菜单中选择Azure 机器学习。

  2. 在“基本信息”选项卡中,提供必填的信息。

  3. 在“网络”选项卡中,选择“已批准出站专用”。

    创建带有已批准的出站托管虚拟网络的工作区的屏幕截图。

  4. 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息:

    • 规则名称:规则的名称。 此工作区的名称必须是唯一的。
    • 目标类型:专用终结点、服务标记或 FQDN。 服务标记和 FQDN 仅在网络隔离为专用且已批准的出站时可用。

    如果目标类型为 专用终结点,请提供以下信息:

    • Subscription:包含您想要为其添加专用终结点的 Azure 资源的订阅。
    • Resource group:包含要为其Azure资源添加私有终结点的资源组。
    • 资源类型:Azure资源的类型。
    • 资源名称:Azure资源的名称。
    • Sub Resource:Azure资源类型的子资源。
    • Spark 已启用:如果要为工作区启用无服务器 Spark 作业,请选择此选项。 仅当资源类型Azure 存储时,此选项才可用。

    提示

    Azure 机器学习 托管的虚拟网络不支持为所有 Azure 资源类型创建专用终结点。 请参阅 专用终结点 部分查看受支持资源的列表。

    通过添加专用终结点更新已批准出站网络的截图。

    如果目标类型为 服务标记,请提供以下信息:

    • 服务标记:用于添加到已批准出站规则中的服务标记。
    • 协议:允许服务标记的协议。
    • 端口范围:服务标记允许的端口范围。

    通过添加服务标记更新已批准出站网络的截图。

    如果目标类型为 FQDN,请提供以下信息:

    警告

    FQDN 出站规则是使用 Azure 防火墙 实现的。 如果使用出站 FQDN 规则,Azure 防火墙的费用将添加到计费中。 有关详细信息,请参阅定价

    • FQDN 目标地址:要添加到已批准的出站规则中的完全限定域名。

    通过为已批准的出站托管虚拟网络添加 FQDN 规则来更新已批准的出站网络的屏幕截图。

    选择“保存”以保存规则。 可以继续使用“添加用户定义的出站规则”来添加规则。

  5. 继续照常创建工作区。

为 Spark 无服务器作业配置

提示

仅当计划提交无服务器 Spark 作业时,才需要执行本部分中的步骤。 如果你不打算提交无服务器 Spark 作业,则可以跳过本部分。

若要为托管虚拟网络启用无服务器 Spark 作业,必须执行以下操作:

  • 为工作区配置托管虚拟网络,并为Azure 存储帐户添加出站专用终结点。
  • 配置托管虚拟网络后,对其进行预配并标记以允许 Spark 作业。
  1. 配置出站专用终结点。

    使用 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包滚轮上传到Azure存储帐户,并将专用终结点创建到此存储帐户。 在 Spark 作业中使用 Python 包的 wheel 路径作为 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包滚轮上传到Azure存储帐户,并将专用终结点创建到此存储帐户。 在 Spark 作业中使用 Python 包的 wheel 文件路径作为 py_files 参数。
    • 如果工作区是使用 IsolationMode.ALLOW_INTERNET_OUTBOUND 创建的,则无法在以后更新为使用 IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND
    1. 登录到 Azure 门户,然后选择Azure 机器学习工作区。

    2. 选择网络,然后选择添加用户定义的出站规则。 为 Azure 存储 帐户添加规则,并确保选择了启用的 Spark

      开启 Spark 的终结点规则屏幕截图。

    3. 选择“保存”以保存规则,然后在“网络”顶部选择“保存”,将更改保存到托管虚拟网络。

  2. 预配托管虚拟网络。

    注意

    如果工作区已启用公共网络访问,则必须在预配托管 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门户中,只能选择在创建工作区期间预配托管网络。 为此,请从“Outbound 访问预配托管虚拟网络>。若要为现有工作区的无服务器 Spark 作业预配托管网络,必须使用 Azure CLIPython 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 CLIPython 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(workspace_name="myworkspace", outbound_rule_name=rule_name)

# List rules for a workspace
rule_list = ml_client.workspace_outbound_rules.list(workspace_name="myworkspace")

# Delete a rule from a workspace
ml_client.workspace_outbound_rules.begin_remove(workspace_name="myworkspace", outbound_rule_name=rule_name).result()
  1. 登录到 Azure 门户,然后选择要为其启用托管虚拟网络隔离的Azure 机器学习工作区。

  2. 选择“网络”。 “工作区出站访问”部分允许您管理出站规则。

    出站规则部分的屏幕截图。

  • 若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。在“工作区出站规则”边栏中,提供以下信息:

  • 若要启用禁用规则,请使用“活动”列中的切换按钮。

  • 若要 删除 出站规则,请为该规则选择“删除”。

所需规则列表

专用终结点

  • 当托管虚拟网络的隔离模式为 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 机器学习计算实例/群集与Azure Batch后端通信。
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安装版或者网页版与计算实例配合使用

如果计划将 Visual Studio Code 与 Azure 机器学习 配合使用,请添加出站 FQDN 规则以允许流量流向以下主机:

注意

以下列表不是 Internet 上所有Visual Studio Code资源所需的主机的完整列表,只是最常用的主机。 例如,如果需要访问GitHub存储库或其他主机,则必须标识并添加该方案所需的主机。 有关主机名的完整列表,请参阅 Visual Studio Code 中的 Network Connections

主机名 用途
*.vscode.dev
*.vscode-unpkg.net
*.vscode-cdn.net
*.vscodeexperiments.azureedge.net
default.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.com
vscode.blob.core.chinacloudapi.cn
*.gallerycdn.vsassets.io
是下载并安装 VS Code 扩展所必需的。 这些主机可实现与计算实例的远程连接。 有关详细信息,请参阅 VS Code 中的 Manage Azure 机器学习 资源
vscode.download.prss.microsoft.com 用于 Visual Studio Code 下载的 CDN

方案:使用批处理终结点或 ParallelRunStep

如果计划将 Azure 机器学习 批处理终结点用于部署或 ParallelRunStep,请添加出站 专用终结点 规则,以允许流量访问默认存储帐户的以下子资源:

  • queue
  • table
  • Foundry 工具的专用端点
  • 用于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 地址访问,请使用以下操作:

  1. 添加出站 专用终结点 规则,以允许流量流向 Azure 机器学习 工作区。 此规则允许在托管虚拟网络中创建的计算实例访问工作区。

    提示

    创建工作区期间无法添加此规则,因为工作区尚不存在。

  2. 启用公用网络对工作区的访问。 有关详细信息,请参阅启用公用网络访问

  3. 将你的 IP 地址添加到 Azure 机器学习 的防火墙中。 有关详细信息,请参阅仅限从 IP 范围访问的设置

    注意

    仅支持 IPv4 地址。

有关详细信息,请参阅配置专用链接

专用端点

以下Azure服务目前支持专用终结点:

  • Azure 机器学习
  • Azure 机器学习注册表
  • Azure 存储(所有子资源类型)
  • Azure 容器注册表 (Azure 容器注册表)
  • Azure 密钥保管库
  • Foundry 工具
  • Azure AI 搜索(前认知搜索)
  • Azure SQL Server
  • Azure 数据工厂
  • Azure Cosmos DB(所有子资源类型)
  • Azure 事件中心
  • Azure 托管 Redis
  • Azure Databricks
  • Azure MariaDB 数据库
  • Azure Database for PostgreSQL 单服务器
  • Azure Database for PostgreSQL 灵活服务器
  • Azure MySQL 数据库 (Azure Database for MySQL)
  • Azure API 管理

创建专用终结点时,需要提供终结点连接到的资源类型子资源。 某些资源有多个类型和子资源。 有关详细信息,请参阅什么是专用终结点

为Azure 机器学习依赖项资源(例如Azure 存储、Azure 容器注册表和Azure 密钥保管库)创建专用终结点时,该资源可以位于不同的Azure订阅中。 但是,资源必须与Azure 机器学习工作区位于同一租户中。

定价

Azure 机器学习托管虚拟网络功能是免费的。 但是,需要为托管虚拟网络使用的以下资源付费:

  • Azure 专用链接 - 用于保护托管虚拟网络与Azure资源之间的通信的专用终结点依赖于Azure 专用链接。 有关定价的详细信息,请参阅 Azure 专用链接 定价

  • FQDN 出站规则 - FQDN 出站规则是使用 Azure 防火墙 实现的。 如果使用出站 FQDN 规则,Azure 防火墙的费用将添加到计费中。 默认情况下使用标准版本的 Azure 防火墙。 有关选择基本版本的信息,请参阅选择Azure 防火墙版本

    重要

    在添加出站 FQDN 规则之前,不会创建防火墙。 有关定价的详细信息,请参阅 Azure 防火墙 定价和查看 standard 版本的价格。

限制

  • 一旦启用工作区的托管虚拟网络隔离(无论是允许互联网出站还是仅允许已批准的出站),就无法将其禁用。
  • 托管虚拟网络使用专用终结点连接来访问专用资源。 Azure资源(例如存储帐户)不能同时拥有专用终结点和服务终结点。 我们建议在所有情况下都使用专用终结点。
  • 删除工作区时,将删除托管虚拟网络。
  • 请确保Azure 机器学习资源和资源组上没有范围锁。 可能会阻止与托管虚拟网络相关的内部操作。
  • 数据外泄保护会自动为唯一已批准的出站模式启用。 如果添加其他出站规则(例如,针对 FQDN 的规则),Microsoft 无法保证您不会有数据外泄到这些出站目标。
  • 使用托管虚拟网络时,不支持在工作区以外的区域创建计算群集。
  • Azure 机器学习 托管虚拟网络不支持 Kubernetes 和关联的 VM。
  • 使用 FQDN 出站规则会增加托管虚拟网络的成本,因为 FQDN 规则使用Azure 防火墙。 有关详细信息,请参阅定价
  • FQDN 出站规则仅支持端口 80 和 443。
  • 如果计算实例位于托管网络中,并且未配置任何公共 IP,请使用 az ml compute connect-ssh 命令通过 SSH 连接到该实例。
  • 使用托管虚拟网络时,无法在自定义虚拟网络内部署计算资源。 只能在托管虚拟网络内创建计算资源。
  • 如果托管网络配置为仅允许批准的出站,则无法使用 FQDN 规则访问Azure 存储帐户。 必须改用专用终结点。
  • 确保允许列出为自定义策略中的托管虚拟网络创建的Azure托管专用终结点。

迁移计算资源

如果有现有工作区,并且想要为其启用托管虚拟网络,则当前不支持现有托管计算资源的迁移路径。 需要删除所有现有托管计算资源,并在启用托管虚拟网络后重新创建它们。 以下列表包含必须删除和重新创建的计算资源:

  • 计算群集
  • 计算实例
  • 托管联机终结点

后续步骤