创建安全工作区的方法

本文介绍如何创建并连接到安全的 Azure 机器学习工作区。 安全的工作区使用 Azure 虚拟网络围绕由 Azure 机器学习所使用的资源创建安全边界。

在本教程中,你将完成以下任务:

  • 创建 Azure 虚拟网络 (VNet) 以确保虚拟网络中服务之间的通信安全。
  • 在 VNet 背后创建 Azure 存储帐户(Blob 和文件)。 此服务用作工作区的默认存储。
  • 在 VNet 背后创建 Azure Key Vault。 此服务用于存储工作区使用的机密。 例如,访问存储帐户所需的安全信息。
  • 创建 Azure 容器注册表 (ACR)。 此服务用作 Docker 映像的存储库。 Docker 映像提供在训练机器学习模型或将已训练的模型部署为终结点时所需的计算环境。
  • 创建 Azure 机器学习工作区。
  • 创建跳转盒。 跳转盒是 VNet 背后的 Azure 虚拟机。 由于 VNet 限制从公共网络访问,因此跳转盒用作连接到 VNet 背后的资源的一种方式。
  • 将 Azure 机器学习工作室配置为在 VNet 背后工作。 工作室提供适用于 Azure 机器学习的 Web 接口。
  • 创建 Azure 机器学习计算群集。 在云中训练机器学习模型时会用到计算群集。 在 Azure 容器注册表位于 VNet 背后的配置中,它还用于生成 Docker 映像。
  • 连接到跳转盒并使用 Azure 机器学习工作室。

提示

如果你正在寻找可演示如何创建安全工作区的模板(Microsoft Bicep 或 Hashicorp Terraform),请参阅教程 - 使用模板创建安全工作区

完成本教程后,你将拥有以下体系结构:

  • 一个 Azure 虚拟网络,其中包含三个子网:
    • Training:包含用于训练模型的 Azure 机器学习工作区、依赖项服务和资源。
    • 评分:本教程中的步骤不使用此项。 但是,如果继续在其他教程中使用此工作区,我们建议在将模型部署到终结点时使用此子网。
    • AzureBastionSubnet:由 Azure Bastion 服务用于将客户端安全地连接到 Azure 虚拟机。
  • 使用专用终结点的 Azure 机器学习工作区,用于使用 VNet 进行通信。
  • 借助使用专用终结点的 Azure 存储帐户,可以让存储服务(如 Blob 和文件)使用 VNet 进行通信。
  • 使用专用终结点的 Azure 容器注册表通过 VNet 进行通信。
  • Azure Bastion,该服务允许使用浏览器与 VNet 中的跳转盒 VM 安全地通信。
  • Azure 虚拟机,让你能远程连接并访问 VNet 中受保护的资源。
  • Azure 机器学习计算实例和计算群集。

提示

关系图中列出的 Azure Batch 服务是计算群集和计算实例所需的后端服务。

示意图:通过本教程创建的最终体系结构。

先决条件

  • 熟悉 Azure 虚拟网络和 IP 网络。
  • 虽然本文中的大部分步骤使用的是 Azure 门户或 Azure 机器学习工作室,但某些步骤会使用适用于机器学习 v2 的 Azure CLI 扩展。

创建虚拟网络

若要创建虚拟网络,请执行以下步骤:

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后在搜索字段中输入“虚拟网络” 。 选择“虚拟网络”条目,然后选择“创建” 。

    创建资源 的 UI 搜索

    虚拟网络创建

  2. 从“基本信息”选项卡中,选择要用于此资源的 Azure 订阅,然后选择或新建资源组 。 在“实例详细信息”下,为虚拟网络输入一个易记名称,并选择要在其中创建该网络的区域 。

    基本虚拟网络配置的屏幕截图

  3. 选择“IP 地址”选项卡。默认设置应类似于下图:

    默认 IP 地址屏幕截图

    使用以下步骤配置 IP 地址并配置子网以对资源进行训练和评分:

    提示

    虽然可以针对所有 Azure ML 资源使用一个子网,但本文中的步骤演示了如何创建两个子网来分隔资源的训练和评分。

    工作区和其他依赖项服务将分配到训练子网中。 资源也可以在其他子网中使用它们,例如评分子网。

    1. 查看默认的“IPv4 地址空间”值。 在屏幕截图中,此值为 172.16.0.0/16。 此默认值在你设置时可能会有所不同。 你可以使用不同的值,但本教程中的剩余步骤都基于值 172.16.0.0/16 进行。

      重要

      不建议对 VNet 使用 172.17.0.0/16 IP 地址范围。 这是 Docker 桥网络使用的默认子网范围。 其他范围可能也会根据你要连接到虚拟网络的内容而发生冲突。 例如,如果计划将本地网络连接到 VNet,并且本地网络也使用 172.16.0.0/16 范围,则会发生冲突。 最终,需要由你来规划网络基础结构。

    2. 选择“默认”子网,然后选择“删除子网” 。

      删除默认子网的屏幕截图

    3. 若要创建子网以包含用于训练的工作区、依赖项服务和资源,请选择“+ 添加子网”,并设置子网名称和地址范围。 以下是本教程中使用的值:

      • 子网名称:训练
      • 子网地址范围:172.16.0.0/24

      训练子网的屏幕截图

      提示

      如果计划使用服务终结点将 Azure 存储帐户、Azure Key Vault 和 Azure 容器注册表添加到 VNet,则在“服务”下选择以下选项:

      • Microsoft.Storage
      • Microsoft.KeyVault
      • Microsoft.ContainerRegistry

      如果你计划使用专用终结点将这些服务添加到 VNet,则无需选择这些项。 本文中的步骤将专用终结点用于这些服务,因此在执行这些步骤时无需选择它们。

    4. 若要为用于对模型进行评分的计算资源创建子网,请再次选择“+ 添加子网”,并设置名称和地址范围:

      • 子网名称:评分
      • 子网地址范围:172.16.1.0/24

      评分子网的屏幕截图

      提示

      如果计划使用服务终结点将 Azure 存储帐户、Azure Key Vault 和 Azure 容器注册表添加到 VNet,则在“服务”下选择以下选项:

      • Microsoft.Storage
      • Microsoft.KeyVault
      • Microsoft.ContainerRegistry

      如果你计划使用专用终结点将这些服务添加到 VNet,则无需选择这些项。 本文中的步骤将专用终结点用于这些服务,因此在执行这些步骤时无需选择它们。

  4. 选择“安全”。 对于“BastionHost”,选择“启用” 。 Azure Bastion 可提供一种安全访问 VM 跳转盒的方式,在后续的步骤中,你将在 VNet 中创建跳转盒。 对于剩余字段,请使用以下值:

    • Bastion 名称:此 Bastion 实例的唯一名称
    • AzureBastionSubnetAddress 空间:172.16.2.0/27
    • 公共 IP 地址:创建新的公共 IP 地址。

    将其他字段保留默认值。

    Bastion 配置的屏幕截图

  5. 选择“查看 + 创建” 。

    显示“查看 + 创建”按钮的屏幕截图

  6. 确认信息无误,然后选择“创建”。

    “查看”页的屏幕截图

创建存储帐户

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后输入“存储帐户” 。 选择“存储帐户”条目,然后选择“创建” 。

  2. 在“基本信息”选项卡中,选择之前用于虚拟网络的“订阅”、“资源组”和“区域” 。 输入唯一的“存储帐户名称”,并将“冗余”设置为“本地冗余存储(LRS)” 。

    存储帐户基本配置的屏幕截图

  3. 在“网络”选项卡中,选择“专用终结点”,然后选择“+ 添加专用终结点” 。

    添加 Blob 专用网络的 UI

  4. 在“创建专用终结点”窗体中,使用以下值:

    • 订阅:包含之前已创建资源的同一 Azure 订阅。
    • 资源组:包含之前已创建资源的同一 Azure 资源组。
    • 位置:包含之前已创建资源的同一 Azure 区域。
    • 名称:此专用终结点的唯一名称。
    • 目标子资源:blob
    • 虚拟网络:前面已创建的虚拟网络。
    • 子网:训练 (172.16.0.0/24)
    • 专用 DNS 集成:是
    • 专用 DNS 区域:privatelink.blob.core.chinacloudapi.cn

    选择“确定”以创建专用终结点。

  5. 选择“查看 + 创建”。 确认信息无误,然后选择“创建”。

  6. 创建存储帐户后,选择“转到资源”:

    转到新存储资源

  7. 在左侧导航栏中,选择“网络”,然后选择“专用终结点连接”选项卡 >“+ 专用终结点” :

    注意

    在前面的步骤中为 Blob 存储创建一个专用终结点时,还必须为文件存储创建一个专用终结点。

    存储帐户网络的 UI

  8. 在“创建专用终结点”窗体中,使用为之前的资源使用的相同“订阅”、“资源组”和“区域”。 输入唯一名称。

    添加文件专用终结点的 UI

  9. 选择“下一步: 资源”,然后将“目标子资源”设置为“文件” 。

    添加“文件”子资源

  10. 选择“下一步: 配置”,然后使用以下值:

    • 虚拟网络:前面创建的虚拟网络
    • 子网:训练
    • 与专用 DNS 区域集成:是
    • 专用 DNS 区域:privatelink.file.core.chinacloudapi.cn

    配置文件专用终结点的 UI

  11. 选择“查看 + 创建” 。 确认信息无误,然后选择“创建”。

提示

如果计划使用批处理终结点或使用 ParallelRunStep 的 Azure 机器学习管道,则还需要配置专用终结点目标队列和表子资源。 ParallelRunStep 在幕后使用队列和表进行任务调度和分派。

创建 key vault

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后输入“Key Vault” 。 选择“Key Vault”条目,然后选择“创建” 。

  2. 在“基本信息”选项卡中,选择之前用于虚拟网络的“订阅”、“资源组”和“区域” 。 输入唯一的密钥保管库名称。 将其他字段保留默认值。

    创建新的密钥保管库

  3. 在“网络”选项卡中,选择“专用终结点”,然后选择“+ 添加” 。

    密钥保管库网络

  4. 在“创建专用终结点”窗体中,使用以下值:

    • 订阅:包含之前已创建资源的同一 Azure 订阅。
    • 资源组:包含之前已创建资源的同一 Azure 资源组。
    • 位置:包含之前已创建资源的同一 Azure 区域。
    • 名称:此专用终结点的唯一名称。
    • 目标子资源:保管库
    • 虚拟网络:前面已创建的虚拟网络。
    • 子网:训练 (172.16.0.0/24)
    • 专用 DNS 集成:是
    • 专用 DNS 区域:privatelink.vaultcore.chinacloudapi.cn

    选择“确定”以创建专用终结点。

    配置密钥保管库专用终结点

  5. 选择“查看 + 创建”。 确认信息无误,然后选择“创建”。

创建容器注册表

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后输入“容器注册表” 。 选择“容器注册表”条目,然后选择“创建” 。

  2. 在“基本信息”选项卡中,选择之前用于虚拟网络的“订阅”、“资源组”和“位置” 。 输入唯一的“注册表名称”,并将“SKU”设置为“高级” 。

    创建容器注册表

  3. 在“网络”选项卡中,选择“专用终结点”,然后选择“+ 添加” 。

    容器注册表网络

  4. 在“创建专用终结点”窗体中,使用以下值:

    • 订阅:包含之前已创建资源的同一 Azure 订阅。
    • 资源组:包含之前已创建资源的同一 Azure 资源组。
    • 位置:包含之前已创建资源的同一 Azure 区域。
    • 名称:此专用终结点的唯一名称。
    • 目标子资源:注册表
    • 虚拟网络:前面已创建的虚拟网络。
    • 子网:训练 (172.16.0.0/24)
    • 专用 DNS 集成:是
    • 专用 DNS 区域:privatelink.azurecr.cn

    选择“确定”以创建专用终结点。

    配置容器注册表专用终结点

  5. 选择“查看 + 创建”。 确认信息无误,然后选择“创建”。

  6. 创建容器注册表后,选择“转到资源”。

    选择“转到资源”

  7. 在页面左侧,选择“访问密钥”,然后启用“管理员用户” 。 如果要将虚拟网络中的 Azure 容器注册表与 Azure 机器学习结合使用,此设置则是必需的。

    管理员用户切换开关的屏幕截图

创建工作区

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后输入“机器学习” 。 选择“机器学习”条目,然后选择“创建” 。

    {alt-text}

  2. 在“基本信息”选项卡中,选择之前用于虚拟网络的“订阅”、“资源组”和“区域” 。 对其他字段使用以下值:

    • 工作区名称:你的工作区的唯一名称。
    • 存储帐户:选择前面创建的存储帐户。
    • 密钥保管库:选择前面创建的密钥保管库。
    • 应用程序见解:使用默认值。
    • 容器注册表:使用前面创建的容器注册表。

    基本的工作区配置

  3. 在“网络”选项卡中,选择“专用终结点”,然后选择“+ 添加” 。

    工作区网络

  4. 在“创建专用终结点”窗体中,使用以下值:

    • 订阅:包含之前已创建资源的同一 Azure 订阅。
    • 资源组:包含之前已创建资源的同一 Azure 资源组。
    • 位置:包含之前已创建资源的同一 Azure 区域。
    • 名称:此专用终结点的唯一名称。
    • 目标子资源:amlworkspace
    • 虚拟网络:前面已创建的虚拟网络。
    • 子网:训练 (172.16.0.0/24)
    • 专用 DNS 集成:是
    • 专用 DNS 区域:将两个专用 DNS 区域保留为默认值 privatelink.api.ml.azure.cn 和 privatelink.notebooks.chinacloudapi.cn。

    选择“确定”以创建专用终结点。

    工作区专用网络配置的屏幕截图

  5. 选择“查看 + 创建”。 确认信息无误,然后选择“创建”。

  6. 创建工作区后,选择“转到资源”。

  7. 在左侧的“设置”部分中,选择“专用终结点连接”,然后选择“专用终结点”列中的链接 :

    工作区专用终结点连接的屏幕截图

  8. 在专用终结点信息出现后,从页面左侧选择“DNS 配置”。 保存此页上的 IP 地址和完全限定的域名 (FQDN) 信息,因为稍后将用到这些信息。

    IP 和 FQDN 条目的屏幕截图

重要

在可以完全使用工作区之前,还需要执行一些配置步骤。 但是,执行这些步骤需要连接到工作区。

启用工作室

Azure 机器学习工作室是基于 Web 的应用程序,使你能够轻松管理工作区。 但是,需要先对它进行一些额外的配置,然后才能将它与 VNet 中受保护的资源结合使用。 使用以下步骤启用工作室:

  1. 当使用具有专用终结点的 Azure 存储帐户时,将工作区的服务主体添加为存储专用终结点的“读者”。 在 Azure 门户中,选择你的存储帐户,然后选择“网络”。 接着选择“专用终结点连接”。

    存储专用终结点的屏幕截图

  2. 对于“列出的每个专用终结点”,请使用以下步骤:

    1. 选择“专用终结点”列中的链接。

      要选择的终结点的屏幕截图

    2. 在左侧选择“访问控制(IAM)”。

    3. 选择“+ 添加”,然后选择“添加角色分配(预览)” 。

      打开了“添加角色分配”菜单的“访问控制(IAM)”页。

    4. 在“角色”选项卡上,选择“读者” 。

      选中了“角色”选项卡的“添加角色分配”页。

    5. 在“成员”选项卡上,在“将访问权限分配到”区域中选择“用户、组或服务主体”,然后选择“+ 选择成员” 。 在“选择成员”对话框中,输入名称作为 Azure 机器学习工作区。 为工作区选择服务主体,然后使用“选择”按钮。

    6. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色 。

连接到工作区

可以通过多种方式连接到安全的工作区。 本文中的步骤使用的是跳转盒,它是 VNet 中的虚拟机。 可以使用 Web 浏览器和 Azure Bastion 连接到它。 下表列出了可以连接到安全工作区的其他几种方法:

方法 说明
Azure VPN 网关 通过专用连接将本地网络连接到 VNet。 通过公共 Internet 建立连接。
ExpressRoute 通过专用连接将本地网络连接到云。 使用连接提供程序建立连接。

重要

使用“VPN 网关”或“ExpressRoute”时,需要规划本地资源与 VNet 中资源之间名称解析的工作方式 。 有关详细信息,请参阅使用自定义 DNS 服务器

创建跳转盒 (VM)

使用以下步骤创建 Azure 虚拟机以用作跳转盒。 使用 Azure Bastion,可通过浏览器连接到 VM 桌面。 然后,可以从 VM 桌面使用 VM 上的浏览器连接到 VNet 内的资源,例如 Azure 机器学习工作室。 或者,可以在 VM 上安装开发工具。

提示

以下步骤创建 Windows 11 企业版 VM。 根据要求,可能需要选择不同的 VM 映像。 如果需要将 VM 加入组织的域,Windows 11(或 10)企业版映像非常有用。

  1. Azure 门户中,选择左上角的门户菜单。 从菜单中选择“+ 创建资源”,然后输入“虚拟机”。 选择“虚拟机”条目,然后选择“创建”。

  2. 在“基本信息”选项卡中,选择之前用于虚拟网络的“订阅”、“资源组”和“区域” 。 提供以下字段的值:

    • 虚拟机名称:VM 的唯一名称。

    • 用户名:将用于登录 VM 的用户名。

    • 密码:用户名的密码。

    • 安全类型:标准。

    • 映像:Windows 11 企业版。

      提示

      如果 Windows 11 企业版不在映像选择列表中,请使用“查看所有映像”_。 找到 Microsoft 的“Windows 11”条目,然后使用“选择”下拉菜单选择企业版映像。

    可将其他字段保留为默认值。

    VM 基本配置的屏幕截图

  3. 选择“网络”,然后选择前面创建的“虚拟网络” 。 使用以下信息来设置剩余字段:

    • 选择“训练”子网。
    • 将“公共 IP”设置为“无” 。
    • 将其他字段保留默认值。

    VM 网络配置的屏幕截图

  4. 选择“查看 + 创建”。 确认信息无误,然后选择“创建”。

连接到跳转盒

  1. 创建虚拟机后,选择“转到资源”。

  2. 在页面顶部,选择“连接”,然后选择“Bastion” 。

    连接/Bastion UI 的屏幕截图

  3. 选择“使用 Bastion”,并提供虚拟机的身份验证信息,随后将在浏览器中建立一个连接。

    使用 Bastion 对话框的屏幕截图

创建计算群集和计算实例

计算群集由你的训练作业使用。 计算实例可在附加到工作区的共享计算资源上提供 Jupyter Notebook 体验。

  1. 从 Azure Bastion 连接到跳转盒,在远程桌面上打开 Microsoft Edge 浏览器。

  2. 在远程浏览器会话中,转到 https://studio.ml.azure.cn。 出现提示时,使用 Azure AD 帐户进行身份验证。

  3. 从“欢迎使用工作室!”屏幕中,选择之前创建的“机器学习工作区”,然后选择“开始使用”。

    提示

    如果你的 Azure AD 帐户有权访问多个订阅或目录,请使用“目录和订阅”下拉列表以选择包含该工作区的订阅或目录。

    选择工作区对话框的屏幕截图

  4. 在工作室中,依次选择“计算”、“计算群集”和“+ 新建” 。

    新计算群集工作流的屏幕截图

  5. 在“虚拟机”对话框中,选择“下一步”以接受默认的虚拟机配置 。

    计算群集 VM 设置的屏幕截图

  6. 从“配置设置”对话框中,输入“cpu-cluster”作为计算名称 。 将“子网”设置为“训练”,然后选择“创建”以创建群集 。

    提示

    计算群集会根据需要动态缩放群集中的节点。 建议在未使用群集时将节点的最小数量保持为 0 以降低成本。

    新计算群集设置的屏幕截图

  7. 在工作室中,依次选择“计算”、“计算实例”和“+ 新建” 。

    新计算实例工作流的屏幕截图

  8. 在“虚拟机”对话框中,输入唯一“计算机名称”,然后选择“下一步:高级设置” 。

    计算实例 VM 设置的屏幕截图

  9. 在“高级设置”对话框中,将“子网”设置为“训练”,然后选择“创建”。

    计算实例设置的屏幕截图

提示

在创建计算群集或计算实例时,Azure 机器学习动态添加网络安全组 (NSG)。 此 NSG 包含以下特定于计算群集和计算实例的规则:

  • 允许 BatchNodeManagement 服务标记中端口 29876-29877 上的入站 TCP 流量。
  • 允许 AzureMachineLearning 服务标记中端口 44224 上的入站 TCP 流量。

下面的屏幕截图展示了这些规则的示例:

NSG 的屏幕截图

有关计算群集以及创建计算群集的详细信息,包括如何使用 Python 和 CLI 进行创建,请参阅以下文章:

配置映像生成

适用于:Azure CLI ml 扩展 v2(当前版本)

当 Azure 容器注册表位于虚拟网络背后时,Azure 机器学习无法使用它来直接生成 Docker 映像(用于训练和部署)。 相反,可以将工作区配置为使用前面创建的计算群集。 使用以下步骤来创建计算群集,并将工作区配置为使用它来生成映像:

  1. 在本地 Azure CLI 控制台中,使用以下命令安装适用于 Azure 机器学习的 2.0 CLI:

    az extension add -n ml
    
  2. 将工作区更新为使用计算群集来生成 Docker 映像。 将 docs-ml-rg 替换为你的资源组。 将 docs-ml-ws 替换为你的工作区。 将 cpu-cluster 替换为要使用的计算群集:

    az ml workspace update \
      -n myworkspace \
      -g myresourcegroup \
      -i mycomputecluster
    

    注意

    可以使用同一计算群集为工作区训练模型和生成 Docker 映像。

使用工作区

重要

本文中的步骤将 Azure 容器注册表放在 VNet 后面。 在此配置中,无法将模型部署到 VNet 内的 Azure 容器实例。 不建议在虚拟网络中将 Azure 容器实例与 Azure 机器学习一起使用。 有关详细信息,请参阅保护推理环境 (SDK/CLI v1)

作为 Azure 容器实例的替代方法,请尝试使用 Azure 机器学习托管的联机终结点。 有关详细信息,请参阅为托管联机终结点启用网络隔离(预览版)

此时,可以使用工作室以交互方式在计算实例上使用笔记本,并在计算群集上运行训练作业。 有关使用计算实例和计算群集的教程,请参阅教程:一天玩转 Azure 机器学习

停止计算实例和跳转盒

警告

当处于运行状态时(启动后),计算实例和跳转盒将继续收取你的订阅费用。 若要避免额外成本,请在它们未使用时停止运行它们。

计算群集在创建时可在最小和最大节点计数集之间动态缩放。 如果接受默认值,最小值则为 0,这可有效关闭未处于使用状态的群集。

停止计算实例

在工作室中,选择“计算”、“计算群集”,然后选择计算实例 。 最后,从页面顶部选择“停止”。

计算实例的“停止”按钮的屏幕截图

停止跳转盒

创建跳转盒后,在 Azure 门户中选择虚拟机,然后使用“停止”按钮。 当准备好再次使用它时,使用“启动”按钮来启动它。

VM 的“停止”按钮的屏幕截图

还可以将跳转盒配置为在特定时间自动关闭。 若要执行此操作,请依次选择“自动关闭”、“启用”,设置一个时间,然后选择“保存” 。

自动关闭选项的屏幕截图

清理资源

如果打算继续使用安全的工作区和其他资源,请跳过本部分。

若要删除本教程中创建的所有资源,请执行以下步骤:

  1. 在 Azure 门户中,选择最左侧的“资源组”。

  2. 从列表中选择你在本教程中创建的资源组。

  3. 选择“删除资源组”。

    “删除资源组”按钮的屏幕截图

  4. 输入资源组名称,然后选择“删除”。

后续步骤

现已创建安全的工作区并可访问工作室,接下来了解如何将模型部署到具有网络隔离的联机终结点