配置入站和出站网络流量

Azure 机器学习需要在公共 Internet 上访问服务器和服务。 实现网络隔离时,需要了解所需的访问权限以及启用方式。

注意

本文中的信息适用于配置为使用 Azure 虚拟网络的 Azure 机器学习工作区。 使用托管虚拟网络时,会自动应用工作区所需的入站和出站配置。 有关详细信息,请参阅 Azure 机器学习托管虚拟网络

常见术语和信息

本文中使用了以下术语和信息:

  • Azure 服务标记:服务标记是指定 Azure 服务使用的 IP 范围的一种简单方法。 例如,AzureMachineLearning 标记表示 Azure 机器学习服务使用的 IP 地址。

    重要

    Azure 服务标记仅受某些 Azure 服务支持。 有关网络安全组和 Azure 防火墙支持的服务标记列表,请参阅虚拟网络服务标记一文。

    如果使用非 Azure 解决方案(如第三方防火墙),请下载 Azure IP 范围和服务标记的列表。 提取文件并在文件中搜索服务标记。 IP 地址可能会定期改变。

  • 区域:某些服务标记可用于指定 Azure 区域。 这会限制对特定区域(通常是服务所在的区域)中的服务 IP 地址的访问。 在本文中,当看到 <region>时,请替换你的 Azure 区域。 例如,如果 Azure 机器学习工作区位于“中国东部 2”区域,则 BatchNodeManagement.<region>BatchNodeManagement.chinaeast2

  • Azure Batch:Azure 机器学习计算群集和计算实例依赖于后端 Azure Batch 实例。 此后端服务托管在 Azure 订阅中。

  • 端口:本文使用以下端口。 如果某个端口范围未在本文中列出,则该范围是特定于服务的,可能未发布有关其用途的任何信息:

    端口 说明
    80 不安全的 Web 流量 (HTTP)
    443 安全的 Web 流量 (HTTPS)
    445 用于访问 Azure 文件存储中的文件共享的 SMB 流量
    8787 在计算实例上连接到 RStudio 时使用
    18881 用于连接到语言服务器,以便为计算实例上的笔记本启用 IntelliSense。
  • 协议:除非另有说明,否则本文中提到的所有网络流量都使用 TCP。

基本配置

此配置需要以下前提:

  • 你使用的是由你提供的容器注册表所提供的 docker 映像,并且不会使用 Microsoft 提供的映像。
  • 你使用的是专用 Python 包存储库,并且不会访问公共包存储库,例如 pypi.org*.anaconda.com*.anaconda.org
  • 专用终结点可以在 VNet 中直接相互通信。 例如,所有服务在同一 VNet 中都有一个专用终结点:
    • Azure 机器学习工作区
    • 存储帐户(Blob、文件、表、队列)

入站流量


ports
目标 目标端口 目的
AzureMachineLearning 任意 VirtualNetwork 44224 计算实例/群集的入站。 仅当实例/群集配置为使用公共 IP 地址时才需要

提示

默认情况下,会为此流量创建一个网络安全组 (NSG)。 有关详细信息,请参阅默认安全规则

出站流量

服务标记 端口 目的
AzureActiveDirectory 80、443 使用 Microsoft Entra ID 进行身份验证。
AzureMachineLearning 443、8787、18881
UDP:5831
使用 Azure 机器学习服务。
BatchNodeManagement.<region> 443 与 Azure Batch 通信。
AzureResourceManager 443 使用 Azure 机器学习创建 Azure 资源。
Storage.<region> 443 访问存储在 Azure 存储帐户中、用于计算群集和计算实例的数据。 此出站可用于外泄数据。 有关详细信息,请参阅数据外泄保护
AzureFrontDoor.FrontEnd
* 在由世纪互联运营的 Azure 中不需要。
443 Azure 机器学习工作室的全球入口点。 为 AutoML 存储图像和环境。
MicrosoftContainerRegistry 443 访问由 Azure 提供的 docker 映像。
Frontdoor.FirstParty 443 访问由 Azure 提供的 docker 映像。
AzureMonitor 443 用于将监视和指标数据记录到 Azure Monitor。
VirtualNetwork 443 当虚拟网络或对等虚拟网络中存在专用终结点时所需。

重要

如果计算实例或计算群集配置为无公共 IP,则默认情况下,它们无法访问公共 Internet。 如果它仍然可以将出站流量发送到 Internet,那是因为 Azure 默认出站访问,并且你有一个允许出站到 Internet 的 NSG。 我们不建议使用默认出站访问。 如果需要对 Internet 的出站访问,建议使用以下选项之一,而不是默认出站访问:

  • 具有公共 IP 的 Azure 虚拟网络 NAT:有关使用虚拟网络 NAT 的详细信息,请参阅虚拟网络 NAT 文档。
  • 用户定义的路由和防火墙:在包含计算的子网中创建用户定义的路由。 路由的下一跃点应引用防火墙的专用 IP 地址,地址前缀为 0.0.0.0/0。

有关详细信息,请参阅 Azure 中的默认出站访问一文。

出站流量

服务标记 端口 目的
MicrosoftContainerRegistryAzureFrontDoor.FirstParty 443 允许使用 Azure 提供的用于训练和推理的 Docker 映像。 还需要为 Azure Kubernetes 服务设置 Azure 机器学习路由器。

若要允许安装用于训练和部署的 Python 包,请允许以下主机名的出站流量:

注意

这不是 Internet 上所有 Python 资源所需的完整主机列表,这只是最常使用的主机列表。 例如,如果需要访问 GitHub 存储库或其他主机,则必须标识并添加该方案所需的主机。

主机名 用途
anaconda.com
*.anaconda.com
用于安装默认包。
*.anaconda.org 用于获取存储库数据。
pypi.org 用于列出默认索引的依赖项(如果有),索引不会被用户设置覆盖。 如果索引被覆盖,则还必须允许 *.pythonhosted.org
pytorch.org
*.pytorch.org
由基于 PyTorch 的一些示例使用。
*.tensorflow.org 由基于 Tensorflow 的一些示例使用。

方案:在计算实例上安装 RStudio

若要允许在计算实例上安装 RStudio,防火墙需要允许对要从中拉取 Docker 映像的站点进行出站访问。 将以下应用程序规则添加到 Azure 防火墙策略:

  • 名称:AllowRStudioInstall
  • 源类型:IP 地址
  • 源 IP 地址:要在其中创建计算实例的子网的 IP 地址范围。 例如,172.16.0.0/24
  • 目标类型:FQDN
  • 目标 FQDNghcr.iopkg-containers.githubusercontent.com
  • 协议:Https:443

若要允许安装 R 包,请允许 cloud.r-project.org 的出站流量。 此主机用于安装 CRAN 包。

注意

如果需要访问 GitHub 存储库或其他主机,则必须标识并添加该方案所需的主机。

方案:使用具有公共 IP 的计算群集或计算实例

重要

没有公共 IP 的计算实例或计算群集不需要来自 Azure Batch 管理和 Azure 机器学习服务的入站流量。 但是,如果有多个计算并且其中一些计算使用公共 IP 地址,则需要允许此流量。

使用 Azure 机器学习计算实例或计算群集(具有公共 IP 地址)时,允许来自 Azure 机器学习服务的入站流量。 无公共 IP 的计算实例或计算群集(预览版)不需要此入站通信。 系统会为你动态创建允许此流量的网络安全组,但如果你有防火墙,则可能还需要创建用户定义的路由 (UDR)。 在为此流量创建 UDR 时,可以使用 IP 地址或服务标记来路由该流量 。

对于 Azure 机器学习服务,必须添加主要和次要区域的 IP 地址 。 若要查找次要区域,请参阅 Azure 中的跨区域复制。 例如,如果 Azure 机器学习服务位于“美国东部 2”,则次要区域是“美国中部”。

要获取 Azure 机器学习服务的 IP 地址列表,请下载 Azure IP 范围和服务标记,并搜索文件以查找 AzureMachineLearning.<region>,其中 <region> 是 Azure 区域。

重要

IP 地址可能会随时间推移而改变。

创建 UDR 时,将“下一个跃点类型”设置为 Internet 。 这意味着来自 Azure 的入站通信会跳过防火墙来访问使用计算实例和计算群集的公共 IP 的负载均衡器。 UDR 是必需的,因为计算实例和计算群集会在创建时获取随机公共 IP,而你在创建之前不会知道这些公共 IP,因而无法在防火墙上注册它们,以允许从 Azure 到计算实例和计算群集的特定 IP 的入站。 下图显示了 Azure 门户中基于 IP 地址的 UDR 示例:

该图显示了用户定义的路由配置

有关配置 UDR 的信息,请参阅使用路由表路由网络流量

方案:Azure 机器学习与 Azure 存储终结点之间的防火墙

还必须允许对端口 445 上的 Storage.<region> 进行出站访问。

场景:在启用了 hbi_workspace 标志的情况下创建的工作区

还必须允许对 Keyvault.<region> 进行出站访问。 此出站流量用于访问后端 Azure Batch 服务的密钥保管库实例。

有关 hbi_workspace 标志的详细信息,请参阅数据加密一文。

方案:使用 Kubernetes 计算

在出站代理服务器或防火墙后面运行的 Kubernetes 群集需要额外的出口网络配置。

除了上述要求外,Azure 机器学习还需要以下出站 URL,

出站终结点 端口 说明 培训 推理
*.kusto.chinacloudapi.cn
*.table.core.chinacloudapi.cn
*.queue.core.chinacloudapi.cn
443 需要将系统日志上传到 Kusto。
<your ACR name>.azurecr.cn
<your ACR name>.<region>.data.azurecr.cn
443 Azure 容器注册表,用于拉取用于机器学习工作负载的 docker 映像。
<your storage account name>.blob.core.chinacloudapi.cn 443 Azure blob 存储,用于提取机器学习项目脚本、数据或模型,并上传作业日志/输出。
<your workspace ID>.workspace.<region>.api.ml.azure.cn
<region>.experiments.ml.azure.cn
<region>.api.ml.azure.cn
443 Azure 机器学习服务 API。
pypi.org 443 Python 包索引,用于安装用于训练作业环境初始化的 pip 包。 空值
archive.ubuntu.com
security.ubuntu.com
ppa.launchpad.net
80 用于下载必要的安全修补程序。 空值

注意

  • 使用工作区 ID 替换 <your workspace workspace ID>。 此 ID 可以在 Azure 门户 -“机器学习资源”页 -“属性”-“工作区 ID”中找到。
  • <your storage account> 替换为存储帐户名称。
  • 请将 <your ACR name> 替换为你的工作区的 Azure 容器注册表名称。
  • <region> 替换为你的工作区的区域。

群集内通信要求

若要在 Kubernetes 计算上安装 Azure 机器学习扩展,所有与 Azure 机器学习相关的组件都应部署在命名空间 azureml 中。 需要进行以下群集内通信以确保 ML 工作负载在 AKS 群集中正常工作。

  • azureml 命名空间中的组件应该能够与 Kubernetes API 服务器通信。
  • azureml 命名空间中的组件应该能够相互通信。
  • azureml 命名空间中的组件应该能够与 kube-system 命名空间中的 kube-dnskonnectivity-agent 通信。
  • 如果群集用于实时推理,azureml-fe-xxx POD 应该能够与其他命名空间中 5001 端口上部署的模型 POD 通信。 azureml-fe-xxx POD 应开放 11001、12001、12101、12201、20000、8000、8001、9001 端口以用于内部通信。
  • 如果群集用于实时推理,则部署的模型 POD 应该能够与 9999 端口上的 amlarc-identity-proxy-xxx POD 通信。

方案:Visual Studio Code

Visual Studio Code 依赖于特定的主机和端口来建立远程连接。

主机

本部分中的主机用于安装 Visual Studio Code 包,以在 Visual Studio Code 和 Azure 机器学习工作区中的计算实例之间建立远程连接。

注意

这不是 Internet 上所有 Visual Studio Code 资源所需的完整主机列表,这只是最常使用的主机列表。 例如,如果需要访问 GitHub 存储库或其他主机,则必须标识并添加该方案所需的主机。 有关主机名的完整列表,请参阅 Visual Studio Code 中的网络连接

主机名 用途
*.vscode.dev
*.vscode-unpkg.net
*.vscode-cdn.net
*.vscodeexperiments.azureedge.net
default.exp-tas.com
访问 vscode.dev(用于 Web 的 Visual Studio Code)时需要
code.visualstudio.com 是下载和安装 VS Code 桌面所必需的。 VS Code Web 不需要此主机。
update.code.visualstudio.com
*.vo.msecnd.net
用于检索通过安装脚本安装在计算实例上的 VS Code 服务器位。
marketplace.visualstudio.com
vscode.blob.core.chinacloudapi.cn
*.gallerycdn.vsassets.io
是下载并安装 VS Code 扩展所必需的。 这些主机使用适用于 VS Code 的 Azure 机器学习扩展启用与计算实例的远程连接。 有关详细信息,请参阅连接到 Visual Studio Code 中的 Azure 机器学习计算实例
https://github.com/microsoft/vscode-tools-for-ai/tree/master/azureml_remote_websocket_server/* 用于检索安装在计算实例上的 websocket 服务器位。 websocket 服务器用于将来自 Visual Studio Code 客户端(桌面应用程序)的请求传输到计算实例上运行的 Visual Studio Code 服务器。
vscode.download.prss.microsoft.com 用于 Visual Studio Code 下载 CDN

端口

必须允许网络流量流向端口 8704 至 8710。 VS Code 服务器会在此范围内动态选择第一个可用端口。

场景:没有服务标记的第三方防火墙或 Azure 防火墙

本部分中的指南是通用的,因为每个防火墙都有自己的术语和特定配置。 如果有任何疑问,请查看所用防火墙的文档。

提示

如果你使用 Azure 防火墙,并且想要使用本节中列出的 FQDN 而不是服务标记,请使用以下指南:

  • 使用 HTTP/S 端口(80 和 443)的 FQDN 应配置为应用程序规则
  • 使用其他端口的 FQDN 应配置为网络规则

有关详细信息,请参阅应用程序规则与网络规则的差异

如果未正确配置,则防火墙可能会在使用工作区时导致问题。 Azure 机器学习工作区使用各种主机名。 以下部分列出了 Azure 机器学习所需的主机。

依赖项 API

还可以使用 Azure 机器学习 REST API 获取必须允许出站流量流向的主机和端口的列表。 若要使用此 API,请遵循以下步骤:

  1. 获取身份验证令牌。 以下命令展现了如何使用 Azure CLI 获取身份验证令牌和订阅 ID:

    TOKEN=$(az account get-access-token --query accessToken -o tsv)
    SUBSCRIPTION=$(az account show --query id -o tsv)
    
  2. 调用 API。 在以下命令中,替换以下值:

    • <region> 替换为工作区所在的 Azure 区域。 例如,chinaeast2
    • <resource-group> 替换为包含工作区的资源组。
    • <workspace-name> 替换为工作区的名称。
    az rest --method GET \
        --url "https://<region>.api.ml.azure.cn/rp/workspaces/subscriptions/$SUBSCRIPTION/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/outboundNetworkDependenciesEndpoints?api-version=2018-03-01-preview" \
        --header Authorization="Bearer $TOKEN"
    

API 调用的结果是 JSON 文档。 以下代码片段节选自此文档:

{
  "value": [
    {
      "properties": {
        "category": "Azure Active Directory",
        "endpoints": [
          {
            "domainName": "login.chinacloudapi.cn",
            "endpointDetails": [
              {
                "port": 80
              },
              {
                "port": 443
              }
            ]
          }
        ]
      }
    },
    {
      "properties": {
        "category": "Azure portal",
        "endpoints": [
          {
            "domainName": "management.chinacloudapi.cn",
            "endpointDetails": [
              {
                "port": 443
              }
            ]
          }
        ]
      }
    },
...

Azure 主机

下表中的主机归 Microsoft 所有,它们提供工作区正常工作所需的服务。 这些表列出了由世纪互联运营的 Azure 区域的主机。

重要

Azure 机器学习使用你的订阅和 Azure 管理的订阅中的 Azure 存储帐户。 在适用的情况下,本部分使用以下术语来区分它们:

  • 你的存储:你的订阅中的 Azure 存储帐户,用于存储你的数据和项目,例如模型、训练数据、训练日志和 Python 脚本。>
  • Microsoft 存储:Azure 机器学习计算实例和计算群集依赖于 Azure Batch,并且必须访问位于 Azure 订阅中的存储。 此存储仅用于管理计算实例。 你的任何数据都不会存储在这里。

通用 Azure 主机

要求 主机 协议 端口
Microsoft Entra ID login.chinacloudapi.cn TCP 80、443
Azure 门户 management.azure.cn TCP 443
Azure 资源管理器 management.chinacloudapi.cn TCP 443

Azure 机器学习主机

重要

在下表中,将 <storage> 替换为你的 Azure 机器学习工作区的默认存储帐户的名称。 将 <region> 替换为你的工作区的区域。

要求 主机 协议 端口
Azure 机器学习工作室 studio.ml.azure.cn TCP 443
API *.ml.azure.cn TCP 443
API *.azureml.cn TCP 443
模型管理 *.modelmanagement.ml.azure.cn TCP 443
集成笔记本 *.notebooks.chinacloudapi.cn TCP 443
集成笔记本 <storage>.file.core.chinacloudapi.cn TCP 443、445
集成笔记本 <storage>.dfs.core.chinacloudapi.cn TCP 443
集成笔记本 <storage>.blob.core.chinacloudapi.cn TCP 443
集成笔记本 microsoftgraph.chinacloudapi.cn TCP 443
集成笔记本 *.aznbcontent.net TCP 443

Azure 机器学习计算实例和计算群集主机

提示

  • 仅当工作区是在启用 hbi_workspace 标志的情况下创建时,才需要 Azure Key Vault 的主机。
  • 仅当 Azure 计算机工作区具有专用终结点时,才需要计算实例的端口 8787 和 18881。
  • 在下表中,将 <storage> 替换为你的 Azure 机器学习工作区的默认存储帐户的名称。
  • 在下表中,请将 <region> 替换为包含你的 Azure 机器学习工作区的 Azure 区域。
  • 必须允许与计算实例进行 Websocket 通信。 如果阻止 websocket 流量,Jupyter 笔记本无法正常工作。
要求 主机 协议 端口
计算群集/实例 microsoftgraph.chinacloudapi.cn TCP 443
计算实例 *.instances.azureml.cn TCP 443
计算实例 *.instances.ml.azure.cn TCP 443、8787、18881
计算实例 <region>.tundra.azureml.cn UDP 5831
Azure 存储访问 *.blob.core.chinacloudapi.cn TCP 443
Azure 存储访问 *.table.core.chinacloudapi.cn TCP 443
Azure 存储访问 *.queue.core.chinacloudapi.cn TCP 443
你的存储帐户 <storage>.file.core.chinacloudapi.cn TCP 443、445
你的存储帐户 <storage>.blob.core.chinacloudapi.cn TCP 443
Azure Key Vault *.vault.azure.cn TCP 443

通过 Azure 机器学习维护的 Docker 映像

要求 主机 协议 端口
Azure 容器注册表 mcr.microsoft.com
*.data.mcr.microsoft.com
TCP 443

提示

  • 所有自定义 Docker 映像都需要 Azure 容器注册表。 这包括对 Microsoft 提供的基本映像进行的小幅度修改(例如附加包)。 Azure 机器学习的内部训练作业提交过程也需要它。 此外,无论场景如何,始终需要 Microsoft 容器注册表
  • 如果计划使用联合标识,请按照保护 Active Directory 联合身份验证服务的最佳做法一文的说明进行操作。

此外,使用具有公共 IP 的计算部分中的信息为 BatchNodeManagementAzureMachineLearning 添加 IP 地址。

如需了解限制访问部署到 AKS 的模型的相关信息,请参阅限制 Azure Kubernetes Service 中的出口流量

监视、指标和诊断

如果尚未保护工作区的 Azure Monitor,则必须允许流向以下主机的出站流量:

如果尚未保护工作区的 Azure Monitor,则必须允许流向以下主机的出站流量:

注意

Azure 支持部门还会使用记录到这些主机的信息,从而诊断你在工作区中遇到的任何问题。

  • dc.applicationinsights.azure.com
  • dc.applicationinsights.microsoft.com
  • dc.services.visualstudio.com
  • *.in.applicationinsights.azure.com

有关这些主机的 IP 地址列表,请参阅 Azure Monitor 使用的 IP 地址

后续步骤

本文是介绍如何保护 Azure 机器学习工作流系列文章的一部分。 请参阅本系列中的其他文章:

有关配置 Azure 防火墙的详细信息,请参阅教程:使用 Azure 门户部署和配置 Azure 防火墙