本文介绍如何使用 Azure 虚拟网络 和 专用终结点 来保护 Azure 机器学习注册表。
Azure 上的专用终结点通过使 Azure 服务能够在虚拟网络 (VNet) 中通过专用 IP 地址访问,实现网络隔离。 VNet 保护Azure资源之间的连接,并防止敏感数据暴露到公共 Internet。
将网络隔离与专用终结点配合使用可防止网络流量通过公共 Internet,并将Azure Machine Learning注册表服务引入虚拟网络。 使用专用终结点时,所有网络流量都通过 Azure Private Link 发生。
先决条件
- Azure Machine Learning 注册表。 若要创建一个注册表,请使用如何创建和管理注册表一文中的步骤。
- 熟悉以下文章:
保护Azure Machine Learning注册表
注意
为简单起见,本文介绍工作区、关联的资源和它们作为安全工作区配置的一部分的虚拟网络。 其中介绍了如何将Azure Machine Learning注册表添加为现有配置的一部分。
下图显示了基本的网络配置以及Azure Machine Learning注册表如何适应。 如果您已经在使用Azure Machine Learning工作区,并且配置了一个所有资源均安全地属于虚拟网络的工作区,则可以从现有的虚拟网络中创建一个专用终结点,连接到Azure Machine Learning注册表及其关联的资源(存储和 ACR)。
如果没有安全工作区配置,可以使用 在 Azure 门户中创建安全工作区文章、Bicep模板或 Terraform 模板创建安全工作区。
限制
如果使用具有网络隔离的Azure Machine Learning注册表,则可以在Azure Machine Learning studio中查看 model 资产。 你无法查看其他类型的资产。 您无法使用 Azure Machine Learning Studio 对其注册表或其下的资产执行任何操作。 请改用 Azure Machine Learning CLI 或 SDK。
方案:工作区配置是安全的,Azure Machine Learning注册表是公共的
本部分介绍具有安全工作区配置但使用公共注册表的情况和所需的网络配置。
通过本地文件在注册表中创建资产
必须将用于在注册表中创建资产的标识(例如Data Scientist的Microsoft Entra用户标识)分配给 AzureML 注册表用户、所有者或贡献者角色,在Azure基于角色的访问控制中。 有关详细信息,请参阅管理 Azure Machine Learning 访问一文。
将工作区中的资产共享到注册表
注意
目前不支持将组件从Azure Machine Learning工作区共享到Azure Machine Learning注册表。
由于数据外泄保护,如果包含资产的存储帐户禁用了公共访问,则无法将资产从安全工作区共享到公共注册表。 若要启用从工作区到注册表的资产共享,请执行以下操作:
- 转到绑定到工作区(要将其中的资产共享到注册表)的存储帐户的“网络”部分
- 将“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用”
- 向下滚动并转到“资源实例”部分。 选择 Resource 类型 为 Microsoft/MachineLearningServices/registries,并将 实例名称 设置为你希望从工作区共享到的 Azure Machine Learning 注册表资源的名称。
- 确保根据网络配置检查其余设置。
在工作区中使用注册表中的资产
示例操作:
- 提交一项使用注册表中资产的作业。
- 在管道中使用注册表中的组件。
- 在组件中使用注册表中的环境。
在安全工作区中使用注册表中的资产需要配置对注册表的出站访问。
将模型从注册表部署到工作区
若要将模型从注册表部署到安全的托管联机终结点,部署必须设置 egress_public_network_access=disabled。 Azure Machine Learning在终结点部署期间创建注册表所需的专用终结点。 有关详细信息,请参阅创建安全的托管联机终结点。
提示
保护来自托管联机终结点的出站通信的建议方法是 工作区托管虚拟网络隔离。
egress_public_network_access=disabled此处所述的标志是旧版网络隔离方法。
出站网络配置以访问任何 Azure 机器学习注册中心
| 服务标记 | 协议和端口 | 用途 |
|---|---|---|
AzureMachineLearning |
TCP:443、8787、18881 UDP:5831 |
使用Azure Machine Learning服务。 |
Storage.<region> |
TCP:443 | 访问存储在计算群集和计算实例的Azure Storage帐户中的数据。 此出站可用于外泄数据。 有关详细信息,请参阅数据外泄保护。 |
MicrosoftContainerRegistry.<region> |
TCP:443 | 访问Microsoft提供的 Docker 映像。 |
AzureContainerRegistry.<region> |
TCP:443 | 访问环境的 Docker 映像。 |
注意
这些规则是在Azure Machine Learning工作区所需的出站规则之外的附加规则。
方案:工作区配置是安全的,Azure Machine Learning目录通过专用终结点连接虚拟网络
本节介绍在拥有通过专用终结点连接到虚拟网络的Azure Machine Learning注册表的安全工作区配置时的方案和所需网络配置。
Azure Machine Learning注册表使用关联的存储/ACR 服务实例。 这些服务实例还可以使用专用终结点连接到 VNet,以保护配置。 有关详细信息,请参阅如何创建专用终结点部分。
如何了解你的注册表所用的 Azure Storage 账户和 Azure Container Registry
Azure Machine Learning注册表使用的存储帐户和 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 Machine Learning工作区中创建环境并将其共享到Azure Machine Learning注册表。
客户端需要连接到注册表通过专用终结点连接的 VNet。
安全连接到注册表
若要连接到受 VNet 保护的注册表,请使用以下方法之一:
Azure VPN 网关 - 通过专用连接将本地网络连接到 VNet。 通过公共 Internet 建立连接。 可以使用两种类型的 VPN 网关:
Azure Bastion - 在此方案中,会在 VNet 中创建Azure虚拟机(有时称为跳转框)。 然后使用Azure Bastion连接到 VM。 Bastion 允许在本地 Web 浏览器中使用 RDP 或 SSH 会话连接到 VM。 然后使用 Jump Box 作为开发环境。 由于它位于 VNet 中,因此它可以直接访问注册表。
将工作区中的资产共享到注册表
注意
目前不支持将组件从Azure Machine Learning工作区共享到Azure Machine Learning注册表。
由于数据外泄保护,如果包含资产的存储帐户已禁用公共访问,则无法将资产从安全工作区共享到专用注册表。 若要启用从工作区到注册表的资产共享,请执行以下操作:
- 转到绑定到工作区(要将其中的资产共享到注册表)的存储帐户的“网络”部分
- 将“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用”
- 向下滚动并转到“资源实例”部分。 选择 Resource 类型 为 Microsoft/MachineLearningServices/registries,并将 实例名称 设置为你希望从工作区共享到的 Azure Machine Learning 注册表资源的名称。
- 确保根据网络配置检查其余设置。
在工作区中使用注册表中的资产
示例操作:
- 提交一项使用注册表中资产的作业。
- 在管道中使用注册表中的组件。
- 在组件中使用注册表中的环境。
在 Azure Machine Learning 工作区的专用终结点所在的相同子网中创建注册表、存储和 ACR 的专用终结点。 如果尝试连接到多个注册表,请为每个注册表以及关联的存储和 ACR 创建专用终结点。 有关详细信息,请参阅如何创建专用终结点部分。
将模型从注册表部署到工作区
若要将模型从注册表部署到安全的托管联机终结点,部署必须设置 egress_public_network_access=disabled。 Azure Machine Learning在终结点部署期间创建注册表所需的专用终结点。 有关详细信息,请参阅创建安全的托管联机终结点。
提示
保护来自托管联机终结点的出站通信的建议方法是 工作区托管虚拟网络隔离。
egress_public_network_access=disabled此处所述的标志是旧版网络隔离方法。
如何创建专用终结点
使用选项卡查看将专用终结点添加到现有注册表或创建具有专用终结点的新注册表的说明:
在 Azure 门户中, 搜索 Private 终结点,然后选择 Private 终结点条目转到 Private 链接中心。
在“专用链接中心”概述页上,选择“+ 创建”。
提供请求的信息。 对于 Region 字段,请选择与Azure Virtual Network相同的区域。 选择“下一步”。
在 Resource 选项卡中,选择 resource 类型时,选择
Microsoft.MachineLearningServices/registries。 将 Resource 字段设置为Azure Machine Learning注册表名称,然后选择 Next。从 Virtual network 选项卡中,选择Azure Machine Learning资源的虚拟网络和子网。 选择“下一步”继续操作。
在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。
在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。
如果要将公用网络访问设置为“已禁用”,请使用以下命令。 确认存储和 ACR 也禁用了公用网络访问。
az ml registry update --public-network-access Disabled --name <name-of-registry>
如何了解你的注册表所用的 Azure Storage 账户和 Azure Container Registry
Azure Machine Learning注册表使用的存储帐户和 ACR 是在Azure订阅中的托管资源组下创建的。 托管资源组的名称采用 azureml-rg-<name-of-your-registry>_<GUID> 模式。 GUID 是随机生成的字符串。 例如,如果注册表的名称为“contosoreg”,则托管资源组的名称将为 azureml-rg-contosoreg_<GUID>。
在Azure门户中,可以通过搜索 azureml_rg-<name-of-your-registry> 来查找此资源组。 注册表的所有存储和 ACR 资源都在此资源组下提供。
如何为Azure Storage帐户创建专用终结点
若要为注册表使用的存储帐户创建专用终结点,请使用以下步骤:
- 在 Azure 门户中, 搜索 Private 终结点,然后选择 Private 终结点条目转到 Private 链接中心。
- 在“专用链接中心”概述页上,选择“+ 创建”。
- 提供请求的信息。 对于 Region 字段,请选择与Azure Virtual Network相同的区域。 选择“下一步”。
- 在 Resource 选项卡中,选择 resource 类型时,选择
Microsoft.Storage/storageAccounts。 将“资源”字段设置为存储帐户名称。 将“子资源”设置为“Blob”,然后选择“下一步”。 - 从 Virtual network 选项卡中,选择Azure Machine Learning资源的虚拟网络和子网。 选择“下一步”继续操作。
- 在“DNS”选项卡中,保留默认值,除非你有特定的专用 DNS 集成要求。 选择“下一步”继续操作。
- 在“查看 + 创建”选项卡中,选择“创建”以创建专用终结点。
数据外泄防护
对于创建Azure Machine Learning注册表的用户,我们建议为注册表、托管存储帐户和托管 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"
下一步
了解如何使用注册表跨工作区共享模型、组件和环境。