当 Azure 机器学习工作区和关联的资源在 Azure 虚拟网络中受保护时,资源之间的网络流量会发生改变。 在没有虚拟网络的情况下,网络流量将通过公共 Internet 或在 Azure 数据中心内部流动。 引入虚拟网络 (VNet) 后,你可能还想要强化网络安全性。 例如,阻止 VNet 与公共 Internet 之间的入站和出站通信。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
本文假设采用以下配置:
方案 | 所需的入站配置 | 所需的出站配置 | 其他配置 |
---|---|---|---|
[从工作室访问工作区] | NA |
| 可能需要使用自定义 DNS 服务器。 有关详细信息,请参阅 将工作区与自定义 DNS 结合使用。 |
| [从工作室使用 AutoML、设计器、数据集和数据存储] | NA | NA |
有关详细信息,请参阅如何在虚拟网络中保护工作区。 |
| [使用计算实例和计算群集]|
|
| 如果使用防火墙,请创建用户定义的路由。 有关详细信息,请参阅配置入站和出站流量。 |
| [使用 Azure Kubernetes 服务] | NA | 有关 AKS 的出站配置的信息,请参阅如何保护 Kubernetes 推理。 | |
| [使用 Azure 机器学习管理的 Docker 映像]| NA |
viennaglobal.azurecr.io
全局容器注册表| 如果工作区的 Azure 容器注册表位于 VNet 后面,请将工作区配置为使用计算群集来生成映像。 有关详细信息,请参阅如何在虚拟网络中保护工作区。 |
重要
Azure 机器学习使用多个存储帐户。 每个帐户存储不同的数据,并具有不同的用途:
你的存储:你的 Azure 订阅中的 Azure 存储帐户用于存储你的数据和项目,例如模型、训练数据、训练日志和 Python 脚本。 例如,工作区的默认存储帐户在你的订阅中。 Azure 机器学习计算实例和计算群集通过端口 445 (SMB) 和 443 (HTTPS) 访问此存储中的文件和 blob 数据 。
使用计算实例或计算群集时,存储帐户将装载为使用 SMB 协议的文件共享。 计算实例和群集使用此文件共享来存储数据、模型、Jupyter 笔记本、数据集等。访问存储帐户时,计算实例和群集使用专用终结点。
Microsoft 存储:Azure 机器学习计算实例和计算群集依赖于 Azure Batch,并且访问位于 Microsoft 订阅中的存储。 此存储仅用于管理计算实例/群集。 你的任何数据都不会存储在这里。 计算实例和计算群集使用端口 443 (HTTPS) 访问此存储中的 blob、表和队列数据 。
机器学习还会在 Azure Cosmos DB 实例中存储元数据。 默认情况下,此实例托管在 Microsoft 订阅中,由 Microsoft 管理。 可以选择在 Azure 订阅中使用 Azure Cosmos DB 实例。 有关详细信息,请参阅使用 Azure 机器学习进行数据加密。
备注
本部分中的信息专用于从 Azure 机器学习工作室使用工作区。 如果你使用 Azure 机器学习 SDK、REST API、CLI 或 Visual Studio Code,则本部分中的信息不适用。
从工作室访问工作区时,网络流量的流如下所示:
Azure 机器学习工作室的以下功能使用数据事件探查:
数据事件探查依赖于 Azure 机器学习托管服务能够访问工作区的默认 Azure 存储帐户。 该托管服务并不存在于你的 VNet 中,因此无法直接访问 VNet 中的存储帐户。 工作区使用服务主体来访问存储。
提示
可以在创建工作区时提供服务主体。 如果你不这样做,系统将为你创建一个与工作区同名的服务主体。
若要允许访问存储帐户,请将存储帐户配置为允许工作区的“资源实例”或选择“允许受信任服务列表中的 Azure 服务访问此存储帐户” 。 此设置允许托管服务通过 Azure 数据中心网络访问存储。
接下来,将工作区的服务主体添加到存储帐户专用终结点的“读取者”角色。 此角色用于验证工作区和存储子网信息。 如果它们相同,则允许访问。 最后,服务主体还需要对存储帐户拥有“Blob 数据参与者”访问权限。
有关详细信息,请参阅如何在虚拟网络中保护工作区的“Azure 存储帐户”部分。
![Diagram of traffic between client, data profiling, and storage]
Azure 机器学习计算实例和计算群集是由 Microsoft 托管的托管服务。 它们构建于 Azure Batch 服务的基础之上。 它们虽然存在于 Microsoft 托管环境中,但也会注入到你的 VNet 中。
创建计算实例或计算群集时,还会在 VNet 中创建以下资源:
具有所需出站规则的网络安全组。 这些规则允许从 Azure 机器学习(在端口 44224 上使用 TCP)和 Azure Batch 服务(在端口 29876-29877 上使用 TCP)进行入站访问。
重要
如果使用防火墙来阻止从 Internet 访问 VNet,则必须配置该防火墙以允许此流量。 例如,可以使用 Azure 防火墙创建用户定义的路由。 有关详细信息,请参阅配置入站和出站网络流量。
具有公共 IP 的负载均衡器。
还允许对以下服务标记进行出站访问。 对于每个标记,请将 region
替换为计算实例/群集的 Azure 区域:
Storage.region
- 此出站访问用于连接到 Azure Batch 服务管理的 VNet 中的 Azure 存储帐户。Keyvault.region
- 此出站访问用于连接到 Azure Batch 服务管理的 VNet 中的 Azure 密钥保管库帐户。来自计算实例或群集的数据访问将通过 VNet 存储帐户的专用终结点进行。
如果在计算实例上使用 Visual Studio Code,则必须允许其他出站流量。 有关详细信息,请参阅配置入站和出站网络流量。
托管联机终结点的入站和出站通信安全性是分开配置的。
可以在终结点上使用 public_network_access
标志来保护与联机终结点评分 URL 的入站通信。 将标志设置为 disabled
可确保联机终结点仅通过 Azure 机器学习工作区的专用终结点接收来自客户端虚拟网络的流量。
Azure 机器学习工作区的 public_network_access
标志还控制联机终结点的可见性。 如果此标志为 disabled
,则只能从包含工作区的专用终结点的虚拟网络访问评分终结点。 如果此标志为 enabled
,则可以从虚拟网络和公用网络访问评分终结点。
通过为 Azure 机器学习工作区启用托管虚拟网络隔离,可以在工作区级别保护来自部署的出站通信。 启用此设置会导致 Azure 机器学习为工作区创建托管虚拟网络。 工作区托管虚拟网络中的任何部署都可以使用虚拟网络的专用终结点进行出站通信。
用于保护出站通信的旧网络隔离方法通过禁用部署的 egress_public_network_access
标志来工作。 强烈建议改用工作区托管虚拟网络来保护部署的出站通信。 与旧方法不同,在部署中使用工作区托管虚拟网络时,部署的 egress_public_network_access
标记不再适用。 相反,出站通信将由为工作区的托管虚拟网络设置的规则控制。
有关 Azure Kubernetes 服务所需的出站配置的信息,请参阅如何保护推理的连接要求部分。
备注
Azure Kubernetes 服务负载均衡器不是 Azure 机器学习创建的负载均衡器。 若要将模型作为仅在 VNet 上可用的受保护应用程序来托管,请使用 Azure 机器学习创建的内部负载均衡器。 若要允许公共访问,请使用 Azure 机器学习创建的公共负载均衡器。
如果模型需要额外的入站或出站连接(例如连接到外部数据源),请使用网络安全组或防火墙来允许流量。
Azure 机器学习提供可用于训练模型或执行推理的 Docker 映像。 如果你不指定自己的映像,则会使用 Azure 机器学习提供的映像。 这些映像托管在 Microsoft Container Registry (MCR) 上。 它们还托管在名为 viennaglobal.azurecr.io
的异地复制的 Azure 容器注册表上。
如果你提供自己的 Docker 映像(例如,在你提供的 Azure 容器注册表上),则不需要使用 MCR 或 viennaglobal.azurecr.io
进行出站通信。
提示
如果 Azure 容器注册表在 VNet 中受保护,则 Azure 机器学习无法使用它来生成 Docker 映像。 在这种情况下,必须指定一个 Azure 机器学习计算群集来生成映像。 有关详细信息,请参阅如何在虚拟网络中保护工作区。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。