适用于:
Azure CLI ml 扩展 v2(当前版本)
Python SDK azure-ai-ml v2(当前版本)
提示
可以使用 Azure Machine Learning 托管虚拟网络而不是本文中的步骤。 使用托管虚拟网络,Azure Machine Learning 负责处理工作区和托管计算资源的网络隔离。 还可以为工作区所需的资源添加专用终结点,例如 Azure 存储帐户。 有关详细信息,请参阅工作区托管网络隔离。
本文介绍如何保护Azure Machine Learning工作区及其Azure Virtual Network中的关联资源。
本文是保护Azure Machine Learning工作流的系列教程的一部分。 请参阅本系列中的其他文章:
有关创建安全工作区的教程,请参阅 Tutorial:创建安全工作区、Bicep 模板或 Terraform 模板。
本文介绍如何在virtual network中启用以下工作区资源:
- Azure Machine Learning工作区
- Azure Storage帐户
- Azure Key Vault
- Azure 容器注册表 (Azure Container Registry)
先决条件
请阅读 网络安全概述一文,了解常见的虚拟网络方案和整体虚拟网络体系结构。
阅读 Azure Machine Learning 企业安全性最佳做法一文,了解最佳做法。
用于计算资源的现有虚拟网络和子网。
警告
请勿对 VNet 使用 172.17.0.0/16 IP 地址范围。 此范围是 Docker 网桥网络使用的默认子网范围。 将它用于 VNet 会导致错误。 其他范围也可能发生冲突,这具体取决于您要连接到虚拟网络的内容。 例如,如果您计划将本地网络连接到 VNet,且本地网络也使用 172.16.0.0/16 范围。 最终,规划网络基础结构。
若要将资源部署到虚拟网络或子网中,用户帐户必须在 Azure 基于角色的访问控制(Azure RBAC)中具有执行以下操作的权限:
- 虚拟网络资源上的“Microsoft.Network/*/read”。 Azure Resource Manager (ARM) 模板部署不需要此权限。
- 虚拟网络资源上的“Microsoft.Network/virtualNetworks/join/action”。
- "Microsoft.Network/virtualNetworks/subnets/join/action"(在子网资源上)。
有关 Azure RBAC 与网络的更多信息,请参阅 Networking 内建角色。
Azure 容器注册表 (Azure Container Registry)
Azure Container Registry必须是高级版本。 若要详细了解如何升级,请参阅更改 SKU。
如果 Azure Container Registry 使用 专用终结点,请将其置于与用于训练或推理的存储帐户和计算目标相同的 虚拟网络。 但是,它也可以位于 对等 虚拟网络中。
如果它使用服务终结点,则它必须与存储账户和计算目标位于相同的虚拟网络和子网中。
Azure Machine Learning工作区必须包含 Azure Machine Learning 计算群集。
限制
Azure 存储帐户
如果计划使用 Azure Machine Learning Studio 并且 storage account 也在 virtual network 中,则存在额外的验证要求:
- 如果存储帐户使用服务端点,则工作区专用端点和存储服务端点必须位于虚拟网络的同一子网中。
- 如果存储帐户使用专用终结点,则工作区专用终结点和存储专用终结点必须位于同一虚拟网络中。 在这种情况下,它们可以位于不同的子网中。
Azure Container Instances(Azure 容器实例)
当Azure Machine Learning工作区配置有专用终结点时,不支持在虚拟网络中部署到Azure容器实例。 相反,请考虑使用具有网络隔离的托管联机终结点。
Azure 容器注册表 (Azure Container Registry)
使用专用终结点配置Azure Machine Learning工作区或任何资源时,可能需要为Azure Machine Learning环境映像生成设置用户托管计算群集。 默认方案利用 无服务器计算,目前适用于对与Azure Machine Learning工作区关联的资源没有网络限制的方案。
重要
用于生成 Docker 映像的计算群集需要access用于训练和部署模型的包存储库。 可能需要添加允许访问公共仓库的网络安全规则、使用专用 Python 包,或使用已包含包的 自定义 Docker 映像(SDK v1)。
自带虚拟网络(BYO VNet)配置不支持通过工作区连接从专用 Azure 容器注册表拉取镜像。 若要使用专用 ACR,请将其配置为工作区的默认附加 ACR,并遵循 Enable Azure Container Registry (ACR) 部分中的准则。
Azure监视器
警告
Azure Monitor 支持使用 Azure Private Link 连接到 VNet。 但是,必须在 Azure Monitor 中使用打开的 Private Link 模式。 有关详细信息,请参阅 Private Link 访问模式:专用模式与 Open。
需要的公共互联网接入
Azure Machine Learning需要对公共 Internet 进行入站和出站访问。 下表概述了所需的访问权限及其用途。 对于以 .region 结尾的服务标记,请将 region 替换为包含工作区的Azure区域。 例如,Storage.chinanorth:
提示
“必需”选项卡列出了必需的入站和出站配置。 “特定情况”选项卡列出了可能要启用的特定配置所需的可选入站和出站配置。
| 方向 | 协议和 港口 |
服务标记 | 目的 |
|---|---|---|---|
| 出站 | TCP:80、443 | AzureActiveDirectory |
使用Microsoft Entra ID进行身份验证。 |
| 出站 | TCP:443、18881 UDP:5831 |
AzureMachineLearning |
使用Azure Machine Learning服务。 笔记本中的 Python Intellisense 使用端口 18881。 创建、更新和删除Azure Machine Learning计算实例使用端口 5831。 |
| 出站 | 任意:443 | BatchNodeManagement.region |
Azure Machine Learning计算实例/群集与Azure Batch后端通信。 |
| 出站 | TCP:443 | AzureResourceManager |
使用 Azure Machine Learning、Azure CLI 和 Azure Machine Learning SDK 创建Azure资源。 |
| 出站 | TCP:443 | Storage.region |
访问存储在Azure存储帐户中的计算群集和计算实例的数据。 有关防止数据通过此出站外泄的信息,请参阅数据外泄保护。 |
| 出站 | TCP:443 |
AzureFrontDoor.FrontEnd
* 在世纪互联运营的 Azure 中不需要。 |
Azure Machine Learning studio 的全局入口点。 为 AutoML 存储图像和环境。 有关防止数据通过此出站外泄的信息,请参阅数据外泄保护。 |
| 出站 | TCP:443 |
MicrosoftContainerRegistry.region
注意:此标记依赖于 AzureFrontDoor.FirstParty 标记 |
访问 Microsoft 提供的 Docker 映像。 为Azure Kubernetes Service设置Azure Machine Learning路由器。 |
提示
如果需要 IP 地址而不是服务标记,请使用下列选项之一:
- 从 Azure IP 范围和服务标签下载列表。
- 使用 Azure CLI az network list-service-tags 命令。
- 使用 Azure PowerShell Get-AzNetworkServiceTag 命令。
IP 地址可能会定期改变。
你可能还需要允许 出站 流量流向 Visual Studio Code 和非微软站点,以便安装机器学习项目所需的包。 下表列出了用于machine learning的常用存储库:
| 主机名 | 目的 |
|---|---|
anaconda.com*.anaconda.com |
用于安装默认包。 |
*.anaconda.org |
用于获取存储库数据。 |
pypi.org |
用于列出默认索引的依赖项(如果有),索引不会被用户设置覆盖。 如果索引被覆盖,则还必须允许 *.pythonhosted.org。 |
cloud.r-project.org |
在安装用于 R 开发的 CRAN 包时使用。 |
*.pytorch.org |
被一些基于 PyTorch 的示例使用。 |
*.tensorflow.org |
一些基于 TensorFlow 的示例使用了它。 |
code.visualstudio.com |
必须下载并安装 Visual Studio Code 桌面版。 Visual Studio Code Web 不需要此功能。 |
update.code.visualstudio.com*.vo.msecnd.net |
用于通过安装脚本来检索安装在计算实例上的Visual Studio Code服务器组件。 |
marketplace.visualstudio.comvscode.blob.core.chinacloudapi.cn*.gallerycdn.vsassets.io |
必须下载并安装 Visual Studio Code 扩展。 这些主机支持与 Visual Studio Code Azure ML 扩展提供的计算实例的远程连接。 有关详细信息,请参阅在 Visual Studio Code 中连接 Azure Machine Learning 计算实例。 |
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* |
用于检索安装在计算实例上的 WebSocket 服务器组件。 Websocket 服务器用于将来自 Visual Studio Code 客户端(桌面应用程序)的请求传输到计算实例上运行的 Visual Studio Code 服务器。 |
注意事项
使用 Azure Machine Learning VS Code 扩展时,远程计算实例需要访问公共存储库,以安装扩展所需的包。 如果计算实例需要代理来access这些公共存储库或 Internet,则需要在计算实例的 HTTP_PROXY 文件中设置和导出 HTTPS_PROXY 和 ~/.bashrc 环境变量。 可以使用自定义脚本在预配时自动执行此过程。
将 Azure Kubernetes Service (AKS) 与 Azure 机器学习配合使用时,允许以下流量访问 AKS VNet:
- AKS 的常规入站/出站要求,如 Restrict egress traffic in Azure Kubernetes Service 一文中所述。
- 发往 mcr.microsoft.com 的出站流量。
- 将模型部署到 AKS 群集时,请参考 将 ML 模型部署到 Azure Kubernetes 服务 一文中的指南。
有关使用防火墙解决方案的信息,请参阅配置所需的输入和输出通信。
通过专用终结点保护工作区
Azure Private Link允许使用专用终结点连接到工作区。 专用终结点是virtual network中的一组专用 IP 地址。 然后,您可以将工作区的访问限制为仅通过专用 IP 地址进行。 专用终结点有助于降低数据泄露风险。
有关为工作区配置专用终结点的信息,请参阅如何配置专用终结点。
警告
使用专用终结点保护工作区并不能确保端到端安全性。 必须按照本文其余部分的步骤和 VNet 系列中的步骤进行操作,以确保解决方案中各个组件的安全。 例如,如果您对工作区使用专用终结点,但 Azure 存储帐户不在 VNet 后面,则工作区与存储帐户之间的流量将不会通过 VNet 进行保护。
保护Azure存储帐户
Azure Machine Learning支持配置为使用专用终结点或服务终结点的存储帐户。
在Azure portal中,选择Azure Storage帐户。
使用为 Azure 存储使用专用终结点中的信息,为以下存储资源添加专用终结点:
- Blob
- 文件
- Queue - 仅当计划在 Azure 机器学习管道中使用 Batch 终结点或 ParallelRunStep 时才需要。
- Table - 仅当计划在 Azure Machine Learning 管道中使用 Batch 终结点或 ParallelRunStep时才需要。
提示
配置不是默认存储帐户时,请选择与要添加的存储帐户对应的Target 子资源类型。
在为存储资源创建专用终结点后,请在网络下选择存储帐户的防火墙和虚拟网络选项卡。
选择“所选网络”,然后在“资源实例”下选择
Microsoft.MachineLearningServices/Workspace作为资源类型。 使用“实例名称”选择工作区。 有关详细信息,请参阅基于系统分配的托管标识的受信访问。提示
或者,您可以选择允许受信任的服务列表中的 Azure 服务访问此存储帐户,以更广泛地允许访问来自受信任的服务。 有关详细信息,请参阅 配置Azure Storage防火墙和虚拟网络。
当使用专用终结点时,在Azure门户的Azure存储页面上查看网络区域。
选择“保存”以保存配置。
提示
使用专用终结点时,还可以禁用匿名访问。 有关详细信息,请参阅 disallow anonymous access。
安全的 Azure Key Vault
Azure Machine Learning使用关联的Key Vault实例来存储以下凭据:
- 关联的存储帐户连接字符串
- Azure Container Registry实例的密码
- 数据存储的连接字符串
可以将 Azure 密钥保管库 配置为使用专用终结点或服务终结点。 为了在虚拟网络后面使用 Azure Key Vault 时利用 Azure 机器学习的试验功能,请执行以下步骤:
提示
密钥保管库应与工作区位于同一虚拟网络,但它可以位于对等虚拟网络中。
有关将专用终结点与 Azure Key Vault 配合使用的信息,请参阅 integrate Key Vault with Azure Private Link。
启用Azure Container Registry(ACR)
提示
如果在创建工作区时未使用现有Azure Container Registry,则可能不存在。 默认情况下,工作区在需要 ACR 实例之前不会创建 ACR 实例。 若要强制创建一个模型,请在使用本部分中的步骤之前使用工作区训练或部署模型。
可以将Azure Container Registry配置为使用专用终结点。 使用以下步骤将工作区配置为在虚拟网络中使用 ACR:
使用以下方法之一查找您工作区的 Azure 容器注册表的名称:
如果为 Azure CLI 安装 Machine Learning 扩展 v2,请使用
az ml workspace show命令显示工作区信息。 v1 扩展不返回此信息。az ml workspace show -n yourworkspacename -g resourcegroupname --query 'container_registry'此命令会返回类似于
"/subscriptions/{GUID}/resourceGroups/{resourcegroupname}/providers/Microsoft.ContainerRegistry/registries/{ACRname}"的值。 字符串的最后一部分是工作区Azure Container Registry的名称。使用 连接到 Azure 容器注册表中的步骤来限制对虚拟网络的访问。 在添加虚拟网络时,请选择用于 Azure 机器学习资源的虚拟网络和子网。
将工作区的 ACR 配置为允许受信任服务访问。
默认情况下,Azure Machine Learning尝试使用 无服务器计算生成映像。 仅当依赖于工作区的资源(如Storage帐户或容器注册表)不受任何网络限制(专用终结点)时,此方法才有效。 如果限制对工作区相关资源的网络访问,请改用镜像构建计算。
若要设置映像生成计算,请在与依赖工作区的资源相同的 VNet 中创建Azure Machine Learning CPU SKU 计算群集。 可以将此群集设置为默认的映像生成计算。 它从该点之后开始生成工作区中的每个镜像。 使用以下方法之一配置工作区,以使用计算群集生成 Docker 映像。
重要
将计算群集用于映像生成时,以下限制适用:
- 仅支持 CPU SKU。
- 如果使用配置了无公共 IP 地址的计算群集,则必须提供某种方式让群集访问公用互联网。 访问存储在 Microsoft 容器注册表中的图像以及安装在 Pypi、Conda 和类似存储库中的包时,需要互联网连接。 需要配置用户定义的路由(UDR)以便通过公共 IP 访问互联网。 例如,可以使用防火墙的公共 IP,也可以使用具有公共 IP 的 Virtual Network NAT。 有关详细信息,请参阅如何安全地在 VNet 中训练。
使用
az ml workspace update命令设置构建计算。 对于 v1 和 v2 的 Azure CLI 扩展,machine learning 的命令是相同的。 在以下命令中,将myworkspace替换为工作区名称,将myresourcegroup替换为包含工作区的资源组,将mycomputecluster替换为计算群集名称:az ml workspace update --name myworkspace --resource-group myresourcegroup --image-build-compute mycomputecluster可以通过运行相同的命令并将计算引用为空空间来切换回无服务器计算:
--image-build-compute ''
提示
当 ACR 位于虚拟网络内部时,还可以禁用公共访问。
保护 Azure Monitor 和 Application Insights
若要为工作区启用 Azure Monitor 和 Application Insights 实例的网络隔离,请执行以下步骤:
在Azure portal中打开 Application Insights 资源。 “ 概述 ”选项卡可能具有工作区属性。 如果它没有该属性,请执行步骤 2。 如果是这样,则可以直接转到步骤 3。
提示
默认情况下,新工作区会创建基于工作区的 Application Insights 资源。 如果最近创建了工作区,则无需执行步骤 2。
升级工作区的 Application Insights 实例。 有关如何升级的步骤,请参阅 迁移至基于工作区的 Application Insights 资源。
创建一个 Azure 监视器私有链接范围,并将步骤 1 中的 Application Insights 实例添加到该范围。 有关详细信息,请参阅配置 Azure Monitor 私有链接。
安全连接到工作区
若要连接到 VNet 后面保护的工作区,请使用以下方法之一:
Azure VPN gateway - 通过专用连接将本地网络连接到 VNet。 通过公共 Internet 建立连接。 可以使用两种类型的 VPN 网关:
ExpressRoute - 通过专用连接将本地网络连接到云。 通过连接提供商建立连接。
Azure Bastion - 在此方案中,会在 VNet 中创建Azure虚拟机(有时称为跳转框)。 然后使用Azure Bastion连接到 VM。 Bastion 允许在本地 Web 浏览器中使用 RDP 或 SSH 会话连接到 VM。 然后使用 Jump Box 作为开发环境。 由于它位于 VNet 内部,因此可以直接访问工作区。 有关使用 Jump Box 的示例,请参阅教程:创建安全工作区。
重要
使用 VPN 网关 或 ExpressRoute 时,您需要规划本地资源与 VNet 中的名称解析方式。 有关详细信息,请参阅使用自定义 DNS 服务器。
如果在连接到工作区时遇到问题,请参阅排查安全工作区连接问题。
工作区诊断
可以从 Azure Machine Learning studio 或 Python SDK 在工作区上运行诊断。 运行诊断后,将返回检测到的任何问题的列表。 此列表包含指向可能的解决方案的链接。 有关详细信息,请参阅如何使用工作区诊断。
工作区的公共访问权限
重要
尽管Azure Machine Learning支持此配置,但Microsoft不建议这样做。 在生产环境中使用该配置之前,请与安全团队验证此配置。
在某些情况下,您可能需要允许从公共网络访问工作区(无需通过虚拟网络连接,即可使用安全连接到工作区部分中详细介绍的方法)。 通过公共互联网的访问使用TLS进行保护。
若要启用工作区access公用网络,请执行以下步骤:
- 配置工作区专用终结点后,启用公共访问权限。
- 配置Azure Storage防火墙以允许与通过公共 Internet 连接的客户端的 IP 地址通信。 如果客户端没有静态 IP,则可能需要更改允许的 IP 地址。 例如,如果一位数据科学家在家办公,并且无法与 VNet 建立 VPN 连接。
后续步骤
本文是保护Azure Machine Learning工作流的系列教程的一部分。 请参阅本系列中的其他文章:
