本文介绍如何使用 Azure 虚拟网络和专用终结点来保护 Azure 机器学习注册表。
Azure 上的专用终结点通过启用“通过虚拟网络 (VNet) 中的专用 IP 地址访问 Azure 服务”来提供网络隔离。 VNet 保护 Azure 资源之间的连接,并防止敏感数据泄露到公共 Internet。
将网络隔离与专用终结点配合使用可防止网络流量通过公共 Internet 传输,并将 Azure 机器学习注册表服务引入虚拟网络。 使用专用终结点时,所有网络流量都通过 Azure 专用链接传输。
先决条件
- Azure 机器学习注册表。 若要创建一个注册表,请使用如何创建和管理注册表一文中的步骤。
- 熟悉以下文章:
保护 Azure 机器学习注册表
注意
为简单起见,本文介绍工作区、关联的资源和它们作为安全工作区配置的一部分的虚拟网络。 其中介绍了如何将 Azure 机器学习注册表添加为现有配置的一部分。
下图显示了基本网络配置以及 Azure 机器学习注册表的适应方式。 如果已使用 Azure 机器学习工作区,并且具有安全工作区配置,其中所有资源都属于虚拟网络,则可以从现有虚拟网络创建专用终结点到 Azure 机器学习注册表和关联的资源(存储和 ACR)。
如果你没有安全工作区配置,可以使用在 Azure 门户中创建安全工作区一文、Bicep 模板或 Terraform 模板进行创建。
              
               
              
              
            
限制
如果使用具有网络隔离的 Azure 机器学习注册表,可以在 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 网关: 
- Azure Bastion - 在此方案中,你将在 VNet 内部创建 Azure 虚拟机(有时称作 Jump Box)。 然后使用 Azure Bastion 连接到 VM。 Bastion 允许在本地 Web 浏览器中使用 RDP 或 SSH 会话连接到 VM。 然后使用 Jump Box 作为开发环境。 由于它位于 VNet 中,因此它可以直接访问注册表。 
将工作区中的资产共享到注册表
注意
目前不支持将组件从 Azure 机器学习工作区共享到 Azure 机器学习注册表。
由于数据外泄保护,如果包含资产的存储帐户已禁用公共访问,则无法将资产从安全工作区共享到专用注册表。 若要启用从工作区到注册表的资产共享,请执行以下操作:
- 转到绑定到工作区(要将其中的资产共享到注册表)的存储帐户的“网络”部分
- 将“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用”
- 向下滚动并转到“资源实例”部分。 选择“资源类型”为“Microsoft.MachineLearningServices/registries”,并将“实例名称”设置为要从工作区共享到的 Azure 机器学习注册表资源的名称。
- 确保根据网络配置检查其余设置。
在工作区中使用注册表中的资产
示例操作:
- 提交一项使用注册表中资产的作业。
- 在管道中使用注册表中的组件。
- 在组件中使用注册表中的环境。
在与 AML 工作区的专用终结点 相同的子网 中创建注册表、存储和 ACR 的专用终结点。 如果尝试连接到多个注册表,请为每个注册表以及关联的存储和 ACR 创建专用终结点。 有关详细信息,请参阅如何创建专用终结点部分。
将模型从注册表部署到工作区
若要将模型从注册表部署到安全的托管联机终结点,部署必须设置 egress_public_network_access=disabled。 Azure 机器学习在终结点部署期间为注册表创建必要的专用终结点。 有关详细信息,请参阅创建安全的托管联机终结点。
如何创建专用终结点
使用选项卡查看将专用终结点添加到现有注册表或创建具有专用终结点的新注册表的说明:
- 在 Azure 门户中,搜索“专用终结点”,然后选择“专用终结点”条目以转到“专用链接中心”。 
- 在“专用链接中心”概述页上,选择“+ 创建”。 
- 提供请求的信息。 对于“区域”字段,请选择与 Azure 虚拟网络相同的区域。 选择“下一步”。 
- 在资源选项卡中,选择资源类型时,选择 - Microsoft.MachineLearningServices/registries。 将“资源”字段设置为 Azure 机器学习注册表名称,然后选择“下一步”。
- 在“虚拟网络”选项卡中,为 Azure 机器学习资源选择虚拟网络和子网。 选择“下一步”继续操作。 
- 在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。 
- 在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。 
- 如果要将公用网络访问设置为“已禁用”,请使用以下命令。 确认存储和 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 存储帐户创建专用终结点
若要为注册表使用的存储帐户创建专用终结点,请使用以下步骤:
- 在 Azure 门户中,搜索“专用终结点”,然后选择“专用终结点”条目以转到“专用链接中心”。
- 在“专用链接中心”概述页上,选择“+ 创建”。
- 提供请求的信息。 对于“区域”字段,请选择与 Azure 虚拟网络相同的区域。 选择“下一步”。
- 在资源选项卡中,选择资源类型时,选择Microsoft.Storage/storageAccounts。 将“资源”字段设置为存储帐户名称。 将“子资源”设置为“Blob”,然后选择“下一步”。
- 在“虚拟网络”选项卡中,为 Azure 机器学习资源选择虚拟网络和子网。 选择“下一步”继续操作。
- 在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。
- 在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。
数据外泄防护
对于用户创建的 Azure 机器学习注册表,建议对注册表、托管存储帐户和托管 ACR 使用专用终结点。
对于系统登记册,建议使用 /services/Azure/MachineLearning 别名字为存储帐户创建服务终结点策略。 有关详细信息,请参阅配置数据外泄防护。
如何查找注册表的完全限定域名
注意
确保 DNS 能够解析注册表专用 FQDN,格式如下: <registry-guid>.registry.<region>.privatelink.api.azureml.ms 因为 Azure DNS 没有以递归方式解析的公共资源特定的 FQDN。
以下示例演示如何使用发现 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 参考。
- 获取 Azure 访问令牌。 可以使用以下 Azure CLI 命令获取令牌: - az account get-access-token --query accessToken
- 使用 REST 客户端(如 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"
下一步
了解如何使用注册表跨工作区共享模型、组件和环境。