使用受保护工作区时的网络流量流
当你将 Azure 机器学习工作区和关联的资源放在 Azure 虚拟网络中时,它会改变资源之间的网络流量。 在没有虚拟网络的情况下,网络流量将通过公共 Internet 或在 Azure 数据中心内部流动。 引入虚拟网络后,可能还需要强化网络安全。 例如,你可能需要阻止虚拟网络和公共 Internet 之间的入站和出站通信。 但是,Azure 机器学习需要在公共 Internet 上访问某些资源。 例如,它使用 Azure 资源管理器进行部署和管理操作。
本文列出了需要传入和传出公共 Internet 的流量。 其中还解释了在以下方案中,网络流量如何在客户端开发环境和受保护的 Azure 机器学习工作区之间流动:
通过 Azure 机器学习工作室来使用:
- 工作区
- 自动化 ML
- Designer
- 数据集和数据存储
Azure 机器学习工作室是基于 Web 的 UI,在 Web 浏览器中部分运行。 它调用 Azure 服务来执行任务,例如训练模型、使用设计器或查看数据集。 其中一些调用使用与 Azure 机器学习 SDK、Azure CLI、REST API 或 Visual Studio Code 不同的通信流。
使用 Azure 机器学习工作室、Azure 机器学习 SDK、Azure CLI 或 REST API 来处理:
- 计算实例和群集
- Azure Kubernetes 服务 (AKS)
- Azure 机器学习管理的 Docker 映像
如果此处未列出某个方案或任务,则不管是否使用受保护工作区,该方案或任务的工作方式都应该是相同的。
假设
本文假设采用以下配置:
- Azure 机器学习工作区使用专用终结点与虚拟网络通信。
- 工作区使用的 Azure 存储帐户、密钥保管库和容器注册表也使用专用终结点来与虚拟网络通信。
- 客户端工作站使用 VPN 网关或 Azure ExpressRoute 访问虚拟网络。
入站和出站要求
场景 | 所需的入站配置 | 所需的出站配置 | 其他配置 |
---|---|---|---|
从工作室访问工作区 | 不适用 |
|
可能需要使用自定义 DNS 服务器。 有关详细信息,请参阅将工作区与自定义 DNS 服务器结合使用。 |
使用工作室中的 AutoML、设计器、数据集和数据存储 | 不适用 | 不适用 |
|
使用计算实例和计算群集 |
|
|
如果使用防火墙,请创建用户定义的路由。 有关详细信息,请参阅配置入站和出站网络流量。 |
使用 Azure Kubernetes 服务 | 不适用 | 有关 AKS 的出站配置的信息,请参阅保护 Azure Kubernetes 服务推理环境。 | |
使用 Azure 机器学习管理的 Docker 映像 | 不适用 | Microsoft 工件注册表 | 如果工作区的容器注册表位于虚拟网络后面,请将工作区配置为使用计算群集来生成映像。 有关详细信息,请参阅使用虚拟网络保护 Azure 机器学习工作区。 |
存储帐户的用途
Azure 机器学习使用多个存储帐户。 每个帐户存储不同的数据,并具有不同的用途:
你的存储:你的 Azure 订阅中的存储帐户用于存储你的数据和工件,例如模型、训练数据、训练日志和 Python 脚本。 例如,工作区的默认存储帐户在你的订阅中。 Azure 机器学习计算实例和计算群集通过端口 445 (SMB) 和 443 (HTTPS) 访问此存储中的文件和 blob 数据。
使用计算实例或计算群集时,你的存储帐户会通过 SMB 协议装载为文件共享。 计算实例和群集使用此文件共享来存储数据、模型、Jupyter 笔记本和数据集等项。 计算实例和群集在访问存储帐户时使用专用终结点。
Microsoft 存储:Azure 机器学习计算实例和计算群集依赖于 Azure Batch。 他们访问 Azure 订阅中的存储。 此存储仅用于管理计算实例或群集。 你的任何数据都不会存储在这里。 计算实例和计算群集使用端口 443 (HTTPS) 访问此存储中的 blob、表和队列数据。
机器学习还会在 Azure Cosmos DB 实例中存储元数据。 默认情况下,此实例托管在 Azure 订阅中,由 Azure 进行管理。 可以选择在 Azure 订阅中使用 Azure Cosmos DB 实例。 有关详细信息,请参阅使用 Azure 机器学习进行数据加密。
方案:从工作室访问工作区
注意
本部分中的信息专用于从 Azure 机器学习工作室使用工作区。 如果你使用 Azure 机器学习 SDK、REST API、Azure CLI 或 Visual Studio Code,则本部分中的信息不适用。
从工作室访问工作区时,网络流量的流如下所示:
- 为了向资源进行身份验证,配置使用 Microsoft Entra ID。
- 对于管理和部署操作,配置使用 Azure 资源管理器。
- 对于特定于 Azure 机器学习的任务,配置使用 Azure 机器学习服务。
- 若要访问 Azure 机器学习工作室,配置使用 Azure Front Door。
- 对于大多数存储操作,流量将流经工作区默认存储的专用终结点。 本文的使用工作室中的 AutoML、设计器、数据集和数据存储部分讨论了例外。
- 此外,还需要配置一个 DNS 解决方案,以便你能够解析虚拟网络中的资源名称。 有关详细信息,请参阅将工作区与自定义 DNS 服务器结合使用。
方案:使用工作室中的 AutoML、设计器、数据集和数据存储
Azure 机器学习工作室的以下功能使用数据事件探查:
- 数据集:从工作室探索数据集。
- 设计器:可视化模块输出数据。
- AutoML:查看数据预览或配置文件并选择目标列。
- 标签:使用标签为机器学习项目准备数据。
数据探查依赖于 Azure 机器学习托管服务访问你的工作区的默认 Azure 存储帐户的能力。 托管服务不存在于你的虚拟网络中,因此无法直接访问虚拟网络中的存储帐户。 工作区使用服务主体来访问存储。
提示
可以在创建工作区时提供服务主体。 如果没有,则会为你创建一个,与你的工作区同名。
若要允许访问存储帐户,请将存储帐户配置为允许工作区的“资源实例”或选择“允许受信任服务列表中的 Azure 服务访问此存储帐户”。 此设置允许托管服务通过 Azure 数据中心网络访问存储。
接下来,将工作区的服务主体添加到存储帐户专用终结点的“读取者”角色。 Azure 使用此角色来验证工作区和存储子网信息。 如果它们相同,则 Azure 会允许访问。 最后,服务主体还需要对存储帐户拥有“Blob 数据参与者”访问权限。
有关详细信息,请参阅使用虚拟网络保护 Azure 机器学习工作区的“保护 Azure 存储帐户”部分。
方案:使用计算实例和计算群集
Azure 机器学习计算实例和计算群集是由 Microsoft 托管的托管服务。 它们构建于 Azure Batch 服务的基础之上。 尽管它们存在于 Azure 托管环境中,但它们也会注入到虚拟网络中。
创建计算实例或计算群集时,还会在你的虚拟网络中创建以下资源:
具有所需出站规则的网络安全组。 这些规则允许从 Azure 机器学习(在端口 44224 上使用 TCP)和 Azure Batch(在端口 29876-29877 上使用 TCP)进行入站访问。
重要
如果使用防火墙来阻止从 Internet 访问虚拟网络,则必须配置该防火墙以允许此流量。 例如,可以使用 Azure 防火墙创建用户定义的路由。 有关详细信息,请参阅配置入站和出站网络流量。
具有公共 IP 地址的负载均衡器。
还允许对以下服务标记进行出站访问。 对于每个标记,请将 region
替换为计算实例或群集的 Azure 区域:
Storage.region
:此出站访问用于连接到 Azure Batch 托管的虚拟网络中的 Azure 存储帐户。Keyvault.region
:此出站访问用于连接到 Azure Batch 托管的虚拟网络中的 Azure Key Vault 帐户。
来自计算实例或群集的数据访问会通过你的虚拟网络中存储帐户的专用终结点。
如果在计算实例上使用 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 机器学习推理环境。
注意
Azure Kubernetes 服务负载均衡器不是 Azure 机器学习创建的负载均衡器。 如果要将模型托管为仅在虚拟网络上可用的安全应用程序,请使用 Azure 机器学习创建的内部负载均衡器。 若要允许公共访问,请使用 Azure 机器学习创建的公共负载均衡器。
如果模型需要额外的入站或出站连接(例如连接到外部数据源),请使用网络安全组或防火墙来允许流量。
方案:使用 Azure 机器学习管理的 Docker 映像
Azure 机器学习提供可用于训练模型或执行推理的 Docker 映像。 这些映像托管在 Microsoft 工件注册表上。
如果你提供自己的 Docker 映像(例如,在你提供的容器注册表上),则你不需要与项目注册表进行出站通信。
提示
如果你的容器注册表在虚拟网络中受到保护,Azure 机器学习就不能使用它来生成 Docker 映像。 在这种情况下,必须指定一个 Azure 机器学习计算群集来生成映像。 有关详细信息,请参阅使用虚拟网络保护 Azure 机器学习工作区。
后续步骤
了解网络流量在受保护配置中的流动方式后,接下来请阅读虚拟网络隔离和隐私概述文章,详细了解如何在虚拟网络中保护 Azure 机器学习。