共用方式為

为Azure Machine Learning工作区配置专用终结点

适用于:Azure CLI ml 扩展 v2 (当前版本)

本文档介绍如何为Azure Machine Learning工作区配置专用终结点。 有关为 Azure Machine Learning 创建虚拟网络的信息,请参阅 Virtual 网络隔离和隐私概述

通过使用Azure Private Link,可以将与工作区的连接限制为Azure Virtual Network。 可以通过创建专用终结点,将工作区限制为仅接受来自虚拟网络的连接。 专用终结点是虚拟网络中的一组专用 IP 地址。 然后,你可以限制工作区访问权限,只允许通过专用 IP 地址访问你的工作区。 专用终结点有助于降低数据泄露风险。 若要详细了解专用终结点,请参阅 Azure Private Link 一文。

警告

使用专用终结点保护工作区并不能确保端到端安全性。 必须保护解决方案的所有组件。 例如,如果对工作区使用专用终结点,但Azure Storage帐户不在虚拟网络后面,则工作区和存储之间的流量不会使用虚拟网络来保护。

有关保护Azure Machine Learning使用的资源的详细信息,请参阅以下文章:

先决条件

  • 必须具有用于创建专用终结点的现有虚拟网络。

    警告

    不要对虚拟网络使用 172.17.0.0/16 IP 地址范围。 此范围是 Docker 网桥网络使用的默认子网范围,如果用于虚拟网络,则会导致错误。 其他范围也可能发生冲突,具体取决于要连接到虚拟网络的内容。 例如,如果您计划将本地网络连接到虚拟网络,并且您的本地网络也使用 172.16.0.0/16 范围。 归根结底,你需要规划网络基础结构。

  • 在添加专用终结点之前禁用专用终结点的网络策略

限制

  • 如果为受专用终结点保护的工作区启用公共访问并通过公共 Internet 使用Azure Machine Learning studio,则设计器等某些功能可能无法访问数据。 如果数据存储在虚拟网络保护的服务中,则会出现此问题。 例如,Azure Storage帐户。

  • 如果使用的是 Mozilla Firefox,则在尝试访问工作区的专用终结点时可能会遇到问题。 此问题可能与 Mozilla Firefox 中基于 HTTPS 的 DNS 有关。 使用 Microsoft Edge 或 Google Chrome。

  • 使用专用终结点不会影响Azure控制平面(管理操作),例如删除工作区或管理计算资源。 例如,创建、更新或删除计算目标。 这些操作像往常一样通过公共 Internet 执行。 数据层操作,例如使用 Azure 机器学习工作室、API(包括已发布的管道)或 SDK 进行操作,会使用专用终结点。

  • 在具有专用终结点的工作区中创建计算实例或计算群集时,计算实例和计算群集必须与工作区位于同一Azure区域中。

  • 如果在创建计算资源后为Azure Machine Learning工作区启用或禁用Private Link,则这些现有计算不会自动更新以反映新的Private Link配置。 若要确保正确连接并避免服务中断,必须在对工作区的专用链接设置进行任何更改后重新创建计算资源。

  • 将Azure Kubernetes Service群集附加到具有专用终结点的工作区时,群集必须与工作区位于同一区域。

  • 使用具有多个专用终结点的工作区时,必须有一个专用终结点与以下依赖项服务位于同一虚拟网络:

    • Azure 存储帐户为工作区提供默认存储
    • 工作区的Azure Key Vault
    • 工作区的Azure Container Registry。

    例如,一个虚拟网络 (services) 包含依赖项服务和工作区的专用终结点。 此配置使工作区能够与服务进行通信。 另一个虚拟网络 (clients) 仅包含工作区的专用终结点,仅用于客户端开发计算机与工作区之间的通信。

创建使用专用终结点的工作空间

使用以下某个方法创建具有专用终结点的工作区。 上述每种方法都需要一个现有的虚拟网络:

提示

若要同时创建工作区、专用终结点和虚拟网络,请参阅 使用 Azure Resource Manager 模板为 Azure Machine Learning 创建工作区。

适用于:Azure CLI ml 扩展 v2 (当前版本)

将 Azure CLI extension 2.0 CLI 用于机器学习时,可以使用 YAML 文档配置工作区。 以下示例演示如何使用 YAML 配置来创建新工作区:

提示

此配置中的 image_build_compute 属性指定用于构建 Docker 映像环境的 CPU 计算群集名称。 还可以指定是否应使用 public_network_access 此属性通过 Internet 访问专用链接工作区。

在此示例中,需要在生成映像之前创建 image_build_compute 所引用的计算资源。

$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-privatelink-prod
location: chinaeast2
display_name: Private Link endpoint workspace-example
description: When using private link, you must set the image_build_compute property to a cluster name to use for Docker image environment building. You can also specify whether the workspace should be accessible over the internet.
image_build_compute: cpu-compute
public_network_access: Disabled
tags:
  purpose: demonstration
az ml workspace create \
    -g <resource-group-name> \
    --file privatelink.yml

创建工作区后,请使用 Azure 网络 CLI 命令为工作区创建专用链接终结点。

az network private-endpoint create \
    --name <private-endpoint-name> \
    --vnet-name <vnet-name> \
    --subnet <subnet-name> \
    --private-connection-resource-id "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>" \
    --group-id amlworkspace \
    --connection-name workspace -l <location>

若要为工作区创建专用 DNS 区域条目,请使用以下命令:

# Add privatelink.api.ml.azure.cn
az network private-dns zone create \
    -g <resource-group-name> \
    --name privatelink.api.ml.azure.cn

az network private-dns link vnet create \
    -g <resource-group-name> \
    --zone-name privatelink.api.ml.azure.cn \
    --name <link-name> \
    --virtual-network <vnet-name> \
    --registration-enabled false

az network private-endpoint dns-zone-group create \
    -g <resource-group-name> \
    --endpoint-name <private-endpoint-name> \
    --name myzonegroup \
    --private-dns-zone privatelink.api.ml.azure.cn \
    --zone-name privatelink.api.ml.azure.cn

# Add privatelink.notebooks.chinacloudapi.cn
az network private-dns zone create \
    -g <resource-group-name> \
    --name privatelink.notebooks.chinacloudapi.cn

az network private-dns link vnet create \
    -g <resource-group-name> \
    --zone-name privatelink.notebooks.chinacloudapi.cn \
    --name <link-name> \
    --virtual-network <vnet-name> \
    --registration-enabled false

az network private-endpoint dns-zone-group add \
    -g <resource-group-name> \
    --endpoint-name <private-endpoint-name> \
    --name myzonegroup \
    --private-dns-zone privatelink.notebooks.chinacloudapi.cn \
    --zone-name privatelink.notebooks.chinacloudapi.cn

向工作区添加专用终结点

使用以下方法之一将专用终结点添加到现有工作区:

警告

如果有任何与此工作区关联的现有计算目标,并且它们不位于在其中创建专用终结点的同一虚拟网络后面,它们将停止工作。

适用于:Azure CLI ml 扩展 v2 (当前版本)

将 Azure CLI extension 2.0 CLI 用于机器学习时,请使用 Azure 网络 CLI 命令为工作区创建专用链接终结点。

az network private-endpoint create \
    --name <private-endpoint-name> \
    --vnet-name <vnet-name> \
    --subnet <subnet-name> \
    --private-connection-resource-id "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>" \
    --group-id amlworkspace \
    --connection-name workspace -l <location>

若要为工作区创建专用 DNS 区域条目,请使用以下命令:

# Add privatelink.api.ml.azure.cn
az network private-dns zone create \
    -g <resource-group-name> \
    --name 'privatelink.api.ml.azure.cn'

az network private-dns link vnet create \
    -g <resource-group-name> \
    --zone-name 'privatelink.api.ml.azure.cn' \
    --name <link-name> \
    --virtual-network <vnet-name> \
    --registration-enabled false

az network private-endpoint dns-zone-group create \
    -g <resource-group-name> \
    --endpoint-name <private-endpoint-name> \
    --name myzonegroup \
    --private-dns-zone 'privatelink.api.ml.azure.cn' \
    --zone-name 'privatelink.api.ml.azure.cn'

# Add privatelink.notebooks.chinacloudapi.cn
az network private-dns zone create \
    -g <resource-group-name> \
    --name 'privatelink.notebooks.chinacloudapi.cn'

az network private-dns link vnet create \
    -g <resource-group-name> \
    --zone-name 'privatelink.notebooks.chinacloudapi.cn' \
    --name <link-name> \
    --virtual-network <vnet-name> \
    --registration-enabled false

az network private-endpoint dns-zone-group add \
    -g <resource-group-name> \
    --endpoint-name <private-endpoint-name> \
    --name myzonegroup \
    --private-dns-zone 'privatelink.notebooks.chinacloudapi.cn' \
    --zone-name 'privatelink.notebooks.chinacloudapi.cn'

删除专用终结点

可以删除工作区的一个或全部专用终结点。 删除专用终结点时,将从终结点关联的虚拟网络中删除工作区。 删除专用终结点可能会防止工作区访问该虚拟网络中的资源,或防止虚拟网络中的资源访问工作区。 例如,如果虚拟网络不允许访问公共互联网或不允许从公共互联网进行访问。

警告

删除工作区的专用终结点不会使其可公开访问。 若要使工作区可公开访问,请使用启用公共访问部分中的步骤。

若要删除专用终结点,请使用以下信息:

适用于:Azure CLI ml 扩展 v2 (当前版本)

将 Azure CLI extension 2.0 CLI 用于机器学习时,请使用以下命令删除专用终结点:

az network private-endpoint delete \
    --name <private-endpoint-name> \
    --resource-group <resource-group-name> \

启用公共访问

在某些情况下,可能希望允许某人通过公共终结点(而不是通过虚拟网络)连接到受保护的工作区。 或者,你可能想要从虚拟网络中删除工作区,并重新启用公共访问。

重要

启用公共访问不会删除任何存在的专用终结点。 专用终结点连接到的虚拟网络后面的组件之间的所有通信仍然受到保护。 仅对工作区提供公共访问,此外还可以通过任何专用终结点进行专用访问。

警告

当工作区使用专用终结点与其他资源通信时,通过公共终结点进行连接时:

  • 工作室的某些功能无法访问数据。 当 数据存储在虚拟网络后面的服务上时,会出现此问题。 例如,Azure Storage帐户。 若要解决此问题,请将客户端设备的 IP 地址添加到 Azure Storage 帐户的防火墙
  • 不支持在计算实例(包括正在运行的笔记本)上使用 Jupyter、JupyterLab、RStudio 或 Posit Workbench(以前为 RStudio Workbench)。

若要启用公共访问,请使用以下步骤:

提示

可以配置两个属性:

  • allow_public_access_when_behind_vnet - Python SDK v1 使用(已弃用 2025 年 3 月 31 日;支持将于 2026 年 6 月 30 日结束 - 迁移到 SDK v2)
  • public_network_access - CLI 使用,Python SDK v2 每个属性将替代另一个属性。 例如,设置public_network_access将覆盖任何以前设置为allow_public_access_when_behind_vnet的设置。

用于 public_network_access 启用或禁用对工作区的公共访问。

适用于:Azure CLI ml 扩展 v2 (当前版本)

在使用 Azure CLI extension 2.0 CLI 执行机器学习任务时,请使用 az ml update 命令在工作区中启用 public_network_access

az ml workspace update \
    --set public_network_access=Enabled \
    -n <workspace-name> \
    -g <resource-group-name>

还可以通过使用 YAML 文件来启用公共网络访问。 有关详细信息,请参阅工作区 YAML 参考

仅允许来自互联网IP地址范围的公网访问

若要允许从特定公共 Internet IP 地址范围访问工作区和终结点,请创建 IP 网络规则。 每个Azure Machine Learning工作区最多支持 200 条规则。 这些规则授予对特定基于 Internet 的服务和本地网络的访问权限,并阻止常规 Internet 流量。

重要

警告

适用于:Azure CLI ml 扩展 v2 (当前版本)

az ml workspace update Azure CLI 命令与 --network-acls 参数配合使用,从 IP 地址或地址范围管理公共访问:

提示

工作区属性将所选 IP 地址的配置存储在以下项下 network_acls

properties:
  # ...
  network_acls:
    description: "The network ACLs for this workspace, enforced when public_network_access is set to Enabled."
  • 列出 IP 网络规则az ml workspace show --resource-group "myresourcegroup" --name "myWS" --query network_acls
  • 为一个或多个 IP 地址(逗号分隔)添加规则az ml workspace update --resource-group "myresourcegroup" --name "myWS" --public-network-access Enabled --network-acls "16.17.18.19,16.17.18.0/24"
  • 重置以允许所有网络az ml workspace update --resource-group "myresourcegroup" --name "myWS" --public-network-access Enabled --network-acls none

你还可以使用 Azure Machine Learning Workspace 类从 Azure Machine Learning Python SDK 定义允许入站访问的 IP 地址:

from azure.ai.ml.entities import DefaultActionType, IPRule, NetworkAcls

ws = ml_client.workspaces.get("<workspace-name>")
ws.public_network_access = "Enabled"
ws.network_acls = NetworkAcls(
    default_action=DefaultActionType.DENY,
    ip_rules=[IPRule(value="<ip-address-or-cidr>")],
)
updated_ws = ml_client.workspaces.begin_update(workspace=ws).result()

IP 网络规则的限制

以下限制适用于 IP 地址范围:

  • IP 网络规则仅支持 公共 Internet IP 地址。

    IP 规则中不允许使用保留 IP 地址范围,例如以 10、172.16 到 172.31 和 192.168 开头的专用地址。

  • 必须使用 CIDR 表示法以 16.17.18.0/24 形式提供允许的 Internet 地址范围,或使用单独的 IP 地址(如 16.17.18.19)来这样做。

  • 仅支持使用 IPv4 地址配置存储防火墙规则。

  • 启用此功能时,可以使用任何客户端工具(如 Curl)来测试公共终结点,但门户中的 Endpoint Test 工具不受支持。

  • 创建工作区后,只能设置工作区的 IP 地址。

  • 如果未在工作区上启用工作区托管虚拟网络,同时从所选 IP 工作区启用,则托管联机终结点部署会失败。 在没有端到端网络隔离的工作区中,训练计算目标(包括计算群集、计算实例和无服务器计算)无法与启用针对特定 IP 的功能一起工作。 对上述计算进行隔离网络训练则需要从计算网络到工作区的专用终结点,并且需要从选定 IP 工作区启用该功能。

安全连接到工作区

若要连接到 VNet 后面保护的工作区,请使用以下方法之一:

  • Azure VPN 网关 - 通过专用连接将本地网络连接到 VNet。 通过公共 Internet 建立连接。 可以使用两种类型的 VPN 网关:

    • 点到站点:每台客户端计算机使用 VPN 客户端连接到 VNet。
    • 站点到站点:VPN 设备将 VNet 连接到本地网络。
  • ExpressRoute - 通过专用连接将本地网络连接到云。 通过连接提供商建立连接。

  • Azure Bastion - 在此方案中,会在 VNet 中创建Azure虚拟机(有时称为跳转框)。 然后使用Azure Bastion连接到 VM。 Bastion 允许在本地 Web 浏览器中使用 RDP 或 SSH 会话连接到 VM。 然后使用 Jump Box 作为开发环境。 由于它位于 VNet 中,因此可以直接访问工作区。 有关使用 Jump Box 的示例,请参阅教程:创建安全工作区

重要

使用“VPN 网关”或“ExpressRoute”时,需要规划本地资源与 VNet 中资源之间名称解析的工作方式 。 有关详细信息,请参阅使用自定义 DNS 服务器

如果在连接到工作区时遇到问题,请参阅排查安全工作区连接问题

多个专用终结点

Azure Machine Learning支持工作区的多个专用终结点。 如果要将不同的环境分开,请使用多个专用终结点。 通过使用多个专用终结点,可以实现下列方案:

  • 客户端开发环境放在单独的虚拟网络中。

  • 单独的虚拟网络中的Azure Kubernetes Service (AKS)群集。

  • 在单独虚拟网络中的其他 Azure 服务。 例如,Azure Synapse和Azure Data Factory可以使用Microsoft托管虚拟网络。 在任何一种情况下,您都可以将工作区的专用终结点添加到这些服务所使用的托管虚拟网络中。 有关将托管虚拟网络与这些服务结合使用的详细信息,请参阅以下文章:

    重要

    Synapse 的数据外泄保护不支持Azure Machine Learning。

重要

每个包含工作区专用终结点的虚拟网络还必须能够访问工作区使用的Azure Storage帐户、Azure Key Vault和Azure Container Registry。 例如,可以为每个虚拟网络中的服务创建专用终结点。

若要添加多个专用终结点,请使用“ 将专用终结点添加到工作区 ”部分中所述的相同步骤。

场景:隔离的客户端

若要隔离开发客户端,使其无权直接访问Azure Machine Learning使用的计算资源,请使用以下步骤:

注意

这些步骤假定你拥有现有的工作区、Azure Storage帐户、Azure Key Vault和Azure Container Registry。 其中每个服务在现有虚拟网络中都有一个专用终结点。

  1. 为客户端创建另一个虚拟网络。 此虚拟网络可能包含充当客户端的Azure Virtual Machines,也可能包含本地客户端用来连接到虚拟网络的VPN Gateway。
  2. 为工作区使用的 Azure Storage 帐户、Azure Key Vault 和 Azure Container Registry 添加新的专用终结点。 这些专用终结点应存在于客户端虚拟网络中。
  3. 如果您的工作区使用了另一个存储,请为该存储添加新的专用终结点。 专用终结点应存在于客户端虚拟网络中,并已启用专用 DNS 区域集成。
  4. 将新的专用终结点添加到工作区。 此专用终结点应存在于客户端虚拟网络中,并已启用专用 DNS 区域集成。
  5. 若要启用Azure Machine Learning studio以访问存储帐户,请参阅虚拟网络中的 studio

下图演示了此配置。 工作负荷虚拟网络包含工作区为训练和部署而创建的计算资源。 “客户端”虚拟网络包含客户端或客户端 ExpressRoute/VPN 连接。 这两个 VNet 都包含工作区、Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表的专用终结点。

隔离的客户端 VNet 示意图

方案:隔离的 Azure Kubernetes 服务

如果要创建一个工作区使用的隔离的 Azure Kubernetes 服务,请按照以下步骤进行操作:

注意

这些步骤假定你拥有现有的工作区、Azure Storage帐户、Azure Key Vault和Azure Container Registry。 其中每个服务在现有虚拟网络中都有一个专用终结点。

  1. 创建Azure Kubernetes Service实例。 在创建过程中,AKS 会创建包含 AKS 群集的虚拟网络。
  2. 为工作区使用的 Azure Storage 帐户、Azure Key Vault 和 Azure Container Registry 添加新的专用终结点。 这些专用终结点应存在于客户端虚拟网络中。
  3. 如果您有其他工作区使用的存储,请为该存储添加一个新的专用终结点。 专用终结点应存在于客户端虚拟网络中,并已启用专用 DNS 区域集成。
  4. 将新的专用终结点添加到工作区。 此专用终结点应存在于客户端虚拟网络中,并已启用专用 DNS 区域集成。
  5. 将 AKS 群集附加到Azure Machine Learning工作区。 有关详细信息,请参阅 创建并附加Azure Kubernetes Service群集

隔离的 AKS VNet 示意图

方案:具有选定 IP 地址访问权限的托管联机终结点

从选定的 IP 地址启用入站访问,会受托管在线终结点上的入站设置影响。 下表显示了您的工作区和托管的在线终结点网络配置的可能配置,以及它对两者的影响。 有关详细信息,请参阅托管联机终结点的网络隔离

工作区公用网络访问 托管在线端点公网访问 工作区是否尊重所选 IP? 联机终结点是否尊重所选 IP?
已禁用 已禁用 否(拒绝所有公共流量)
已禁用 已启用 否(拒绝所有公共流量) 不支持
已从指定的 IP 启用 已禁用
已从指定的 IP 启用 已启用

注意

如果将工作区的公共网络访问配置从所选 IP 更改为禁用,托管的在线终结点仍会继续遵循这些所选 IP。 如果不希望将所选 IP 应用到联机终结点,请在Azure门户中为工作区选择 Disabled 之前删除地址。 Python SDK 和 Azure CLI 在更改之前或之后都支持此功能。

方案:具有选定 IP 地址访问权限的批处理端点

Batch 终结点不支持所选 IP 配置。 它们没有公用网络访问标志。 如果禁用Azure Machine Learning工作区并启用专用链接,批处理终结点为专用终结点。 如果将工作区的公共网络访问从禁用更改为已启用,批处理终结点将保持专用状态,不会成为公共终结点。 有关详细信息,请参阅保护批处理终结点