使用 Azure 机器学习注册表进行网络隔离

本文介绍如何使用 Azure 虚拟网络专用终结点来保护 Azure 机器学习注册表。

Azure 上的专用终结点通过启用“通过虚拟网络 (VNet) 中的专用 IP 地址访问 Azure 服务”来提供网络隔离。 VNet 保护 Azure 资源之间的连接,并防止敏感数据泄露到公共 Internet。

将网络隔离与专用终结点配合使用可防止网络流量通过公共 Internet 传输,并将 Azure 机器学习注册表服务引入虚拟网络。 使用专用终结点时,所有网络流量都通过 Azure 专用链接传输。

先决条件

保护 Azure 机器学习注册表

注意

为简单起见,我们将工作区、其关联的资源以及它们所属的虚拟网络称为安全工作区配置。 我们将探讨如何将 Azure 机器学习注册表添加为现有配置的一部分。

下图显示了基本网络配置以及 Azure 机器学习注册表的适应方式。 如果已在使用 Azure 机器学习工作区,并且具有安全工作区配置,其中所有资源都是虚拟网络的一部分,则可以创建从现有虚拟网络到 Azure 机器学习注册表及其关联资源(存储和 ACR)的专用终结点。

如果没有安全工作区配置,可以使用在 Azure 门户中创建安全工作区使用模板创建安全工作区文章进行创建。

Diagram of registry connected to Virtual network containing workspace and associated resources using private endpoint.

限制

如果你在使用具有网络隔离的 Azure 机器学习注册表,则无法在工作室中看到资产。 你也无法使用工作室对 Azure 机器学习注册表或其下的资产执行任何操作。 请改用 Azure 机器学习 CLI 或 SDK。

场景:工作区配置安全,Azure 机器学习注册表为公共注册表

本部分介绍具有安全工作区配置但使用公共注册表的情况和所需的网络配置。

通过本地文件在注册表中创建资产

在 Azure 基于角色的访问控制中,必须为用于在注册表中创建资产的标识(例如,数据科学家的 Microsoft Entra 用户标识)分配 AzureML 注册表用户、所有者或参与者角色。 有关详细信息,请参阅管理对 Azure 机器学习的访问权限一文。

将资产从工作区共享到注册表

注意

目前不支持将组件从 Azure 机器学习工作区共享到 Azure 机器学习注册表。

由于数据外泄保护,如果包含资产的存储帐户禁用了公共访问,则无法将资产从安全工作区共享到公共注册表。 若要启用从工作区到注册表的资产共享,请执行以下操作:

  • 转到附加到工作区的存储帐户上的“网络”边栏选项卡(从中可以允许将资产共享到注册表)
  • 将“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用
  • 向下滚动并转到“资源实例”部分。 选择“资源类型”为“Microsoft.MachineLearningServices/registries”,并将“实例名称”设置为要从工作区共享到的 Azure 机器学习注册表资源的名称。
  • 确保根据网络配置检查其余设置。

在工作区中使用注册表中的资产

示例操作:

  • 提交使用注册表中的资产的作业。
  • 在管道中使用注册表中的组件。
  • 在组件中使用注册表中的环境。

将注册表中的资产用于安全工作区需要配置对注册表的出站访问。

将模型从注册表部署到工作区

若要将模型从注册表部署到安全的托管联机终结点,部署必须设置 egress_public_network_access=disabled。 Azure 机器学习在终结点部署期间为注册表创建必要的专用终结点。 有关详细信息,请参阅创建安全的托管联机终结点

用于访问任何 Azure 机器学习注册表的出站网络配置

服务标记 协议和端口 用途
AzureMachineLearning TCP:443、877、18881
UDP:5831
使用 Azure 机器学习服务。
Storage.<region> TCP:443 访问存储在 Azure 存储帐户中、用于计算群集和计算实例的数据。 此出站可用于外泄数据。 有关详细信息,请参阅数据外泄保护
MicrosoftContainerRegistry.<region> TCP:443 访问由 Microsoft 提供的 docker 映像。
AzureContainerRegistry.<region> TCP:443 访问环境的 Docker 映像。

场景:工作区配置安全,Azure 机器学习注册表使用专用终结点连接到虚拟网络

本部分介绍具有安全工作区配置且 Azure 机器学习注册表使用专用终结点连接到虚拟网络的情况和所需的网络配置。

Azure 机器学习注册表具有关联的存储/ACR 服务实例。 这些服务实例还可以使用专用终结点连接到 VNet,以保护配置。 有关详细信息,请参阅如何创建专用终结点部分。

如何查找注册表使用的 Azure 存储帐户和Azure 容器注册表

Azure 机器学习注册表使用的存储帐户和 ACR 是在 Azure 订阅的托管资源组下创建的。 托管资源组的名称采用 azureml-rg-<name-of-your-registry>_<GUID> 模式。 GUID 是随机生成的字符串。 例如,如果注册表的名称为“contosoreg”,则托管资源组的名称将为 azureml-rg-contosoreg_<GUID>

在 Azure 门户中,可以通过搜索 azureml_rg-<name-of-your-registry> 来查找此资源组。 注册表的所有存储和 ACR 资源都在此资源组下提供。

通过本地文件在注册表中创建资产

注意

在关联的 ACR 已禁用公共访问的专用注册表中不支持创建环境资产。 可以使用这种解决方法,即在 Azure 机器学习工作区中创建环境并将其共享到 Azure 机器学习注册表。

客户端需要连接到注册表与专用终结点连接的 VNet。

安全连接到注册表

若要连接到受 VNet 保护的注册表,请使用以下方法之一:

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

    • 点到站点:每台客户端计算机使用 VPN 客户端连接到 VNet。

    • 站点到站点:VPN 设备将 VNet 连接到本地网络。

  • Azure Bastion - 在此方案中,你将在 VNet 内部创建 Azure 虚拟机(有时称作 Jump Box)。 然后使用 Azure Bastion 连接到 VM。 Bastion 允许在本地 Web 浏览器中使用 RDP 或 SSH 会话连接到 VM。 然后使用 Jump Box 作为开发环境。 由于它位于 VNet 中,因此它可以直接访问注册表。

将资产从工作区共享到注册表

注意

目前不支持将组件从 Azure 机器学习工作区共享到 Azure 机器学习注册表。

由于数据外泄保护,如果包含资产的存储帐户已禁用公共访问,则无法将资产从安全工作区共享到专用注册表。 若要启用从工作区到注册表的资产共享,请执行以下操作:

  • 转到附加到工作区的存储帐户上的“网络”边栏选项卡(从中可以允许将资产共享到注册表)
  • 将“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用
  • 向下滚动并转到“资源实例”部分。 选择“资源类型”为“Microsoft.MachineLearningServices/registries”,并将“实例名称”设置为要从工作区共享到的 Azure 机器学习注册表资源的名称。
  • 确保根据网络配置检查其余设置。

在工作区中使用注册表中的资产

示例操作:

  • 提交使用注册表中的资产的作业。
  • 在管道中使用注册表中的组件。
  • 在组件中使用注册表中的环境。

从工作区的 VNet 创建注册表、存储和 ACR 的专用终结点。 如果尝试连接到多个注册表,请为每个注册表以及关联的存储和 ACR 创建专用终结点。 有关详细信息,请参阅如何创建专用终结点部分。

将模型从注册表部署到工作区

若要将模型从注册表部署到安全的托管联机终结点,部署必须设置 egress_public_network_access=disabled。 Azure 机器学习在终结点部署期间为注册表创建必要的专用终结点。 有关详细信息,请参阅创建安全的托管联机终结点

如何创建专用终结点

使用选项卡查看将专用终结点添加到现有注册表或创建具有专用终结点的新注册表的说明:

  1. Azure 门户中,搜索“专用终结点”,然后选择“专用终结点”条目以转到“专用链接中心”。

  2. 在“专用链接中心”概述页上,选择“+ 创建”。

  3. 提供请求的信息。 对于“区域”字段,请选择与 Azure 虚拟网络相同的区域。 选择“下一步”。

  4. 在“资源”选项卡中,选择“资源类型”时,选择 Microsoft.MachineLearningServices/registries。 将“资源”字段设置为 Azure 机器学习注册表名称,然后选择“下一步”。

  5. 在“虚拟网络”选项卡中,为 Azure 机器学习资源选择虚拟网络和子网。 选择“下一步”继续操作。

  6. 在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。

  7. 在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。

  8. 如果要将公用网络访问设置为“已禁用”,请使用以下命令。 确认存储,并确认 ACR 也禁用了公用网络访问。

    az ml registry update --set publicNetworkAccess=Disabled --name <name-of-registry>
    

如何查找注册表使用的 Azure 存储帐户和Azure 容器注册表

Azure 机器学习注册表使用的存储帐户和 ACR 是在 Azure 订阅的托管资源组下创建的。 托管资源组的名称采用 azureml-rg-<name-of-your-registry>_<GUID> 模式。 GUID 是随机生成的字符串。 例如,如果注册表的名称为“contosoreg”,则托管资源组的名称将为 azureml-rg-contosoreg_<GUID>

在 Azure 门户中,可以通过搜索 azureml_rg-<name-of-your-registry> 来查找此资源组。 注册表的所有存储和 ACR 资源都在此资源组下提供。

如何为 Azure 存储帐户创建专用终结点

若要为注册表使用的存储帐户创建专用终结点,请使用以下步骤:

  1. Azure 门户中,搜索“专用终结点”,然后选择“专用终结点”条目以转到“专用链接中心”。
  2. 在“专用链接中心”概述页上,选择“+ 创建”。
  3. 提供请求的信息。 对于“区域”字段,请选择与 Azure 虚拟网络相同的区域。 选择“下一步”。
  4. 在“资源”选项卡中,选择“资源类型”时,选择 Microsoft.Storage/storageAccounts。 将“资源”字段设置为存储帐户名称。 将“子资源”设置为“Blob”,然后选择“下一步”。
  5. 在“虚拟网络”选项卡中,为 Azure 机器学习资源选择虚拟网络和子网。 选择“下一步”继续操作。
  6. 在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。
  7. 在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。

数据外泄防护

对于用户创建的 Azure 机器学习注册表,建议对注册表、托管存储帐户和托管 ACR 使用专用终结点。

对于系统注册表,建议使用 /services/Azure/MachineLearning 别名为存储帐户创建服务终结点策略。 有关详细信息,请参阅配置数据外泄防护

如何查找注册表的完全限定域名

以下示例演示如何使用发现 URL 获取注册表的完全限定域名 (FQDN)。 调用发现 URL 时,必须在请求标头中提供 Azure 访问令牌。 以下示例演示如何获取访问令牌并调用发现 URL:

提示

发现 URL 的格式为 https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery,其中 <region> 是注册表所在的区域,<registry_name> 是注册表的名称。 若要调用 URL,请发出 GET 请求:

   GET https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery 
$region = "<region>"
$registryName = "<registry_name>"
$accessToken = (az account get-access-token | ConvertFrom-Json).accessToken 
(Invoke-RestMethod -Method Get `
                   -Uri "https://$region.api.azureml.ms/registrymanagement/v1.0/registries/$registryName/discovery" `
                   -Headers @{ Authorization="Bearer $accessToken" }).registryFqdns
  • REST API

注意

有关使用 Azure REST API 的详细信息,请参阅 Azure REST API 参考

  1. 获取 Azure 访问令牌。 可以使用以下 Azure CLI 命令获取令牌:

    az account get-access-token --query accessToken
    
  2. 使用 REST 客户端(如 Postman 或 Curl)向发现 URL 发出 GET 请求。 使用在上一步中检索到的访问令牌进行授权。 在以下示例中,将 <region> 替换为注册表所在的区域,将 <registry_name> 替换为注册表名称。 将 <token> 替换为在上一步中检索到的访问令牌:

    curl -X GET "https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery" -H "Authorization: Bearer <token>" -H "Content-Type: application/json"
    

后续步骤

了解如何使用注册表跨工作区共享模型、组件和环境