使用 SDK 和 CLI v1 为 Azure 机器学习工作区配置专用终结点

适用于:Azure CLI ml 扩展 v1Python SDK azureml v1

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

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

警告

使用专用终结点保护工作区本身不能确保端到端安全。 必须保护解决方案的所有组件。 例如,如果为工作区使用专用终结点,但 Azure 存储帐户不在 VNet 之后,则工作区和存储之间的流量出于安全原因不会使用 VNet。

若要详细了解如何保护 Azure 机器学习所用的资源,请参阅以下文章:

先决条件

限制

  • 如果为使用专用终结点保护的工作区启用公共访问,并通过公共 Internet 使用 Azure 机器学习工作室,则设计器等某些功能可能无法访问你的数据。 如果数据存储在 VNet 保护的服务中,则会出现此问题。 例如 Azure 存储帐户。

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

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

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

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

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

    • 为工作区提供默认存储的 Azure 存储帐户
    • 工作区的 Azure 密钥保管库
    • 工作区的 Azure 容器注册表。

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

创建使用专用终结点的工作区

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

提示

如果要同时创建工作区、专用终结点和虚拟网络,请参阅使用 Azure 资源管理器模板创建 Azure 机器学习的工作区

Azure 机器学习 Python SDK 提供 PrivateEndpointConfig 类,此类可与 Workspace.create() 配合使用来创建具有专用终结点的工作区。 此类需要现有虚拟网络。

适用于:Python SDK azureml v1

from azureml.core import Workspace
from azureml.core import PrivateEndPointConfig

pe = PrivateEndPointConfig(name='myprivateendpoint', vnet_name='myvnet', vnet_subnet_name='default')
ws = Workspace.create(name='myworkspace',
    subscription_id='<my-subscription-id>',
    resource_group='myresourcegroup',
    location='chinaeast2',
    private_endpoint_config=pe,
    private_endpoint_auto_approval=True,
    show_output=True)

向工作区添加专用终结点

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

警告

如果有与此工作区关联的任何现有计算目标,并且这些目标不在创建专用终结点的同一虚拟网络的后面,这些目标将不起作用。

适用于:Python SDK azureml v1

from azureml.core import Workspace
from azureml.core import PrivateEndPointConfig

pe = PrivateEndPointConfig(name='myprivateendpoint', vnet_name='myvnet', vnet_subnet_name='default')
ws = Workspace.from_config()
ws.add_private_endpoint(private_endpoint_config=pe, private_endpoint_auto_approval=True, show_output=True)

有关此示例中使用的类和方法的详细信息,请参阅 PrivateEndpointConfigWorkspace.add_private_endpoint

删除专用终结点

可以删除工作区的一个或全部专用终结点。 删除专用终结点将从终结点与之关联的 VNet 中删除工作区。 删除专用终结点可以防止工作区访问该 VNet 中的资源,或防止 VNet 中的资源访问工作区。 例如,VNet 不允许访问公共 Internet 或从公共 Internet 进行访问。

警告

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

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

若要删除专用终结点,请使用 Workspace.delete_private_endpoint_connection。 下面的示例演示如何删除专用终结点:

适用于:Python SDK azureml v1

from azureml.core import Workspace

ws = Workspace.from_config()
# get the connection name
_, _, connection_name = ws.get_details()['privateEndpointConnections'][0]['id'].rpartition('/')
ws.delete_private_endpoint_connection(private_endpoint_connection_name=connection_name)

启用公共访问

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

重要

启用公共访问不会删除任何存在的专用终结点。 专用终结点连接到的 VNet 后面的组件之间的所有通信仍然是安全的。 除了通过任何专用终结点进行专用访问以外,还可实现仅对工作区的公共访问。

警告

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

  • 工作室的某些功能将无法访问你的数据。 如果数据存储在受 VNet 保护的服务中,则会出现此问题。 例如 Azure 存储帐户。
  • 不支持在计算实例(包括正在运行的笔记本)上使用 Jupyter、JupyterLab、RStudio 或 Posit Workbench(以前称为 RStudio Workbench)。

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

提示

可以配置两个可能的属性:

  • allow_public_access_when_behind_vnet - 由 Python SDK 和 CLI v2 使用
  • public_network_access - 由 Python SDK 和 CLI v2 使用。每个属性都可替代另一个。 例如,设置 public_network_access 将替代之前对 allow_public_access_when_behind_vnet 的任何设置。

Azure 建议使用 public_network_access 来启用或禁用对工作区的公共访问。

若要启用公共访问,请使用 Workspace.update 并设置 allow_public_access_when_behind_vnet=True

适用于:Python SDK azureml v1

from azureml.core import Workspace

ws = Workspace.from_config()
ws.update(allow_public_access_when_behind_vnet=True)

安全连接到工作区

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

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

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

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

重要

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

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

多个专用终结点

Azure 机器学习支持对一个工作区使用多个专用终结点。 如果你希望不同的环境相互保持独立,则通常会使用多个专用终结点。 下面是可以使用多个专用终结点实现的一些方案:

  • 客户端开发环境放在单独的 VNet 中。

  • Azure Kubernetes 服务 (AKS) 群集放在单独的 VNet 中。

  • 其他 Azure 服务放在单独的 VNet 中。 例如,Azure Synapse 和 Azure 数据工厂可以使用 Azure 托管的虚拟网络。 无论采用哪种方案,都可以将工作区的专用终结点添加到这些服务使用的托管 VNet。 有关将托管虚拟网络与这些服务结合使用的详细信息,请参阅以下文章:

    重要

    Azure 机器学习不支持 Synapse 的数据外泄保护

重要

每个包含工作区专用终结点的 VNet 还必须能够访问该工作区使用的 Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表。 例如,可为每个 VNet 中的服务创建一个专用终结点。

添加多个专用终结点的过程使用将专用终结点添加到工作区部分中所述的相同步骤。

方案:隔离的客户端

若要隔离开发客户端,使其无法直接访问 Azure 机器学习使用的计算资源,请使用以下步骤:

注意

这些步骤假设你具备现有的工作区、Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表。 其中的每个服务在现有 VNet 中有一个专用终结点。

  1. 为客户端创建另一个 VNet。 此 VNet 可以包含充当客户端的 Azure 虚拟机,或者可以包含由本地客户端用来连接 VNet 的 VPN 网关。
  2. 为工作区使用的 Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表添加新的专用终结点。 这些专用终结点应存在于客户端 VNet 中。
  3. 如果工作区使用其他存储,请为该存储添加新的专用终结点。 专用终结点应存在于客户端 VNet 中,并已启用专用 DNS 区域集成。
  4. 将新的专用终结点添加到工作区。 此专用终结点应存在于客户端 VNet 中,并已启用专用 DNS 区域集成。
  5. 使用在虚拟网络中使用工作室一文中的步骤,使工作室能够访问存储帐户。

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

Diagram of isolated client VNet.

方案:隔离的 Azure Kubernetes 服务

若要创建工作区使用的隔离 Azure Kubernetes 服务,请使用以下步骤:

注意

这些步骤假设你具备现有的工作区、Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表。 其中的每个服务在现有 VNet 中有一个专用终结点。

  1. 创建 Azure Kubernetes 服务实例。 在创建期间,AKS 会创建包含 AKS 群集的 VNet。
  2. 为工作区使用的 Azure 存储帐户、Azure 密钥保管库和 Azure 容器注册表添加新的专用终结点。 这些专用终结点应存在于客户端 VNet 中。
  3. 如果工作区使用其他存储,请为该存储添加新的专用终结点。 专用终结点应存在于客户端 VNet 中,并已启用专用 DNS 区域集成。
  4. 将新的专用终结点添加到工作区。 此专用终结点应存在于客户端 VNet 中,并已启用专用 DNS 区域集成。
  5. 将 AKS 群集附加到 Azure 机器学习工作区。 有关详细信息,请参阅创建并附加 Azure Kubernetes 服务群集

Diagram of isolated AKS VNet.

后续步骤