Azure 机器学习的漏洞管理
漏洞管理涉及检测、评估、缓解和报告组织系统与软件中存在的任何安全漏洞。 漏洞管理的责任由你和 Microsoft 共同分担。
本文将讨论这些责任,并概述 Azure 机器学习提供的漏洞管理控制。 你将了解如何使用最新的安全更新使服务实例和应用程序保持最新状态,以及如何最大程度地减少攻击者的得逞机会。
Azure 托管 VM 映像
Azure 机器学习管理 Azure 机器学习计算实例、Azure 机器学习计算群集和 Data Science Virtual Machine 的主机 OS 虚拟机 (VM) 映像。 更新频率为每月一次,包括以下详细信息:
对于每个新的 VM 映像版本,最新更新源自 OS 的原始发布者。 使用最新更新有助于确保你获得所有与 OS 相关的补丁。 对于 Azure 机器学习,所有 Ubuntu 映像的发布者均为 Canonical。 这些映像用于 Azure 机器学习计算实例、计算群集和Data Science Virtual Machines。
VM 映像每月更新一次。
除了原始发布者应用的补丁以外,Azure 机器学习还会在有更新可用时更新系统包。
Azure 机器学习检查并验证任何可能需要升级的机器学习包。 在大多数情况下,新的 VM 映像包含最新的包版本。
所有 VM 映像构建在定期运行漏洞扫描的安全订阅基础之上。 Azure 机器学习会标记任何未修复的漏洞,并在下一版本中对其进行修复。
大多数映像的发布频率是每月一次。 对于计算实例,映像发布与环境中预装的 Azure 机器学习 SDK 发布频率保持一致。
除了常规发布频率外,Azure 机器学习还会应用修补程序(如果漏洞出现)。 Microsoft 会在 72 小时内为 Azure 机器学习计算群集推出修补程序,计算实例则是一周内。
注意
主机 OS 不是你可能会在训练或部署模型时为环境指定的 OS 版本。 环境在 Docker 内运行。 Docker 在主机 OS 上运行。
Azure 托管容器映像
由 Azure 机器学习维护的基础 Docker 映像会经常获得安全补丁以解决新发现的漏洞。
Azure 机器学习每两周为支持的映像发布更新,以解决漏洞。 作为承诺,我们的目标是最新版本的受支持映像中不存在超过 30 天的漏洞。
修补后的映像在发布时带有新的不可变标记和已更新的 :latest
标记。 我们可能会在权衡安全性和机器学习作业的环境可重现性的情况下确定是要使用 :latest
标记还是固定为特定的映像版本。
管理环境和容器映像
可重现性是软件开发和机器学习试验的一个关键方面。 Azure 机器学习环境组件主要重心是保证执行用户代码的环境的可重现性。 为确保任何机器学习作业的可重现性,以前生成的映像会被拉取到计算节点,而无需重新具体化。
虽然 Azure 机器学习会在每个版本中修补基础映像,但是否使用最新映像可能需要在可重现性和漏洞管理之间进行权衡。 你需要负责选择用于你的作业或模型部署的环境版本。
默认情况下,在构建环境时,依赖项将在 Azure 机器学习提供的基础映像上分层。 在 Azure 机器学习中使用环境时,你还可以使用自己的基础映像。 你在 Microsoft 提供的映像之上安装了更多依赖项或者自带基础映像后,漏洞管理就由你负责。
有一个用作容器映像缓存的 Azure 容器注册表实例与你的 Azure 机器学习工作区相关联。 任何具体化的映像都会推送到容器注册表。 如果针对相应的环境触发了试验或部署,则工作区会使用它。
Azure 机器学习不会从容器注册表中删除任何映像。 你负责评估一段时间内映像的需求。 若要监视和维持环境的清洁状况,可以使用适用于容器注册表的 Microsoft Defender 来帮助扫描映像中的漏洞。
使用专用包存储库
Azure 机器学习使用 Conda 和 Pip 安装 Python 包。 默认情况下,Azure 机器学习从公共存储库下载包。 如果组织要求你仅从专用存储库(例如 Azure DevOps 源)获取包,则你可以替代作为基础映像和计算实例环境配置的一部分的 Conda 和 Pip 配置。
以下示例配置演示了如何删除默认通道,并添自己的专用 Conda 和 Pip 源。 请考虑使用计算实例设置脚本来实现自动化。
RUN conda config --set offline false \
&& conda config --remove channels defaults || true \
&& conda config --add channels https://my.private.conda.feed/conda/feed \
&& conda config --add repodata_fns <repodata_file_on_your_server>.json
# Configure Pip private indexes and ensure that the client trusts your host
RUN pip config set global.index https://my.private.pypi.feed/repository/myfeed/pypi/ \
&& pip config set global.index-url https://my.private.pypi.feed/repository/myfeed/simple/
# In case your feed host isn't secured through SSL
RUN pip config set global.trusted-host http://my.private.pypi.feed/
若要了解如何在 Azure 机器学习中指定自己的基础映像,请参阅从 Docker 生成上下文创建环境。 有关配置 Conda 环境的详细信息,请参阅在 Conda 网站上手动创建环境文件。
计算主机上的漏洞管理
Azure 机器学习中的托管计算节点使用 Azure 托管的 OS VM 映像。 预配节点时,它会拉取最新更新的 VM 映像。 此行为适用于计算实例、计算群集、无服务器计算(预览版)和托管推理计算选项。
尽管 OS VM 映像会定期修补,但 Azure 机器学习不会在正在使用时主动扫描计算节点中的漏洞。 为提供额外的保护层,请考虑对计算节点进行网络隔离。
确保环境保持最新并且计算节点使用最新 OS 版本是你与 Microsoft 之间的共同责任。 非空闲的节点无法更新到最新的 VM 映像。 针对每种计算类型的注意事项略有不同,具体请参阅以下部分。
计算实例
计算实例在预配时获得最新的 VM 映像。 Microsoft 每月发布新的 VM 映像。 部署计算实例后,它没有被主动更新。 可以查询实例的操作系统版本。 若要保持最新的软件更新和安全修补程序,可以使用以下方法之一:
重新创建计算实例以获取最新的 OS 映像(推荐)。
如果使用此方法,你将丢失存储在实例的 OS 和临时磁盘上的数据和自定义项(例如已安装的包)。
重新创建实例时:
有关映像版本的详细信息,请参阅 Azure 机器学习计算实例映像发行说明。
定期更新 OS 和 Python 包。
使用 Linux 包管理工具以便使用最新版本更新包列表:
sudo apt-get update
使用 Linux 包管理工具将包升级到最新版本。 使用此方法时,可能会发生包冲突。
sudo apt-get upgrade
使用 Python 包管理工具升级包并检查更新:
pip list --outdated
可以在计算实例上安装并运行其他扫描软件,以扫描安全问题:
目前不支持安装 Azure Defender for Servers 代理。
请考虑使用自定义脚本实现自动化。 如需组合 Trivy 和 ClamAV 的示例安装脚本,请参阅计算实例示例安装脚本。
计算群集
计算群集会自动将节点升级到最新的 VM 映像。 如果用 min nodes = 0
配置了群集,则在所有作业已完成时,它会自动将节点升级到最新的 VM 映像版本,然后群集的节点数将减至零个。
在以下情况下,群集节点不会纵向缩减,因此无法获取最新的 VM 映像:
- 群集的最小节点计数设置为大于零的值。
- 作业会在群集上连续的安排。
你负责纵向缩减非空闲群集节点以获取最新的 OS VM 映像更新。 在发布 VM 更新时,Azure 机器学习不会停止计算节点上正在运行的任何工作负载。 请暂时将最少节点数更改为零,使群集能够将节点数减至零个。
托管联机终结点
托管联机终结点自动接收包含漏洞修复的 OS 主机映像更新。 映像的更新频率为每月至少一次。
发布最新的 VM 映像版本时,计算节点会自动升级到该版本。 你不必执行任何操作。
客户管理的 Kubernetes 群集
Kubernetes 计算让你能够将 Kubernetes 群集配置为在 Azure 机器学习中训练、执行推理和管理模型。
由于你管理的是包含 Kubernetes 的环境,因此,你需要负责管理 OS VM 漏洞和容器映像漏洞。
Azure 机器学习经常在 Azure 项目注册表中发布将 Azure 机器学习扩展容器映像的新版本。 Microsoft 负责确保新的映像版本没有漏洞。 每个版本都会修复漏洞。
如果你的群集不间断地运行作业,正在运行的作业可能会运行已过时的容器映像版本。 将 amlarc
扩展升级到正在运行的群集后,新提交的作业将开始使用最新的映像版本。 将 amlarc
扩展升级到最新版本时,请根据需要从群集中清理旧的容器映像版本。
AutoML 和设计器环境
对于基于代码的训练体验,你可以控制要使用哪个 Azure 机器学习环境。 使用 AutoML 和设计器时,环境将封装为服务的一部分。 这些类型的作业可以在你配置的计算节点上运行,以便实现网络隔离等额外的控制。
AutoML 作业在位于 Azure 机器学习基础 Docker 映像顶层的环境中运行。
设计器作业会被隔离到“组件”中。 每个组件具有自身的环境,该环境位于 Azure 机器学习基础 Docker 映像的顶层。 有关组件的详细信息,请参阅组件参考。