Azure-机器学习安全-全-
Azure 机器学习安全(全)
原文:
annas-archive.org/md5/2e181213ef0054cc4d5197a5e8c57d45译者:飞龙
前言
机器学习(ML)和人工智能(AI)在过去两年中继续快速发展,在各个领域取得了重大进步和应用。AI 和 ML 系统通常处理大量敏感数据,包括个人信息。确保这些数据的安全对于防止可能导致身份盗窃、金融欺诈和其他隐私违规的泄露至关重要。除此之外,政府和监管机构正在实施更严格的数据保护和隐私法律。遵守这些法规对于合法和道德的运营至关重要。这就是为什么保护这些系统比以往任何时候都更加重要。随着网络威胁的发展,AI 和 ML 系统必须被设计成能够适应和应对新的和不断出现的网络安全挑战,确保长期弹性和可靠性。
如果你正在使用 Azure 机器学习,这本书将帮助你评估数据、模型和环境的脆弱性,并实施最佳实践来管理、保护和监控整个机器学习生命周期中的 Azure 机器学习工作负载。
本书首先概述了你需要保护的内容。这包括了解零信任策略,使用 MITRE ATLAS 框架来理解机器学习攻击,以及通过使用多个服务来帮助你遵守行业标准法规,学习如何进行道德和负责任的工作。如果你从未使用过 Azure 机器学习,你也会在开头找到一个项目来开始。从那时起,本书将重点介绍数据和所有最佳实践来保护它。这包括从开发数据管理框架到数据加密、备份和恢复的最佳实践。在此之后,本书将重点介绍围绕 Azure 机器学习工作负载的任何基础设施,从身份和访问开始,然后通过网络和计算最佳实践。最后,它提供了所有所需的信息来自动化这些流程并监控系统以防止、检测和减轻任何问题,并提供威胁建模的概述,以帮助您重新评估并保持您的 Azure 机器学习工作负载安全。
在本书结束时,你将能够实施最佳实践来评估和保护你在机器学习生命周期中的 Azure 机器学习资产。
本书面向的对象
如果你对 Azure 机器学习和安全感兴趣,你将学习 Azure 机器学习的基本组件、最常见的机器学习攻击,以及如何与 Azure 合作开发和实施一个策略来保护 Azure 机器学习和任何相关服务。本书是为以下人群编写的:
机器学习开发者、管理员和数据科学家:任何在 Azure 机器学习项目中扮演活跃角色,或计划这样做,并希望获得在保护他们的机器学习资产方面专业知识的人。
IT 管理员和 DevOps 或安全工程师,他们需要在 Azure 上保障和监控 Azure 机器学习工作负载。他们将从学习 Azure 机器学习的基础知识以及本书中概述的最佳实践中受益,因为本书包含了开发跨多个资源的安全策略所需的所有信息。
建议具备基本的 Azure 知识以及处理数据、构建和部署 Azure 机器学习模型的经验。
本书涵盖的内容
第一章, 评估你的算法、模型和 AI 环境的脆弱性,概述了机器学习生命周期以及 Azure 机器学习组件和流程,这些流程涉及在 Azure 中处理机器学习。它将解释零信任模型以开发实施和评估策略。本章将涵盖本书其余部分概述的概念和实现所需的所有知识。
第二章, 理解最常见的机器学习攻击,概述了 MITRE ATLAS 框架,该框架是从 MITRE ATT&CK 框架针对机器学习改编而来,本章将解释攻击的不同阶段以及针对 AI/ML 系统的可能攻击。
第三章, 规划合规性,提供了如何使用微软的六个负责任 AI 原则来道德和负责任地开发 ML 模型,以及如何使用负责任 AI 工具将它们转化为负责任的发展策略的见解。最后,它总结了 Azure 机器学习行业认可的合规性标准,以及如何通过使用 Azure 服务来实施这些标准。
第四章, 数据保护和治理,概述了治理、存储和保障数据的各个方面。这包括从开发数据管理框架到数据加密、备份和恢复实践的各个方面。
第五章, 数据隐私和负责任 AI 最佳实践,提供了在模型训练前后识别和保护敏感信息和隐私的最佳实践。它解释了如何解释模型、识别偏差并减轻它。最后,它介绍了联邦学习和安全多方计算。
第六章, 管理和保障访问,概述了 Microsoft Entra ID 的安全方面,这是 Azure 机器学习的身份管理系统。这包括最小权限原则的介绍、基于角色的访问控制以及其他安全功能,如条件访问和特权身份管理。
第七章, 管理和保护您的 Azure 机器学习工作区,提供了保护 Azure 机器学习工作区和其相关服务的最佳实践。它侧重于网络隔离、计算、容器注册表和容器安全。
第八章, 管理和保护 MLOps 生命周期,概述了 MLOps 最佳实践及其在 Azure 中的实施工具。它将探讨基础设施即代码 (IaC)、CI/CD 管道和 Azure 中的事件驱动工作流。
第九章, 日志记录、监控和威胁检测,提供了在 Azure 中启用日志记录和配置警报的实施步骤。它介绍了 Microsoft Defender for Cloud 和 Azure Sentinel,以防止、检测和缓解任何出现的安全问题。
第十章, 为您的 Azure 机器学习工作负载设置安全基线,总结了书中概述的最佳实践,并提供了更多可探索的服务,尽管这些服务与 Azure 机器学习没有直接关系,但可以用于保护 Azure 资源。它通过提供威胁模型概述以及如何制定始终保持安全的策略来结束。最后,它概述了与云服务提供商相比,我们保护资源的责任。
要充分利用本书
要跟随本书中的示例,您需要一个活跃的 Azure 订阅。了解以下概念也将有助于理解本书中展示的实现。
基本的 Microsoft Azure 知识:
- 
理解核心云概念,例如云计算是什么,基础设施即服务 (IaaS)、平台即服务 (PaaS) 和 软件即服务 (SaaS) 之间的区别,以及使用 Azure 云服务的优势。
 - 
熟悉 Azure 门户,这是与 Azure 服务交互的主要用户界面。这包括导航仪表板、创建和管理资源,以及了解门户中的布局和工具。
 - 
熟悉 Azure 命令行界面 (CLI) 和 PowerShell 中的基本命令,用于管理 Azure 资源。
 
机器学习:
理解基本机器学习概念,包括监督学习和无监督学习,以及基本算法,如线性回归、逻辑回归、决策树和 k-means 聚类。
编程技能:
在数据科学中常用编程语言的基本熟练度,如 Python 或 R,包括熟悉 Pandas、NumPy、Scikit-learn(Python)等库。
基本了解网络安全:
基本了解网络安全涉及掌握用于保护计算机系统、网络和数据免受网络攻击或未经授权访问的关键概念、实践和策略。
如果您使用的是本书的数字版,我们建议您亲自输入代码或从书的 GitHub 仓库(下一节中有一个链接)获取代码。这样做将帮助您避免与代码的复制和粘贴相关的任何潜在错误。
下载示例代码文件
您可以从 GitHub 下载本书的示例代码文件,网址为github.com/PacktPublishing/Machine-Learning-Security-With-Azure。如果代码有更新,它将在 GitHub 仓库中更新。
我们还有其他来自我们丰富的图书和视频目录的代码包,可在github.com/PacktPublishing/找到。查看它们吧!
使用的约定
本书使用了多种文本约定。
文本中的代码: 表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“特别是使用azureml SDK v2,FL 功能是内置的。”
代码块设置如下:
import pandas as pd
data_path = 'mockdata.csv'
mockdata = pd.read_csv(data_path)
actualdata = mockdata[['age','diabetic']].groupby(['diabetic']).mean().to_markdown()
print(actualdata)
任何命令行输入或输出都应如下编写:
az ad sp show --id <clientId from previous result>
粗体: 表示新术语、重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“通过单击组件,我们可以通过转到运行设置选项并选择使用其他****计算目标来通过管道界面按钮轻松更改计算目标。”
小贴士或重要提示
看起来是这样的。
联系我们
我们欢迎读者的反馈。
一般反馈: 如果您对本书的任何方面有疑问,请通过customercare@packtpub.com给我们发邮件,并在邮件主题中提及书名。
勘误: 尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将不胜感激,如果您能向我们报告这一点。请访问www.packtpub.com/support/errata并填写表格。
盗版: 如果您在互联网上以任何形式遇到我们作品的非法副本,如果您能提供位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com与我们联系,并提供材料的链接。
如果您想成为一名作者: 如果您在某个领域有专业知识,并且您有兴趣撰写或为本书做出贡献,请访问authors.packtpub.com。
分享您的想法
一旦您阅读了《使用 Azure 的机器学习安全》,我们非常乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。
下载此书的免费 PDF 副本
感谢您购买此书!
您喜欢在路上阅读,但无法携带您的印刷书籍到处走?
你的电子书购买是否与您选择的设备不兼容?
别担心,现在每购买一本 Packt 书籍,你都可以免费获得该书的 DRM 免费 PDF 版本。
在任何地方、任何设备上阅读。直接从您最喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。
优惠远不止于此,您还可以获得独家折扣、时事通讯和丰富的免费内容,每天直接发送到您的邮箱。
按照以下简单步骤获取好处:
- 扫描二维码或访问以下链接
 

packt.link/free-ebook/9781805120483
- 
提交您的购买证明
 - 
就这些!我们将直接将您的免费 PDF 和其他优惠发送到您的邮箱。
 
第一部分:规划 Azure 机器学习安全
这一部分主要关于制定一个保护您资源的计划。安全性是组织特定的,因此您将了解专为保护任何 IT 系统实现设计的零信任安全方法。您将学习如何利用 MITRE ATLAS 知识库来理解机器学习攻击。最后,您还将学习如何道德和负责任地开发 AI 系统,以及如何使用 Azure 服务来确保合规性。
这一部分包含以下章节:
- 
第一章,评估您的算法、模型和 AI 环境的脆弱性
 - 
第二章,理解最常见的机器学习攻击
 - 
第三章,规划合规性
 
第一章:评估您的算法、模型和 AI 环境的脆弱性
欢迎您加入 Azure 机器学习安全之旅!我们将一起探索所有方法和技巧来保护我们的 AI 项目,并为我们的服务设定安全基线。让我们从对机器学习(ML)生命周期和 Azure 机器学习组件以及与 Azure 中 ML 工作相关的流程的快速介绍开始。我们将涵盖您需要了解的基本知识,以便遵循本书中概述的概念和实施。
下一步将是通过一个示例场景,我们将在此书中将其作为应用数据、模型、工作区以及使用部署在 Azure 机器学习中的模型的应用程序的安全概念的依据。您可以按照说明在您的 Azure 机器学习环境中重新创建此场景,以便熟悉 Azure 机器学习组件。
我们将使用零信任模型来开发实施和评估策略。该模型是一种基于“永不信任,始终验证”原则的安全策略。此模型适用于所有实施级别,从身份、基础设施和网络到应用程序、端点和数据。当与多个服务和环境一起工作时,这是一种最佳方法,因为我们很容易将其适应现代云和混合环境的复杂性。由于制定策略在很大程度上取决于每个组织的个别场景和用例,因此在本书中,我们将探讨多个选项,并展示几个零信任方面的实施。
在本章中,我们将涵盖以下主要主题:
- 
审查 Azure 机器学习生命周期
 - 
介绍一个机器学习项目
 - 
探索零信任模型
 - 
评估机器学习资产和应用程序的脆弱性
 
到本章结束时,您将熟悉零信任策略的基本原则和防御领域。您可以使用此策略对在 Azure 中托管的人工智能(AI)/ML 项目组件、应用程序和相关服务进行高级脆弱性评估。
技术要求
在本书中,我们将需要一些东西来应用所学知识和实施。如果需要,每一章都会概述更多细节,但我们需要的最小资源是一个Azure 订阅以及与其相关服务的 Azure 机器学习资源。
Azure 订阅和资源
在整本书中,我们将参考本节中提出的场景以及 Azure 中的其他服务和实现。你需要一个有效的 Azure 订阅和一个 Azure 机器学习工作区来跟随或复制结果。
如果你没有 Azure 订阅,你可以通过以下链接激活免费试用:https://azure.microsoft.com/en-us/pricing/offers/ms-azr-0044p/。
如果你从头到尾运行本章中建议的项目,只要你在之后删除所有相关资源并使用所有服务最低定价层,它不应超过 150-200 美元。然而,这个估计可能会根据你选择的地区、你选择实现的功能、数据集的大小以及你计划部署资源的时间而变化。试用版将为你提供足够的余额来尝试它;然而,我强烈建议使用 Azure 定价计算器和在你的订阅中进行成本管理,以确保将成本保持在最低,并在不再使用或需要资源时删除或停止资源。
注意
Azure 免费试用版为你提供在 Azure 服务上花费的信用额度。用完之后,你可以保留账户并使用免费的 Azure 服务。你需要添加你的信用卡,但除非你明确更改你的订阅类型,否则服务不会对你的卡收费。Azure 使用按使用付费的定价模式。为了确保你的信用额度不会比预期更快用完,请访问 Azure 定价计算器:https://azure.microsoft.com/en-us/pricing/calculator/。
Azure 机器学习
要使用 Azure 机器学习,你需要创建一个 Azure 机器学习资源。以下截图显示了创建一个资源的基本选项:

图 1.1 – Azure 机器学习资源创建表单
检查 Azure 机器学习生命周期
无论我们选择什么技术或框架来开发我们的机器学习项目,我们都会经历四个阶段。每个阶段都有一个或多个步骤,具体取决于个别场景。机器学习生命周期很重要,因为它清楚地概述了每个项目步骤。然后,它很容易将项目分解成任务并分配给负责人,因为通常在机器学习项目中涉及多个角色。
在我们将它们与 Azure 机器学习的组件连接之前,让我们回顾所有这些阶段。
机器学习生命周期
在机器学习中,我们识别出四个阶段:业务理解、数据操作、模型训练和模型部署。如图所示,这些阶段是迭代过程的一部分:

图 1.2 – 机器学习生命周期
让我们逐一了解这个迭代过程的每个步骤及其包含的内容,从业务理解阶段和收集初始需求开始。
业务理解
每个项目都是从需要解决的问题开始的。业务理解(或问题理解)是制定计划的第一步,该计划概述了需要完成的工作。理想情况下,我们希望需求能够被清晰地详细说明,但这很少是情况。首先,要理解项目的目标以及它能为业务带来哪些真正的价值。然后,通过将问题缩小到可执行的任务来评估哪些流程可以使用机器学习进行自动化。
例如,让我们考察以下场景。我们的客户是一家医院管理,希望通过提高医生的生产力和尽可能自动化他们的工作负载来降低成本。在对医生日常任务的分析中,他们发现医生花了很多时间查阅患者病史和分析血液检查。通过减少 5%的时间,医生可以在不加班的情况下看更多的病人。我们可以通过使用监督学习技术来解决这个问题,其中可以训练一个机器学习模型,通过结合患者的症状和血液检查结果来建议疾病。医生仍然需要验证结果。然而,缩短分析时间可以提高医生的生产力。
在缩小需求和明确问题之后,下一步是检查数据。
数据操作
机器学习基于数据。在这个阶段,我们处理与数据操作有关的所有事情,从数据收集到数据处理。数据收集或数据搜集是目标是为了收集与当前问题相关的数据。这些数据可能来自各种来源,如文件、数据库、API 或传感器。这是项目中最关键的步骤之一,因为我们要识别不同的数据来源,收集和整合数据。我们收集的数据的质量和数量将决定模型输出的效率和准确性。
收集到的数据可能很混乱,通常不适合被机器学习算法使用。数据问题包括无关数据、噪声、异常值和缺失数据。这就是数据准备或数据整理发挥作用的地方。任何与我们模型无关的数据都应该被适当过滤。当识别出异常值时,我们通常将它们从数据集中删除。对于缺失数据,处理过程要复杂一些。一旦识别出异常值,就应该对其进行评估,要么删除,要么用默认值或计算值填充。最后,数据可能需要以不同的方式编码,以便被机器学习算法使用。
模型训练和评估
在这个阶段,选择一个合适的机器学习算法,并在准备好的数据上进行训练。通过完成多次训练迭代来开发模型,并在每次迭代的结束时评估结果,直到达到令人满意的性能水平。在这个阶段,可能需要返回并再次处理数据,以确保数据的相关性,并且没有意外的相关性可能影响结果。
模型部署
一旦结果令人满意,下一步就是部署模型,以便软件工程师可以将其集成到他们的应用程序中并进行预测。尽管这可能看起来像是终点,但这还远未结束。部署的模型需要被监控以确保性能正常。模型可能会随着时间的推移而退化,这会影响其预测的准确性。在这种情况下,我们可以使用更新的数据集重新训练模型,以确保这种情况不会发生,并且循环重新开始。改变需求或引入新的业务需求也可能导致我们重新训练我们的模型。
现在我们对机器学习过程有了很好的理解,我们可以继续了解 Azure 机器学习服务组件,这些组件是机器学习生命周期每个阶段的组成部分。我们开发 Azure 机器学习项目所需的一切都是Azure 机器学习工作室或工作空间的一部分或以某种方式相关。
Azure 机器学习
Azure 机器学习是一个加速机器学习项目生命周期的云服务。它利用 Azure 基础设施连接到数据,并训练、部署和监控模型。该服务包括从连接来自多个数据源的数据到开发代码、训练、评估和发布可供 Web 应用程序使用的模型的各个方面。
该服务是一个完整的开发端到端机器学习项目的环境。它允许多个角色之间的协作,从数据科学家到开发者、安全工程师或 IT(信息技术)管理员。在本节中,我们将回顾每个组件如何映射到机器学习项目生命周期的各个部分以及服务功能。
Azure 机器学习工作室
Azure 机器学习服务创建了几个相关的 Azure 服务,以便正确使用该服务。首先,你需要一个有效的 Azure 订阅。当你创建 Azure 机器学习资源时,以下服务将与它一起创建:一个Azure 存储账户,一个应用程序洞察资源,以及Azure 容器注册表。
Azure 存储账户充当文件系统。所有导入的文件、笔记本等都被保存在这里。应用程序洞察资源可用于监控已部署的模型,并在部署的模型不符合预期时提供日志和洞察。在创建工作区时,Azure 容器注册表是可选的,但如果您计划在 Azure 容器实例(ACI)服务中发布模型,您可能需要它。模型可以发布到不同的计算目标,包括容器,并作为 API 创建,以便任何应用程序都可以轻松使用模型进行预测。其他所有操作都通过 Azure Machine Learning Studio 处理。在这里,您可以处理您的数据,创建计算资源,训练和部署您的模型,管理用户访问,等等。
下面的屏幕截图显示了 Azure Machine Learning Studio 的主页。在左侧,您可以找到 Azure Machine Learning 创作、资产、计算和其他资源管理选项:

图 1.3 – Azure Machine Learning Studio
大部分工作将在工作区中进行,无论是数据准备和导入、代码开发,还是模型训练和推理。让我们看看我们有哪些功能和资产可以用来工作。
数据处理
在 Azure Machine Learning Studio 中处理数据有几种方式。第一种是通过创建 数据存储 来处理存储在其他地方的数据。数据存储是对 Azure 上现有存储的引用。这可能包括 Azure Blob 存储 或 Azure Data Lake。如果您的数据不在 Azure 上,您仍然可以在 Azure Machine Learning 中处理它。您始终可以将文件作为数据资产上传到工作区或添加对外部数据库的引用。然后,您可以在项目中使用它们,与您的同事共享,并保持版本控制以跟踪更改和更新。
在下面的屏幕截图中,您可以查看您可以导入的一些数据资产类型:

图 1.4 – 在 Azure Machine Learning Studio 中创建数据资产
Azure Machine Learning 设计器
您可以使用 Python 和 R 来开发您的 Azure Machine Learning 项目,但该服务也提供了一个可视化设计器。您可以使用设计器进行训练和推理(生产模型进行预测)。
参考以下屏幕截图:

图 1.5 – Azure Machine Learning 设计器
设计师为多种操作提供了许多开箱即用的模块,您可以将它们拖放到画布上以创建训练管道。这包括导入数据、分割数据集、SQL 操作、算法和模型评估模块。如果您需要更多,您始终可以使用 Python 或 R 的自定义脚本模块并将您的代码作为管道的一部分添加。好处是您只需点击几下就可以快速转到推理管道并将其转换为 Web 服务。
自动化机器学习
Azure Machine Learning 的 自动化机器学习(自动化 ML)功能是一套工具和技术,用于自动化构建机器学习模型的过程。它通过自动选择给定数据集的最佳算法和超参数,然后训练和验证模型,帮助初学者或经验丰富的数据科学家。这个过程通过将各种算法(如决策树、随机森林和深度神经网络)应用于数据并选择表现最佳的模型来完成。它还包括数据特征,如预处理、特征工程和模型选择。它允许用户将数据上传到 Azure Machine Learning 工作区,并让平台以最小配置处理剩余的机器学习过程。当从列表中选择最佳模型时,它可以部署到 Web 服务中,以便被消费,就像 Azure Machine Learning 工作区中的所有模型一样。请查看以下截图:

图 1.6 – 自动化机器学习支持的算法
与计算资源协同工作
在训练或部署模型时,需要计算能力。Azure Machine Learning 提供基于 Azure 基础设施的扩展计算基础设施,用于训练和部署。要训练您的实验,您可以使用计算目标或计算集群。计算目标是一个运行您的训练作业的专用虚拟机。如果您需要更多功率,您可以创建一个由多个节点组成的集群以并行运行工作负载。您还可以从您未使用的虚拟机或其他 ML 服务(如 Azure Databricks)附加计算。您可以使用 ACI 或 Azure Kubernetes 服务(AKS)集群来部署模型。
使用 Python 或 R 编码
除了可视化和自动化工具之外,Azure Machine Learning 还支持 Jupyter Notebooks 用于代码开发和协作。您可以使用嵌入的笔记本编辑器、带有 Azure Machine Learning 扩展的 Visual Studio Code,或者从训练期间的运行计算目标启动的 Jupyter Notebook 编辑器。以下截图展示了这一点:

图 1.7 – Azure Machine Learning Studio 笔记本编辑器
在这里,我们可以看到 Azure 机器学习最基本的部分。工作区配备了多个功能和工具,可以促进机器学习生命周期的所有阶段,并将机器学习项目从开始到结束。在下一节中,我们将看到如何使用这里概述的功能和工具开发一个示例机器学习项目,从开发到生产。
介绍机器学习项目
如果你想要跟随这本书中的实现示例,这里有一个示例项目来帮助你开始。如果你已经是 Azure 机器学习的专家,请随意跳过这个介绍。本节将帮助服务的新手或处于其他角色的人了解机器学习生命周期的实际操作。我们将创建一个示例项目,展示如何将数据集导入 Azure 机器学习,如何使用自动机器学习功能使用多个参数训练多个模型,并将生成的模型作为端点部署以用于预测。选择自动机器学习功能是因为它不需要广泛的数据科学专业知识。
登录到Azure 门户(portal.azure.com/)并查找Azure 机器学习资源。从概览中,点击Studio web URL或启动工作室按钮以访问你的工作区,如图所示:

图 1.8 – 访问你的 Azure 机器学习工作区
现在,你将发现自己在工作区的首页。从现在开始,你将在以下各节中找到所有选项。
数据集
机器学习从数据开始,因此你需要找到一个数据集来训练模型进行预测。有许多开源数据集可供机器学习使用,你可以免费下载它们——例如,从大学存储库用于学习和研究目的。只需确保来源可靠,以免下载时包含恶意软件或类似的东西。在这个例子中,我们将使用带有自动机器学习的回归任务。如果你想跟随这些步骤,你可以使用任何数据集;只需确保你调整自动机器学习选项以匹配你选择的数据集。如果你没有太多经验,并且想要与这里使用的数据集相似的东西,当你寻找数据集时,请注意任务和数据。如果它可以用于回归并且包含一个包含数值数据的列,你的模型将训练来预测,任何数据集都适用。自动机器学习目前不支持所有类型的机器学习任务,所以这是一个很好的入门方式。
我正在使用一个包含患者症状和标记患者是否被诊断为糖尿病的类列的样本数据集。这将有助于训练一个新模型,该模型可以根据症状预测患者是否会成为糖尿病患者。
如果您的数据集已经准备好,我们只需在资产下的数据菜单中创建一个新的数据资产。以下是操作步骤:
- 首先,我们提供名称、描述的详细信息,并将数据类型设置为表格型,如图所示:
 

图 1.9 – 创建数据资产
- 在向导的下一步中,选择从本地****文件选项:
 

图 1.10 – 选择数据源
- 在存储类型屏幕上保留默认选项,然后转到文件或文件夹****选择屏幕上传文件:
 

图 1.11 – 上传文件
- 在设置下,选择如图所示的选项,直到数据预览显示正确的列和数据:
 

图 1.12 – 应用设置
- 在架构下,确保排除路径列从数据集中。您还可以排除任何您认为与预测不相关的列,或者如果已识别错误,则更改数据类型:
 

图 1.13 – 选择列和数据类型
转到审查屏幕并创建数据集。现在您有一个可用于您的机器学习项目的可用数据集!下一步是开始训练模型。
训练模型
训练我们的模型有许多方法。在这里,我们将使用 Azure 机器学习的自动化机器学习功能,通过多个算法和参数运行模型,让服务进行训练,并根据性能建议最佳模型。这是创建我们需要的所有组件以展示本书后面将要讨论的安全概念的最快方式。
让我们开始:
- 要开始,请在创作下的自动化机器学习菜单中打开:
 

图 1.14 – 启动新的自动化机器学习作业
- 选择您之前创建的数据集,然后转到下一屏幕:
 

图 1.15 – 选择数据资产
- 在新实验名称下给作业命名,并在数据集中填写目标列以预测。在这个数据集中,它是Y列:
 

图 1.16 – 配置作业设置
- 为训练计算选择计算集群选项,然后点击向导外的新建链接来创建一个新的集群:
 

图 1.17 – 创建集群
- 选择
0和2应该就足够了: 

图 1.18 – 集群选项
- 
保留所有其他选项为默认值,创建集群,然后当您回到自动机器学习向导时,继续到选择任务和****设置屏幕。
 - 
由于我们想要预测一个数值,所以我们选择算法的回归类别,如图所示。服务引擎将运行多个回归算法,认为它们适合数据配置文件以生成多个模型:
 

图 1.19 – 选择算法类别和设置
- 在退出标准下的1 小时:
 

图 1.20 – 设置其他配置设置
在向导中保留所有其他选项为默认值,并启动自动机器学习作业。现在,您所能做的就是等待找到一个性能良好的模型,训练停止或达到最大训练时间,此时将自动选择最佳模型。您可以在自动 ML菜单下监控模型训练的进度。
现在我们已经训练了模型,我们可以部署它。
部署模型
一旦作业完成,您就可以在模型菜单下找到表现最佳的模型。根据指标选择列表中表现最准确的模型,它将准备好作为网络服务部署到 ACI。
这里是尝试此操作的步骤:
- 从列表中选择得分最高的模型。您将在解释列中识别出最佳得分,它还将包含特征解释。您还可以比较评分指标,它可能更高或更低,具体取决于指标类型:
 

图 1.21 – 不同算法和参数的训练模型列表
- 打开模型屏幕并单击部署按钮。在列表中,选择网络服务选项,如图所示:
 

图 1.22 – 模型部署
- 对于部署设置,添加名称,选择Azure 容器实例作为计算类型,并将启用身份验证切换按钮设置为开启。以下截图展示了这一过程:
 

图 1.23 – 部署设置
等待部署完成,然后转到端点菜单,将您的模型与应用程序集成并进行预测。
使用部署的模型进行预测
要使用部署的模型进行预测,请转到端点菜单并找到端点部署。确保部署状态为健康,操作状态为成功。如果部署状态不是健康或失败,可能需要更多时间来部署。请参考以下截图中的模型:

图 1.24 – Azure 机器学习模型预测端点
您可以使用测试选项卡快速测试该服务。使用消费选项卡查找端点和认证密钥,将网络服务集成到您的应用程序中进行预测。
如果您已经跟随了前面的步骤,恭喜您:您刚刚使用 Azure 机器学习训练并部署了一个模型。但这还没有结束;我们将在这个书中使用这个示例项目来展示如何实现保护您自己的解决方案。但在我们深入实现之前,让我们先了解我们将遵循的策略和技术,从零信任开始。
探索零信任模型
零信任模型是一种基于“永不信任,始终验证”原则的安全策略。因此,我们不会假设部署在防火墙后面的资源是安全的,零信任模型假设存在漏洞,并且每个请求都需要被验证,就像它来自一个开放网络一样。零信任模型适用于云、本地和混合环境。实施零信任安全模型可以帮助组织减少其整体攻击面,最小化数据泄露的风险,并通过从基于边界的安全方法转向更全面和自适应的安全策略来改善其安全态势。
虽然 Azure 机器学习是一个云服务,但零信任模型仍然适用,因为一个完整的机器学习项目跨越了数据、网络、基础设施和应用。我们将概述零信任模型。然后,我们将使用这些知识来评估我们工作负载中的漏洞,并使用 Azure 的工具和服务减少我们的攻击面。我们将从熟悉零信任原则和防御领域开始。
介绍零信任原则
零信任策略基于三个原则——明确验证、使用最小权限访问和假设存在漏洞。
让我们在以下章节中了解这些内容。
明确验证
明确验证原则要求所有尝试访问网络的用户、设备、应用程序和资源在获得访问权限之前必须进行彻底的认证和授权。
在传统的安全模型中,一旦用户或设备经过认证并获得访问权限,他们通常会在一定程度上受到信任,并被允许在网络中移动而无需额外的检查。然而,在零信任模型中,每个访问请求都被视为潜在的威胁。只有在经过多级验证过程之后,才会授予访问权限。
此验证过程包括多个认证层,例如验证用户凭据、设备身份和网络位置。用户认证可能涉及多因素认证(MFA)或其他高级认证方法来确认用户的身份。验证过程不是一个一次性事件,而是持续进行的。它包括检查异常或用户行为、设备健康或其他可能表明潜在威胁的因素的变化。如果检测到任何变化或异常,系统可以启动额外的验证检查,甚至在必要时撤销访问权限。
使用最小权限访问
使用最小权限访问原则是零信任安全模型的一个关键组件。它指出,用户、设备和应用程序应仅被授予执行其工作职能所需的最小资源访问权限。
用户通常被赋予广泛的网络资源和数据访问权限,假设他们只访问执行其工作职责所需的资源。然而,这种方法通过允许用户访问他们不需要的资源,增加了数据泄露和未经授权访问的风险,攻击者可以利用这一点。
相比之下,零信任模型通过基于最小权限原则来限制访问,采取了一种更细粒度的访问控制方法。例如,市场营销部门的一名用户可能只需要访问与市场营销相关的文件,而不需要访问财务部门的资料或系统。同样,承包商可能需要访问特定的文件或应用程序,但不需要访问整个网络。
假设漏洞
假设漏洞原则假定网络已经被入侵,攻击者已经存在于网络内部,或者将存在于网络内部。这一原则强调了早期检测和响应以减轻潜在漏洞造成的损害的重要性。我们需要通过尽快分析每个访问级别的异常来尽快识别攻击。
组织通常专注于保护其网络边界并防止攻击者获得访问权限。然而,随着网络攻击的日益复杂化,基于边界的网络安全已不足以保护现代威胁。零信任模型认识到这一点,并假定攻击者最终将通过钓鱼攻击、恶意软件或其他手段渗透网络。
假设发生安全漏洞意味着组织必须实施额外的安全控制措施来限制攻击造成的损害,例如微分段、加密和网络隔离。这些控制措施有助于防止攻击者横向移动穿越网络并访问关键资源,即使他们已经获得了网络的一部分访问权限。
解释零信任防御区域
零信任安全模型通过在多个防御区域或领域实施安全控制来保护网络资源和数据,例如以下图中所示:

图 1.25 – 零信任防御区域
让我们在以下各节中了解这些领域的每一个。
身份
一个重要的防御区域是身份,它涉及保护用户身份并确保只有授权用户可以访问网络资源。身份验证、最小权限访问、基于风险的适应性访问和持续监控都是身份管理和安全的一部分。身份验证涉及在授予网络资源访问权限之前验证用户身份。它包括多因素认证、无密码认证和条件访问策略,以确保只有授权用户可以访问敏感资源。
让我们探索一些最佳实践:
- 
最小权限访问涉及授予用户执行其工作职能所需的最小访问权限。它包括基于角色的访问控制、动态访问控制和特权访问管理,以限制用户访问到他们所需的内容。
 - 
基于风险的适应性访问涉及使用风险评估工具来评估用户行为并确定他们应获得的网络资源访问级别。它包括持续认证、实时风险评估和上下文访问策略,以确保用户访问适当且安全。
 - 
持续监控涉及监控用户活动并检测异常或可疑行为。它包括实时警报、行为分析和机器学习来识别潜在的安全威胁并采取主动措施预防它们。
 
终端节点
另一个关键的防御区域是终端节点,它涉及保护终端,如笔记本电脑、台式机、移动设备和服务器。在零信任模型中,微软保护终端的方法是确保在授予网络资源访问权限之前,终端是健康的并且符合安全策略。它包括设备管理工具、合规性策略和设备健康检查,以确保设备和终端安全且更新。
应用程序
另一个重要领域是应用程序,它涉及保护应用程序并确保只有授权用户和设备可以访问它们。应用程序必须有一个唯一的身份,并且在授予网络资源访问权限之前应包括身份验证。这包括使用证书、令牌和安全的通信协议来建立应用程序和网络资源之间的信任。
数据
数据是机器学习中的一个关键组件,涉及保护数据和确保只有授权用户和设备可以访问它。以下是一些保护数据的方法:
- 
数据分类和标记涉及根据数据的敏感性级别对数据进行分类和标记,并根据分类实施访问控制。标记可以是自动化的或用户定义的,并且应包括监控数据使用以保护敏感数据。
 - 
数据保护涉及在传输和静止状态下保护数据。这包括加密、访问控制和监控数据使用以防止未授权访问或敏感数据泄露。
 - 
治理、合规性和监管要求意味着确保数据在适当的治理、合规性和监管要求下处理。这包括数据保留政策、数据泄露通知政策和合规性审计,以确保数据得到适当的处理。
 
基础设施
基础设施对于保护连接设备、主机应用程序和数据的计算至关重要。基础设施包括任何物理或虚拟设备。
设备安全是关于保护网络设备,如交换机、路由器和防火墙,以防止未授权访问并确保它们安全配置。它包括实施设备管理工具、固件和软件更新,并监控设备活动以检测潜在的安全威胁。
虚拟化安全涉及保护虚拟化环境,如虚拟机和容器,以防止未授权访问并确保它们安全配置。它包括实施虚拟化管理工具、打补丁和更新,并监控虚拟化活动以检测潜在的安全威胁。
还应考虑云环境的类型,例如基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。
网络
最后,网络是一个防御领域,包括确保设备、应用程序和数据之间的网络连接安全。实现这一目标的方法包括网络微分段和访问控制。我们可以通过将网络划分为更小的部分并限制它们之间的访问来实现这一点。我们可以通过实施防火墙和监控网络活动来检测潜在的安全威胁,从而提高网络的安全性。这包括管理网络流量和日志分析以检测潜在的安全威胁并采取主动措施来预防它们。
让我们继续看看我们如何应用零信任策略来评估我们的机器学习工作负载的安全状态。
评估机器学习资产和应用程序的漏洞
评估 Azure 机器学习资产漏洞的一部分涉及识别潜在的安全风险,然后实施适当的措施来减轻它们。
在这里,我们将通过 Azure 机器学习组件及其可能的漏洞进行探讨。安全措施的实现将在本书的其余部分进行更详细的解释。评估基于零信任防御区域。
第一步是确定与 Azure 机器学习相关的所有资产,如数据、模型和算法。这并不意味着只有 Azure 机器学习工作室。还需要检查与 Azure 机器学习相关的几个服务。一旦确定了资产,你应该评估它们的潜在风险,包括未经授权的访问、数据泄露和滥用。
记住这一点很重要,即 Azure 中的所有内容都是在云基础设施之上运行的,因此熟悉与 Azure 机器学习一起工作的任何服务并确保它们的安全性是有帮助的。我们将在下一章中看到,对手如何利用其他系统来损害机器学习项目。你可能不需要使用所有这些系统,但如果你已经在使用其中一些,这将帮助你评估你需要保护的内容。
让我们通过零信任模型区域,并确定每个区域中与 Azure 机器学习相关的每个服务。
身份管理
Azure 使用Microsoft Entra ID(之前称为Azure Active Directory)进行用户身份验证、授权和基于角色的访问控制(RBAC)来管理 Azure 资源的权限。Microsoft Entra ID 服务是一种身份管理解决方案,它提供了所有控制功能来管理和保护访问,包括条件访问策略、身份保护和特权身份管理等功能。
首先,确定每个用户或组以及他们需要使用服务的访问权限。Azure 机器学习支持多个角色,如数据科学家、开发者、IT 管理员和安全工程师。注意每个用户或组所需的最小访问权限。然后,我们可以调查需要启用哪些 Microsoft Entra ID 功能来减轻访问风险...
数据和数据源
数据是任何机器学习项目最大的组成部分。在 Azure 机器学习中,你可以从许多来源添加数据。识别所有这些来源并启用它们的安全功能。假设你正在将数据导入 Azure 机器学习工作区。在这种情况下,它存储在你工作区连接的 Azure 存储账户中。你必须限制对工作区的访问并确保存储账户的安全。如果你在 Azure 中使用数据源,例如 Azure SQL 服务器或 CosmosDB,这些服务有多个安全措施来限制访问并保护免受数据泄露和数据丢失。确保所有数据在静态存储和传输过程中都进行了加密。Azure 提供了多种加密选项,例如Azure 密钥保管库和Azure 存储服务加密。Azure SQL 数据库也支持多级别加密。另一个需要考虑的方面是备份。确保你有多种恢复数据的选择,以防发生安全事件。
基础设施
Azure 机器学习建立在 Azure 基础设施之上。Azure 机器学习中有四种用于训练或推理的计算类型:计算目标、计算集群、AKS 和附加计算。对于模型的部署,你可以使用 Azure 容器注册库和 Azure 容器。对于附加计算,你可以利用虚拟机、Azure Databricks 服务以及更多。所有这些服务都有自己的安全功能。确保所有服务或基础设施都更新到最新版本。Azure 还提供了一些用于自动化更新和监控的服务。
网络和端点
虚拟网络是 Azure 基础设施服务的一部分。Azure 中的每个服务都是在 Microsoft 网络中部署的,有时也称为Azure 骨干网络。假设你的解决方案不一定需要从公共互联网中可用,但只需要从你的公司办公室到 Azure 服务,例如。在这种情况下,有多种方法可以通过加密和路由虚拟网络与本地基础设施之间的网络流量来保持 Azure 骨干网络上的流量。识别必要的端点,并在可能的情况下限制对工作区的网络访问。你可以使用从虚拟网络、私有链接到 VPN(如 Azure VPN 网关)甚至使用 ExpressRoute 的私有连接的任何东西。如果你已经有了防火墙,如 Azure 防火墙,或任何网络,你可以利用这些服务来保护你的机器学习项目。这也可能适用于其他与 Azure 机器学习一起工作的服务,如数据库。
监控和维护
评估的一部分也是制定监控和维护计划。现在你已经确定了所有服务和你需要启用的功能,你需要回答以下问题:
- 
谁负责出现的每个安全问题?
 - 
应启用哪些通知以及针对哪些服务?
 - 
谁负责响应每个通知?
 
Azure 提供了多种视图和支持工具,用于监控和警报。
AI/ML 应用程序
你可以利用两种类型的应用程序来与 Azure 机器学习一起工作。这些 AI 应用程序使用 Azure 机器学习端点进行预测,或者触发 Azure 机器学习管道进行模型训练或批量预测的应用程序。
对于这两种类型的应用程序,使用安全的编码实践将确保应用程序不会受到外部攻击。技术包括输入验证、错误处理和身份验证机制。使用安全的协议,如 HTTPS 或 SSL/TLS,加密传输中的数据。为了评估应用程序的漏洞,你可以使用安全测试工具和技术,如渗透测试和漏洞扫描,以识别和修复潜在的安全弱点。应用程序也不应暴露或硬编码敏感信息,如连接字符串或端点访问密钥。你可以使用另一个 Azure 服务,Azure 密钥保管库来减轻这一点。触发需要访问数据的管道的应用程序也应持续评估和监控,因为数据集的变化可能会影响模型的准确性。
如你所可能已经意识到的,安全不是一个明确的界限,而是一个迭代的过程。我们需要评估、实施、监控并重复,以确保我们的工作负载在 Azure 中是安全的。我们可能需要利用多个安全特性和建议,并根据我们的需求调整零信任策略。
摘要
在本章中,我们介绍了机器学习生命周期的基本知识以及它如何应用于 Azure 机器学习组件。这种知识不仅对数据科学家和开发者至关重要,而且对需要了解 ML 开发基础知识以确保他们能够保护并监控所有相关服务的 IT 管理员和安全工程师来说也是必不可少的。对于任何想要更熟悉 Azure 机器学习的人来说,你总是可以回来重新创建本书开头所展示的场景,作为跟随本书其余章节中展示的实现和方法的基础。
一起,我们学习了零信任策略是什么以及如何将其应用于 Azure 机器学习组件及其相关服务,以评估需要保护的内容。我们将需要零信任,因为本策略中概述的原则和防御领域与我们在下一章中用于安全实施的相同。现在,既然你已经知道了如何创建所需保护服务的初步评估,在下一章中,我们将了解更多关于对手用来破坏我们系统的方法和技巧。通过学习这些方法,你将更好地装备自己来保护你的机器学习工作负载及其相关系统。
进一步阅读
- 
Azure 机器学习简介: https://learn.microsoft.com/en-us/training/modules/intro-to-azure-ml
 - 
Azure 机器学习 SDK 简介:
learn.microsoft.com/en-us/training/modules/intro-to-azure-machine-learning-service/ - 
使用 Azure 机器学习训练 ML 模型: https://learn.microsoft.com/en-us/training/modules/train-local-model-with-azure-mls/
 - 
零信任和最佳实践框架简介:
learn.microsoft.com/en-us/training/modules/introduction-zero-trust-best-practice-frameworks/ 
第二章:理解最常见的机器学习攻击
当开始为你的项目进行安全加固时,你可以使用许多工具来快速学习安全技巧。其中最好的是MITRE ATT&CK 框架。作为一个全球公认的知识库,它包含了关于各种攻击技术及其缓解措施的有价值信息,这些攻击技术是攻击者用来攻击系统的方式。在本章中,我们将探讨MITRE ATLAS框架。它是从 MITRE ATT&CK 框架中针对机器学习(ML)进行改编的。
本章的目标是让我们熟悉攻击的不同阶段以及对我们系统可能的攻击。这是至关重要的,因为有了这些知识,我们可以理解攻击者的思维方式以及如何保护我们的系统。由于攻击有多个阶段,你会明白为什么应用零信任策略(在上一章中介绍)是保护系统的最有效方法。我们必须永远记住,这是一个持续的过程,因为每天都有新的漏洞和利用被发布。
我们必须始终跟上所有新的信息,MITRE ATLAS 框架将帮助我们做到这一点。最后,在探索 MITRE ATLAS 矩阵之后,我们将涵盖与 Azure 机器学习相关的 Azure 服务以及那些最常受到攻击的服务。
在本章中,我们将涵盖以下主题:
- 
介绍 MITRE ATLAS 矩阵
 - 
理解机器学习和人工智能攻击
 - 
探索涉及机器学习攻击的 Azure 服务
 
到本章结束时,你将更好地理解机器学习攻击及其对机器学习的可能缓解措施。
介绍 MITRE ATLAS 矩阵
MITRE ATT&CK 框架是一个全球公认的知识库和框架。安全专业人士使用它来理解和组织网络威胁环境中的攻击者行为。ATT&CK®(或 ATTACK)代表对抗性策略、技术和常见知识。它本质上是一个目录,列出了攻击者在网络攻击的不同阶段使用的策略、技术和程序(TTPs)。它涵盖了包括初始访问、执行、持久性、权限提升、防御规避、凭证访问、发现、横向移动、收集、数据泄露和影响在内的许多威胁向量。
MITRE ATT&CK 框架将这些技术组织成一个矩阵,根据攻击的各个阶段和它们适用的平台(例如,Windows、macOS 或 Linux)对它们进行分类。矩阵中的每种技术都在 MITRE 知识库中进行了详细描述,包括攻击者通常如何使用它以及我们可以采取的潜在防御措施来检测和预防它。
注意
如果你第一次听说 MITRE ATT&CK®框架,你可以探索 MITRE ATT&CK®知识库,网址为attack.mitre.org/。
(© 2023 MITRE 公司。本作品经 MITRE 公司许可复制和分发。)
该框架已成为广泛采用的行业标准。它被安全团队、安全解决方案供应商和组织使用,以增强他们的威胁情报、开发更有效的安全控制措施,并提高事件响应能力。它使组织能够将他们的防御与实际攻击者的行为对齐,帮助他们主动检测、响应和缓解网络威胁。
尽管非常全面,但 MITRE ATT&CK 框架可能并不涵盖所有已知的攻击方法,但它提供了一个很好的起点。我们将遵循 MITRE ATLAS™框架。ATLAS代表人工智能系统对抗威胁景观,它是一个基于 MITRE ATT&CK 框架的对手战术知识库,包含适用于机器学习(ML)和人工智能(AI)系统的技术。ATLAS 矩阵显示了攻击在各个阶段的进展以及与每个阶段相关的技术。阶段可以在以下图中看到:

图 2.1 – MITRE ATLAS 阶段
虽然阶段看起来是按顺序出现的,并且通常从侦察开始,以影响技术结束,但并非所有阶段和技术都会在攻击中使用。这取决于攻击者的目标和系统架构。
让我们在接下来的章节中理解每个阶段。
侦察
侦察指的是攻击的初始阶段,攻击者收集有关目标 ML 系统的信息。侦察的目标是收集可用于识别潜在漏洞、计划攻击并提高成功机会的情报。信息可以是 ML 技术、研究信息,这些信息可以帮助攻击者获取相关的 ML 工件,并在攻击的下一阶段针对受害者定制攻击。
资源开发
在初始侦察之后,攻击者试图发现他们可以利用的资源来支持他们的最终目标。这个阶段被称为资源开发,通常是在攻击者购买或窃取资源以针对 ML 工件、基础设施、账户或攻击后期可以使用的能力时。
初始访问
在初始访问阶段,攻击者试图访问 ML 系统。这可能包括网络、设备和平台等。如果攻击者在这一步成功,他们就可以在系统中获得一个初步的立足点。
ML 模型访问
在攻击者获得对系统的某种形式的访问后,他们将通过获取对机器学习模型的访问来进一步行动。在机器学习模型访问阶段使用的技术因攻击者可以利用多个访问级别而有所不同。他们可以针对存储数据的数据库或技术,或者用于训练机器学习模型的端点。用于预测或任何其他作为其流程一部分利用机器学习的产品或服务也容易受到攻击。
执行
在执行阶段,攻击者设法在目标系统上运行或嵌入恶意代码或命令,以实现他们的目标。这种策略侧重于攻击者执行其有效载荷或探索网络以窃取更多数据或访问更多系统的行动。可以在此处运行远程访问工具来运行脚本并发现未修补的已知漏洞。
持久化
在持久化阶段,攻击者试图维持他们在前一步骤中获得的任何访问权限。技术包括但不限于提升凭证、切断其他用户的访问权限,以及留下修改后的数据或模型和后门,以便他们在被发现时能够更容易地恢复访问。
防御规避
当然,没有攻击者希望在完成目标之前被发现。攻击者使用防御规避技术来避免检测。规避检测是攻击者可以通过关闭安全功能或软件,如恶意软件检测器来实现的。
发现
发现阶段就像侦察,但来自内部。攻击者试图了解你的机器学习环境。他们试图获取有关系统和内部网络的知识,以便在发起攻击之前扩大目标或获取尽可能多的信息。在这个阶段,攻击者将根据他们的目标了解他们可以或不能控制什么,以及他们还需要做什么。在这里,通常使用本地操作系统工具来收集所需的信息。
收集
在收集阶段,所有调查和信息收集过程都已结束。攻击者试图积极收集数据或机器学习工件。假设他们的目标是简单地破坏服务,那么这个阶段的技术将帮助他们收集从系统中提取所需的一切,在使服务不可用之前。提取是外泄阶段的一部分。
机器学习攻击阶段
对于机器学习来说,数据提取或服务中断可能不是攻击者的唯一目标。在人工智能项目中,可以部署针对机器学习模型的攻击。机器学习攻击阶段技术包括训练代理模型、毒化目标模型以及制作对抗数据以供目标模型使用。其中一些甚至可以在离线状态下执行,因此在某些情况下可能难以缓解。
外泄
提取阶段将是数据或证据将被提取的地方。攻击者试图窃取(提取)机器学习证据或使用这些信息进行未来的操作。在这种情况下,最被针对的来源是软件仓库、容器注册表、模型仓库和对象存储。这是一个具有挑战性的过程,因为数据需要离开网络,从而产生可以被检测到的流量。
影响
影响阶段包括破坏或损害系统完整性的技术,以及可能操纵业务流程的技术。攻击者可以针对数据并对其进行篡改或破坏。更糟糕的是,数据可能略有变化;不足以在系统中引起怀疑,但足以以有助于攻击者的最终目标或为机密性泄露提供掩护的方式破坏服务。
如您所见,这些阶段形成了一个攻击者可能采取的逻辑路径来攻击您的系统。在现实中,情况可能并非如此,因为流程很大程度上取决于他们的目标。让我们看看每个阶段使用的技术以及它们可能对我们系统造成的影响的例子。
理解机器学习和人工智能攻击
前一节中提到的所有阶段都使用多种技术来实现每个目标。攻击者可以使用这些技术单独使用、顺序使用或组合使用。一些攻击可以重复使用,并在不同的阶段用于不同的目的。这完全取决于攻击者的目标,这就是为什么通过应用零信任原则并始终验证系统的所有级别,我们更有可能保护我们的服务,或者至少在攻击者有时间对系统造成任何重大损害之前检测到事件。
在这里,我们将描述每个阶段最常见的 AI 和机器学习攻击。我们还将讨论来自 MITRE ATT&CK 框架的攻击,尽管它们不是针对机器学习的,但可以用来访问包含机器学习功能等的系统。虽然我们将概述每种攻击的可能缓解措施,但我们将在以下章节中更详细地介绍实现方法。
让我们探索每个阶段的攻击技术。
侦察技术
有五种侦察技术旨在收集有关系统的信息,如下图所示:

图 2.2 – 侦察技术
让我们在以下章节中了解每种技术。
搜索受害者的公开信息
假设该组织在生产中使用基于额外专有数据的开源模型架构,或者这些架构处于研究阶段。在这种情况下,他们可能会在公告或新闻稿中发布系统细节。尽管这些内容不是技术性的,但它们可能包含有关其模型发展的详细信息,并有助于构建更现实的代理模型。为了减轻这种情况,在宣布交易或合作时,限制分享有关公司系统、软件栈或用于开发系统的框架的信息。
搜索受害者拥有的网站和应用存储库
公司网站可能公开了很多信息,包括部门/分部的名称、物理位置以及关于关键员工(如姓名、角色和联系方式)的数据。这些网站还可能包含显示业务运营细节和关系的资料。对于公司员工发布的论文或技术博客也是如此。员工也可能容易受到社会工程学攻击,攻击者冒充其他员工以获取公司信息。确保你指示员工不要分享他们正在工作的项目信息——即使他们不是项目成员——并在个人博客或社交媒体上匿名分享他们分享的信息。
最后,机器学习应用可能可在移动商店中找到,如 Google Play、iOS 应用商店、macOS 应用商店和 Microsoft Store。攻击者可能会尝试扫描和分析应用程序以查找与机器学习相关的组件或端点。尽可能混淆应用程序代码,并在信息被截获时确保保护端点。
搜索公开可用的对抗性漏洞分析
一旦确定了技术,攻击者将研究常见的系统、模型或算法漏洞,以查看他们是否可以使用现有研究来实施攻击。已识别的漏洞有公开可用的实现,这使得攻击者更容易获得系统的初始访问权限并有效规划攻击。
活动扫描
活动扫描不仅仅是简单的侦察或信息收集。攻击者正在积极探测系统以识别入口点或收集更多可操作的信息。他们也可能试图确定收集到的信息是否有效。
资源开发技术
在这个阶段,通常有六种技术利用侦察阶段收集到的信息:

图 2.3 – 资源开发技术
获取公开的机器学习工件
一旦攻击者确定了系统的某些细节,这可以帮助他们发起创建代理机器学习模型或直接制作对抗性数据的攻击,这些是我们将在本章后面讨论的攻击技术。这些工件包括用于训练模型的软件栈、算法、模型部署以及训练和测试数据集。这些工件也可以在开发或测试环境中。假设它们包含生产模型使用的某些逻辑、算法或技术,那么它们也可能危害生产环境。确保您同时保护开发环境和生产环境。访问这些工件可能需要访问密钥或经过身份验证的请求,您可能会认为这已经足够,但事实并非如此。您需要确保您为不同的环境区分访问方法,并定期更换访问密钥,这样攻击者就不能使用初始访问阶段的技术来获取对多个环境的访问权限。
获取能力
在这里,攻击者可能会搜索并获取支持其操作的软件工具。软件工具可以是恶意的,也可以被重新用于恶意目的。这里可以使用任何软件,并且这个工具或软件不需要是机器学习启用的。例如,攻击者可以使用虚拟摄像头为视频流添加逼真的效果,以拦截进入系统的实际摄像头流,并使用深度伪造技术获取访问权限。
深度伪造技术
深度伪造技术是一种利用深度学习技术操纵或生成人物视频、图像和音频的方法。该技术使用人物的现有音频、视频或图像来生成与该人物相似的新内容。这项技术非常强大,生成的内容与真实录制的视频或音频难以区分,因此可以用于各种恶意目的,如虚假新闻、未经授权访问使用生物识别技术的系统以及金融欺诈。
开发对抗性机器学习攻击能力
一旦攻击者获得了对系统的访问权限,或者至少获得了有关系统的信息,他们可能会选择开发自己的攻击或实施公开研究中的想法。以现有库作为起点的公开研究论文通常有很好的文档记录,并解释了它们利用哪些漏洞。您可以使用这些信息来保护您的系统,因此不公开分享信息至关重要,这样攻击者就难以针对您的系统定制攻击。
获取基础设施
对手可能会购买或租赁在整个操作过程中将使用的基础设施。这些基础设施可以包括物理服务器或云服务器的域名、设备或服务。根据实施情况,对手将使您难以在您的网络中发现他们的流量,并且他们将试图融入其中。他们可能会使用可以非常快速提供和关闭的基础设施。这意味着即使您发现了一个可疑的端点并将其阻止,这并不意味着您就安全了,因为对手可能会提供新的基础设施并再次尝试。这就是为什么始终遵循关于安全的最佳行业实践来准备应对任何攻击至关重要。
发布受毒化的数据集和毒化训练数据
在机器学习(ML)方面,一切都是基于数据的。毒化训练数据将改变算法的结果和训练模型。他们可以引入难以检测到的漏洞。对手可能会毒化训练数据并在公共位置发布。这可能是一份数据或开源数据集的不同版本。始终验证您用于训练或更新模型的任何开源机器学习(ML)工具的来源,以防止受毒化的数据集。远离公共数据不是您可以做的唯一事情,因为数据可以通过机器学习供应链攻击被引入您的系统,我们将在本章后面详细说明。始终验证数据源中的数据是否未发生变化;如果可能,不要加密数据或将数据源设置为只读或不可变。
建立账户
对手可能会创建许多账户,他们可以使用这些账户针对您的系统并获取他们需要的资源。他们还可能冒充您组织中的某个人,比如员工,并利用这一点来获取对您系统的访问权限。始终验证您在讨论项目时与谁交谈,并相应地培训您的员工。例如,如果您在 LinkedIn 上收到一条来自同事的消息,要求您与他们分享访问权限或帮他们重置密码,请始终验证他们的身份。即使他们使用公司电子邮件,如果这不是重置凭据或请求访问的正确流程,请直接指导他们遵循适当的流程,因为他们的账户可能已被入侵。您可能无意中将有关机器学习端点或训练数据的访问信息与第三方共享。
初始访问技术
对手可以使用以下技术来获取系统访问权限:

图 2.4 – 初始访问技术
让我们在以下各节中了解每种技术。
机器学习供应链攻击
使用机器学习供应链破坏技术,攻击者试图通过破坏机器学习供应链的独特部分来获取访问权限。这通常包括用于训练模型的硬件,如 GPU 硬件、数据、软件堆栈的部分或模型本身。当涉及到硬件时,始终要验证您拥有最新的更新和补丁。当使用开源库时,始终检查那些算法的实现。任何对库的更新都应该检查是否存在漏洞或恶意代码。数据可能会被毒化,尤其是公共数据,在标记阶段,私有数据集也可能受到破坏。如果您正在使用第三方服务来标记您的数据,请确保有防止数据毒化的流程。此外,保留数据集的版本以比较任何更改并尽可能识别问题。如果您正在使用 Azure 机器学习,一些功能可以帮助您做到这一点。最后,如果您正在使用开源模型并使用您自己的私有数据集对其进行微调,请始终验证模型或库的来源,尤其是在更新发布时。每次您整合新的模型或执行未知代码时,都存在其可能感染传统恶意软件的可能性。
有效账户
在这种情况下,攻击者可能从现有账户或 API 访问密钥中获取有效凭证。特别是在使用 Azure 机器学习时,泄露或被盗的凭证可能提供对工件访问权限,并允许攻击者对其进行破坏。我们应该担心两个级别的访问权限。第一个是访问训练模型或管道的用户凭证和用户账户,第二个是推理模型或管道的 API 密钥。
避免机器学习模型
并非所有攻击都是针对您的机器学习项目的。攻击者可以发起精心设计的对抗性数据攻击,以防止机器学习模型正确识别数据内容。这种技术会干扰任何依赖于机器学习的任务。这些任务或流程可以是,例如,基于机器学习的恶意软件检测软件、网络扫描软件或保护系统免受传统网络攻击的杀毒软件。对此技术的缓解措施包括对模型进行加固,使其对特定输入、行为或异常查询具有鲁棒性,或者使用模型集成进行推理以增加鲁棒性,因为攻击可能对一种模型类型有效,而对另一种模型类型无效。
利用面向公众的应用程序
虽然 Azure 为其服务提供了许多安全功能,并符合多个行业标准协议,但从机器学习到数据库、面向公众的应用程序和互联网可访问的端点(如 Web 服务器)的保护责任落在客户身上。因此,在保护您的机器学习资产时,您必须考虑使用您模型的所有相关服务。在这本书中,我们将讨论许多与机器学习无关的安全实践,仅仅是因为它们适用于使用机器学习环境的相关服务,例如网络和应用。
机器学习模型访问技术
有四种技术可以用来访问您的机器学习模型:

图 2.5 – 机器学习模型访问技术
让我们回顾一下每种机器学习模型访问技术。
机器学习模型推理 API 访问
机器学习模型推理 API 访问技术指的是对推理 API 的合法访问。创建模型的目标是进行预测。通常情况下,这些预测是从网络应用程序中利用的。实现这一目标的方法是将模型发布为 Web API,以便从服务中使用。这个 API 可以为攻击者提供有关模型类型或数据的详细信息。
通常,模型会重新训练以基于输入学习。这意味着如果您正在使用生产环境根据实际使用情况重新训练和改进您的模型,请确保有一个审批流程来检查来自公共端点的数据。否则,攻击者只需使用推理 API 就可以向系统中引入虚假数据。
机器学习产品或服务
即使您的 API 不是公开的,使用它的服务仍然包含有关模型及其数据的一些信息。一个可以访问推理端点的应用程序仍然需要向其发送一些数据,这可能会在日志或元数据中泄露机器学习模型的详细信息。劫持应用程序会打开机器学习服务,使其容易受到多种攻击。
物理环境访问
攻击不仅仅是数字上的。假设模型或与模型交互的应用程序以某种方式使用现实世界的数据。在这种情况下,攻击者可以通过访问数据收集的环境来影响模型。例如,如果您有一个通过访问相机流并对其进行投毒来从传感器或摄像头中流式传输数据的应用程序,攻击者可以影响模型。确保当您使用传感器时,它们在与任何形式的系统通信时都得到适当的保护,并且硬件中没有单点故障。
完整机器学习模型访问
有时,尽管将模型放在集中式系统中并在需要实时预测时查询它更为安全,但这并不总是可持续或高效的。你可能会有上传或重新打包模型移动版本并将其添加到边缘设备(如传感器或移动设备)的诱惑。虽然这可能会提高性能并提供更快的预测,但这会增加攻击面。如果可能的话,考虑将模型上传到云中,并使用单一访问点以减少攻击面。
执行技术
有两种执行技术可用,这两种技术都依赖于用户或工具执行的特定操作或脚本:

图 2.6 – 执行技术
让我们在接下来的部分中探讨这些技术的每一个。
用户执行
攻击者通常会依赖合法用户采取的特定操作来获取执行权限。系统用户可能无意中执行了由机器学习供应链妥协技术或社会工程学引入的不安全代码。为了减轻这种风险,应培训用户不要打开来自未知来源的可疑或恶意链接或文档。培训的一部分也应包括检查整个机器学习过程中使用的机器学习工件,因为这些也可能被毒化。始终检查文件的校验和或来源,并验证其安全性以及是否未发生变化。
命令和脚本解释器
攻击者可能使用命令和脚本解释器在目标系统中执行命令。这些接口提供了许多与系统交互的方式,并且是不同技术的标准功能。根据操作系统,包含了一些工具。例如,在 Windows 中,Windows 命令外壳和 PowerShell 可以被利用。还有 Python 等编程语言的解释器。命令和脚本可以嵌入到作为文档或从受毒化的来源下载的目标系统负载中。也可以使用远程服务。
持久化技术
有两种持久化技术可用,其中一种我们在资源开发部分已经讨论过。毒化训练数据技术可以用来嵌入漏洞或插入后门触发器。根据目标,这可以是资源开发或持久化技术:

图 2.7 – 持久化技术
后门机器学习模型
攻击者可以通过其他技术,如毒化训练数据技术,将后门引入基于机器学习(ML)的模型。包含后门的模型通常按预期工作,但在被与攻击者特定请求相关的输入触发时会产生不同的输出。这种技术为攻击者提供了系统上的持久性工件。后门可以是针对攻击者输入定制的模型响应,或者调用注入的有效载荷,绕过模型并返回不同的结果集。
防御规避技术
我们已经讨论过的唯一一种防御规避技术是规避机器学习技术。它也可以用作初始访问技术,一旦获得初始访问权限,攻击者就不会被任何可能使用机器学习的其他软件检测到,因为它会中断其进程。

图 2.8 – 防御规避技术
发现技术
有三种发现技术,它们都旨在获取更多关于模型、其本体、其家族或其工件的信息:

图 2.9 – 发现技术
让我们在接下来的章节中解释这些技术。
发现机器学习模型本体
要发现机器学习模型输出的本体,攻击者可以分析模型可以接受的输入对象类型。模型的本体也可以在文档或配置文件中找到。为了减轻这种影响,您可以尝试混淆模型的输出并限制用户对模型发出的请求数量。通常,攻击者必须创建大量请求,以便模型产生多个输出,并从一系列结果中获取有用的信息。
发现机器学习模型家族
攻击者可能使用响应和输出的示例来发现模型的通用家族。确保模型的家族不是公开信息,并且不能通过模型的输入和输出轻易猜测。被动机器学习输出混淆可以用来减轻这种情况,并限制用户或应用程序在特定时间内对模型发出的请求数量。您能做的任何限制模型知识的事情都会使攻击者更难针对您的特定技术或模型家族定制攻击。
发现机器学习工件
在任何时刻,攻击者都会试图发现你在模型中使用的是私有或公共工件。这个过程通常从资源开发阶段开始,但在这个阶段,我们更关注私有 ML 工件。为了减轻这种情况,收集并保护任何工件,例如软件栈、测试和训练数据、数据管理系统、容器注册表和软件存储库。尽可能对敏感信息和系统进行加密。Azure 不仅提供数据加密管理,还提供整个服务(如 Azure 存储账户)的加密管理。
收集技术
在收集阶段,我们有三种专注于数据收集的技术:

图 2.10 – 收集技术
机器学习工件收集
一旦识别出工件,攻击者可能会立即收集任何有用的数据或公司信息以进行泄露。假设攻击者的目标不是破坏服务,而是通过使用你的模型和数据集来收集信息,例如专有数据。在这种情况下,攻击者将尽可能多地获取 ML 工件。在静态和传输中的敏感信息加密可以在一定程度上减轻这种情况,因为即使攻击者收集了数据,他们也无法读取或使用它。
来自信息存储库的数据
机器学习数据并不总是存储在数据库中或用作数据集。机器学习项目通常需要协作和规划。信息也可以存储在多个信息存储库中,并可以挖掘以获取有价值的信息。信息存储库包括文档共享服务或项目管理系统,如 SharePoint、Confluence 和 Jira。为了减轻这种技术,确保用户接受过培训并被告知不要在项目管理软件上共享模型端点或项目信息。关于服务的文档也应得到保护,并且仅通过安全渠道与需要拥有该信息的人员共享。
来自本地系统的数据
任何存储在任何本地系统中的数据都必须得到保护。在获得网络访问权限后,攻击者可能会搜索文件系统配置文件和本地数据集以提取数据,特别是像 SSH 密钥、加密密钥和连接信息这样的敏感数据。
机器学习攻击阶段技术
在数据收集之后,对手会继续进行泄露,以便将数据从系统中提取出来。但对于机器学习来说,有一个不同的阶段。我们还需要考虑机器学习攻击阶段。根据对手的目的,他们可能会利用他们的知识,通过使用针对机器学习模型的技术来破坏服务,在他们尝试提取机器学习数据之前。在这里,我们可以识别出四种技术,其中之一是后门机器学习模型技术,它也可以用作持久技术。我们已经在后门机器学习模型部分讨论过它,所以在这里,我们将讨论其余部分:

图 2.11 – 机器学习攻击阶段技术
创建一个代理机器学习模型
对手可能会创建一个机器学习模型作为目标模型的代理。代理模型可以以多种方式使用。对手可能会从类似的数据集中训练模型,使用可用的预训练模型,或者从他们在前期阶段收集到的机器学习工件中训练一个代理模型。然后,代理模型可以用来复制受害者的推理 API 或复制访问组织内部另一个模型。
验证攻击
在攻击发起之前,对手可能需要验证他们开发的策略是否有效。这意味着获取一个离线或复制的模型,并尝试他们计划中的技术。这给了他们信心,认为攻击是有效的。然后,他们可以自由地将它部署在物理环境中,或者保留它并在以后使用。当对手收集了足够的信息,并且有能力在一个复制的系统中验证攻击,该系统反映了受害者组织系统时,就出现了一个新的问题。实际的攻击不会在受害者的系统中触发任何显著的流量,这使得使用这种技术可能无法检测到。
精心制作对抗数据
在规避机器学习模型部分已经提到的精心制作的对抗数据技术需要收集多个阶段的信息和工件。通常结果是数据中毒。根据对手的目标,输入已经被修改,这导致了诸如预测失误、误分类或最大化系统能耗等影响。这种攻击在很大程度上依赖于对手对系统的了解。你可以使用许多不同的算法来开发对抗数据攻击,例如白盒优化、黑盒优化、黑盒迁移或手动修改。
泄露技术
数据通常在泄露阶段提取,这涉及到适用于机器学习的两种技术:

图 2.12 – 泄露技术
通过机器学习推理 API 进行泄露
如果机器学习推理 API 存在漏洞,可能会导致训练、模型本身或私有知识产权的私人信息的泄露。如果模型推理 API 需要公开,请确保尽可能安全地保护它,并限制用户在生产环境中可以执行的查询数量,以防止他们找出获取该信息的不同方法。
通过网络手段的数据外泄
当然,机器学习项目并不是这里唯一容易受到攻击的东西。根据环境和系统的整体安全性,攻击者可能会选择传统的数据外泄技术从您的网络中窃取数据。数据外泄可以通过仅在网络中传输数据、通过物理介质(如可移动或云驱动器)传输数据,或者通过互联网传输到网络服务、代码仓库或直接传输到云存储来实现。
影响技术
有七种影响技术可供攻击者操纵或中断您的机器学习系统或数据的服务。我们已经讨论了逃避机器学习模型技术。让我们看看这个阶段的其余技术:

图 2.13 – 影响技术
拒绝机器学习服务
拒绝服务攻击针对机器学习系统进行多次请求以破坏服务。由于端点资源有限,通过拒绝服务攻击,攻击者可以创建瓶颈,这可能是昂贵的,并破坏服务,使其无法处理其他请求,从而使服务变得无用。您可以通过部署第三方 Azure 服务来采取一些措施来减轻这些攻击,但第一步可能是限制机器学习模型请求的数量。
使用干扰数据对垃圾邮件机器学习系统进行攻击
这种技术要求攻击者知道系统可能使用数据来进行预测以重新训练服务。向系统发送大量无意义的请求和数据会增加预测或错误预测的数量。这将导致分析师或数据科学家在改进系统时浪费大量时间审查和纠正那些错误的推断。我们将讨论 Azure 机器学习的一些功能来减轻这种情况。然而,这里明显的选择是限制机器学习模型查询的数量或阻止来自多次发送无关请求的可疑端点的流量。
侵蚀机器学习模型完整性
这种技术结合了使用数据和对抗性数据来降低模型性能的攻击。这不必是一次性事件。攻击可以持续相当长的时间,因此机器学习系统会被侵蚀,预测不准确。这种攻击可能更难检测,因为它没有破坏服务的目标;它想要在长时间内微妙地改变模型,使其不可检测。
收割成本
系统资源有限,通常,当有人发起多个请求,向系统发送大量数据时,会中断服务。使用云计算,基础设施不必是有限的资源。云系统可以扩展以适应增加的流量,但与此同时,自动扩展也会影响这些资源的成本。限制每个应用程序的查询次数或检测这类攻击可以减轻这种技术,它针对的是受害者组织的运营成本。
机器学习知识产权盗窃
有时目标是模型本身。假设您提供机器学习作为服务。现在,有人已经成功提取了该模型,他们可以免费无限使用您的服务。这可能会产生重大影响,因为知识产权不安全,可能会对您的组织造成经济损失。对此技术的缓解措施包括控制对您的模型和静态数据的访问、确保您的模型和传输中的数据安全,以及在可能的情况下加密服务和数据。
系统滥用以产生外部影响
如果攻击者无法提取模型,他们仍然可以攻击系统并用于自己的目的。劫持系统并使用自己的数据来获取结果或预测可能是例子之一。通过访问监控和保护财务数据的系统,攻击者可能能够通过那些否则会被标记为无效的发票。结果,这阻止了系统防止欺诈。
案例研究和示例
如需更多案例研究,您可以查看本章的进一步阅读部分,或访问完整的知识库atlas.mitre.org/。
在了解了攻击中使用的通用技术类型之后,让我们探索在攻击情况下可能受到影响的具体服务。
探索涉及机器学习攻击的 Azure 服务
正如您所看到的,攻击是多层次的,并且主要基于攻击者的目标。由于我们不知道那是什么,我们可以部署多种缓解技术来减轻影响。由于 Azure 机器学习基于 Azure 平台,我们可以部署众多工具来检测事件,并通过自动化,平台将在我们甚至不知道发生任何事情之前就部署缓解步骤。尽管我们专注于机器学习攻击,但针对相关系统、虚拟机和数据库的攻击仍然是一个问题。让我们看看可以与Azure 机器学习一起使用的相关服务。
访问
Microsoft Entra ID通常负责 Azure 中的访问。Microsoft Entra ID 是 Microsoft 的基于云的身份和访问管理服务。它提供了一系列功能和能力来管理用户身份并保护 Azure 云和其他 Microsoft 服务中的各种资源的安全访问。除了身份和访问管理之外,它还提供联合、单点登录(SSO)、开发者平台以及安全和治理的各种功能。不同的服务也可能提供不同的认证方式,例如通过服务凭证、访问密钥和共享访问签名。我们将在接下来的章节中专注于学习如何保护并减轻所有这些服务的风险。
数据
机器学习基于数据。Azure 机器学习支持多种数据源,具体包括Azure Blob和文件存储、Azure Data Lake、Azure SQL 数据库、Azure PostgreSQL数据库和Azure MySQL数据库,每个都具备独立的安全和监控功能。我们将在接下来的章节中探讨它们的安全和监控功能,包括静态加密和传输加密。
网络
尽管与 Azure 机器学习没有直接关联,但许多攻击是通过渗透本地或云网络发生的。在接下来的章节中,我们将讨论使用网络服务来保护服务。这些包括虚拟网络、网络安全组、Azure 防火墙以及混合解决方案,如VPN 网关和ExpressRoute。服务端点和私有端点功能也可以用于提高安全性和隔离性。
Azure 虚拟网络(VNet)是 Microsoft Azure 网络架构的基本组件。它是一个逻辑上隔离的网络环境,允许您安全地连接和控制 Azure 资源,包括虚拟机(VMs)、Azure App Service和数据库。
Azure VNets 通常与网络安全组(NSGs)一起工作,这些组提供细粒度的网络安全,并充当基本防火墙,允许您定义入站和出站流量规则以过滤和控制网络流量。NSGs 不维护状态,但它是确保网络流量安全的第一步。
Azure 防火墙是 Microsoft Azure 提供的一种基于云的网络安全服务。它为 VNets 提供集中式、高级别的网络安全和保护。Azure 防火墙充当一个完全状态化的网络流量过滤和路由解决方案,允许您控制并监控 Azure 资源的入站和出站流量。
Azure VPN 网关是一个网络组件,它允许本地网络和 VNets 之间建立安全连接。它提供了一种在公共互联网上建立虚拟专用网络(VPN)隧道的方法,确保安全通信并将您的本地网络扩展到 Azure 云中。
如果 VPN 网关不足以满足需求,您可以使用 Azure ExpressRoute。这是一项 Microsoft Azure 服务,它允许您的本地网络与 Azure 之间建立私有和专用的网络连接。它提供可靠、高吞吐量、低延迟的连接,绕过公共互联网。
服务端点和私有端点是 Azure 中的两个功能,它们提供了安全且私有的连接到 Azure 服务。服务端点允许您将您的 VNet 扩展到 Azure 服务的后端,通过 Azure 骨干网络安全访问该服务。私有端点允许您使用私有 IP 地址从您的 VNet 私密访问 Azure 服务。
应用程序
应用程序可以托管在 Azure 内部和外部多个服务中。大多数机器学习服务旨在由应用程序使用,这是我们实施安全时需要考虑的另一个组件。在这本书中,我们将学习如何保护托管应用程序的服务,例如 Azure App Service、VM 或容器服务,但我们还将分析一些开发软件应用程序的最佳实践。当然,由于应用程序安全实施高度依赖于所使用的编程语言和库,我们将解释缓解技术(如 SQL 注入或跨站脚本)的高级实现。
计算
机器学习高度依赖于计算资源。您可以在工作区中创建多个计算目标用于训练或托管推理模型。目标可以是本地计算、Azure 机器学习计算、Azure Databricks、HDInsight、Synapse Spark 池、Azure Kubernetes 服务(AKS)和 Azure VM。这些计算目标提供了运行大规模机器学习工作负载所需资源和基础设施。它们必须得到适当的保护和监控,因为它们是机器学习的关键部分。
本地计算允许您使用您的本地机器或本地基础设施作为计算目标。当您不需要大规模资源时,这对于开发和实验非常有用。
Azure 机器学习计算是由 Azure 机器学习提供的一个托管计算集群。它根据您的工作负载需求动态配置和扩展计算资源。它支持 CPU 和 GPU 实例,并针对大规模运行训练作业进行了优化。
Azure Databricks 是一个基于 Apache Spark 的分析平台,它与 Azure 机器学习集成。您可以使用 Azure Databricks 集群作为训练和部署机器学习模型的计算目标,利用 Spark 的分布式计算能力。如果您仍然想使用 Spark 但不使用 Databricks,您可以使用 Azure Synapse Spark 池。
Azure HDInsight 也可以在 Azure 机器学习中设置为一个计算目标。利用其分布式处理能力,您可以在 HDInsight 集群上执行机器学习任务。
AKS 是 Azure 中的托管 Kubernetes 服务。您可以在 AKS 上部署您的机器学习工作负载作为容器化应用程序,并使用它们作为训练和部署模型的计算目标。AKS 为运行分布式训练和推理工作负载提供了可伸缩性和灵活性。
Azure VM 实例也可以作为计算目标。您可以使用所需的规格配置 VM,并使用它们进行训练和部署机器学习模型。
Azure Machine Learning
所有之前提到的服务都与Azure Machine Learning 工作区相关或可以与其一起使用。工作区是 Azure Machine Learning 的主要管理点;然而,工作区本身可以用于安全或隔离,例如,如果需要为不同场景创建多个工作区。工作区提供了多个功能,用于监控和组织资产,如模型和数据集版本控制以及数据漂移。我们还将探讨算法、数据和模型中的安全功能,例如公平性、数据匿名化等。
现在,我们已经了解了需要保护的与 Azure Machine Learning 相关的服务。它们可能不是唯一的——这取决于您的系统架构——但它们是您安全之旅的一个很好的开始。
摘要
我们需要准备许多攻击,并且每天都会发现漏洞,因此我们必须遵循一个框架,帮助我们跟上当前漏洞及其缓解措施。MITRE ATLAS 框架是一个很好的起点,因为它适用于机器学习。我们需要了解 12 个阶段以及每个阶段的多项技术,以保护我们的机器学习资产。然而,由于机器学习资产与众多其他系统一起工作,接下来章节中我们将看到的实现将包括确保 Azure Machine Learning 及其所有相关服务的安全性。
但在深入这些实现之前,在下一章中,我们将学习必须遵守的安全行业合规标准以及如何与负责任的 AI 开发实践一起实施合规控制。
进一步阅读
- 
DeepPayload:通过神经负载注入对深度学习模型的黑盒后门攻击:
arxiv.org/abs/2101.06896 - 
黑盒机器翻译系统的模仿攻击和防御:
arxiv.org/abs/2004.15015 - 
解释和利用对抗性示例:
arxiv.org/abs/1412.6572 
第三章:规划合规性
当与人工智能(AI)系统合作时,当我们谈论合规性时,有几个事情会浮现在脑海中。首先是遵守通常由政府、行业协会或其他监管机构设定的法律、法规和标准的过程,其次是伦理考量。
在本章中,我们将学习如何根据微软的六个负责任 AI 原则,以道德和负责任的方式开发机器学习(ML)模型,以及如何使用负责任 AI 工具将这些原则转化为负责任的开发策略。然后,我们将概述 Azure 机器学习行业公认的监管合规标准,以及如何通过使用 Azure 策略来执行这些标准。这些标准不仅是微软的基准,也是全球接受的框架,例如国家标准与技术研究院风险管理框架(NIST RMF)。
在本章中,我们将涵盖以下主要主题:
- 
探索负责任 AI 开发
 - 
Azure 机器学习中的 Azure 策略合规性监管
 - 
合规审计和报告
 - 
Azure 中的合规自动化
 
到本章结束时,你不仅将熟悉监管和安全合规标准,还将学习如何处理审计、报告和自动化。
探索负责任 AI 开发
随着 AI 系统越来越受欢迎并被世界各地的人们使用,它引发了关于这些系统如何道德执行的问题。例如,OpenAI 的 ChatGPT 模型的公开发布就是一个明显的例子。到目前为止,每个人都几乎都使用过它,并且它产生了一些有趣的反应。许多人对此新产品印象深刻,兴奋,甚至爱上了它,因为它可以帮助他们在工作和日常生活中更加高效。其他人则对此强大模型的前景感到担忧,甚至害怕它如何非常容易地模仿人类行为。
技术的重点始终是解决问题。我们正处于一场新的技术革命之中,AI 有能力迅速改善人们的生活;然而,这并不意味着其中没有危险。每个使用和创建高级 AI 系统的个人组织都需要为道德和负责任 AI 开发创建一个治理体系。
在接下来的章节中,我们将探讨负责任 AI 原则,并学习如何将它们应用到我们的组织中。
负责任 AI 原则
在这本书中,我们将遵循微软的负责任 AI方法,该方法基于六个伦理原则——公平性、可靠性及安全性、隐私和安全、包容性、透明度和问责制。
我们将把这六个原则转化为更具体的治理政策,在接下来的章节中,我们将探讨我们可以使用的工具来维护我们的系统中的治理和合规性。以下是这些原则的描述:

图 3.1 – 负责任的 AI 原则
让我们在接下来的部分中讨论这些内容。
公平性
AI 赋能的系统和应用应该公平地对待所有人。任何处于开发或生产中的系统都应避免不公平的偏见,并促进所有使用该系统的人的平等待遇和机会。这包括无偏见的决策。我们需要确保 AI 系统不会基于种族、性别、年龄或残疾等属性歧视个人或群体。因此,在收集数据时,我们需要确保每个类别都有广泛的价值范围,并且敏感标签不会影响预测。例如,当我们需要将敏感数据包含在预测数据集中时,我们也应小心不要持续现有的不平等或数据中的意外相关性。
缓解措施包括 ML 流程的每个步骤的技术,但主要是在数据预处理阶段。例如,如果我们正在训练一个应用程序来批准贷款,我们应尽可能排除所有敏感特征,因为人口统计数据可能会持续偏见。有公平性库可用于识别和防止偏见,例如我们将在下一章中看到的 Fairlearn 库。
可靠性和安全性
AI 系统不仅应该对用户可靠和安全,而且在开发过程中也应该如此。这个原则侧重于确保 AI 系统是可靠的、按预期运行并减轻潜在风险。安全性和可靠性与系统的许多方面及其流程有关。
一个系统必须具有可靠的表现并交付可靠准确的预测。我们应该努力最小化错误、不一致性或意外行为。服务中断,无论大小,都可能影响其他系统。机器学习模型通常是其他流程的一部分,因此一个分析和预测以检测网络安全威胁的模型应该有安全措施,以确保其不会失败。
我们应该始终关注可能导致个人或社会产生负面后果的风险。我们确保系统安全性的程度在很大程度上取决于系统的目的。例如,对于使用自动化生成来产生质量不佳的图像而不造成任何伤害的娱乐应用来说,这是可以接受的,但同样的标准并不适用于自动驾驶汽车或手术机器人臂等关键系统。最后,为了使系统可靠和安全,它需要保持最新并持续监控,以确保它维持或提高其建立的标准。这意味着生产过程中应该有人工交互,或者如果系统从反馈中学习,应该有一个审批流程。
隐私和安全
任何 AI 系统或 ML 启用应用程序与其他基于数据的应用程序没有区别。由于存在攻击技术会使训练模型泄露用于训练它的数据,因此隐私和安全甚至更加重要。
在我们开始之前,我们需要考虑数据法规,以便我们可以决定在哪里存储数据。当与 Azure 合作时,你需要了解全球数据中心区域,以确保你的数据受到适当的法规保护,并遵守你拥有的任何合规要求。当你创建你的 Azure 机器学习环境时,你可以选择你偏好的区域。
第二部分是保护数据和系统。在这本书的整个过程中,我们将看到实施安全性和隐私的最佳实践,以确保我们托管在 Azure 上的工作负载的安全性和隐私。始终记住,在保护你的 ML 模型及其数据和算法时,你还必须确保相关的系统也是安全的,以防止对手使用横向访问技术来获取你的资源。
除了安全问题之外,最大的问题也是隐私问题,尤其是在金融或医疗保健等领域的。由于机器学习基于数据,我们需要在我们的模型中使用绝对最少的个人可识别信息(PII)。我们可以使用几种技术来匿名化我们的数据和库,以帮助最小化识别,甚至从下一章中我们将看到的 SmartNoise SDK 等汇总结果中也是如此。
包容性
一个 AI 系统应该具有包容性,并促进所有个人和社区平等地获得、参与和受益。在开发阶段,拥有多样化的观点和经验尤为重要。当你包括来自不同背景和人口统计的广泛利益相关者和专家时,你确保 AI 系统能够反映不同社区的需求和价值观。
可访问性也是一个重要的考虑因素,我不仅仅是在谈论残疾。当然,我们需要整合各种可访问性需求的功能,例如支持屏幕阅读器、键盘导航和其他辅助技术。此外,我们还需要考虑用户体验(UX)和可用性。如果你的目标受众包括整天都在移动的销售人员,添加语音功能对于包容性也很重要。
通过在人工智能开发中使用以用户为中心的方法,积极寻求反馈,并与一个专注于理解和解决需求的多元化团队合作,你可以确信你正在积极地为社会、经济和文化包容性做出贡献。
透明度
每个人工智能系统在各个方面都应该是可理解的。这并不意味着公开分享其创建的所有信息,因为,正如我们在上一章中看到的,这可能是危险的,对手可以利用这些信息来破坏系统。然而,用户应该清楚了解系统的工作原理、其局限性以及可能对个人和社会产生的影响。
可解释性是人工智能和机器学习的重要组成部分。机器学习模型,尤其是那些涉及复杂决策预测的模型,应该提供关于哪些特征影响预测以及影响程度的见解。有许多库可用,我们将在下一章中看到一些实现。
人工智能披露的使用同样至关重要。大多数时候,模型作为另一个系统或流程的一部分被部署。用户需要知道系统何时使用人工智能自动化,何时由人工处理,以避免任何混淆。明确沟通系统的能力和局限性有助于管理用户期望并避免潜在误解。
责任制
责任制补充了其他五个原则,并且是任何系统的一个基本方面。必须明确所有参与机器学习过程的人的角色和责任。这包括为机器模型和相关服务的开发、部署和持续监控分配责任。我们需要具备适应性,因为人工智能系统会持续从反馈中学习,并且我们需要准备好承认和解决由我们模型预测导致的任何事件。
遵守适用于 AI 开发和使用的相关法律、法规和伦理指南同样重要,因为开发该技术的组织通常对任何问题负有责任。遵守合规和法律要求将帮助我们最大限度地减少任何潜在的未来问题。这不是一次性的检查;我们需要对 AI 系统进行持续监控和评估,以评估其性能并确定改进领域。此外,目前关于 AI 和数据的法规非常少,因此我们需要跟上任何更新,这本身就是一个挑战,因为这些法规可能是特定于地区或行业的。我们将在本章后面更详细地讨论合规性以及如何使用 Azure 的工具来确保你的开发过程受到保护,并确保合规性得到保证。
注意
所有原则、指南和相关文档都可以在官方 Microsoft 负责任的 AI门户网站上找到:www.microsoft.com/ai/responsible-ai。
在你的组织中开始负责任的 AI
所有的前述点在理论上都很简单,但你是如何开始构建一个稳固的策略的呢?让我们回顾你需要采取的第一步,因为负责任的 AI 可以在多个阶段实施。
首先,你将开始进行评估。你在负责任的 AI 旅程中处于什么位置,你需要改进什么?第二部分是负责任的发展,这一阶段取决于你的系统目标。这里有不同的指南和工具,以确保在 ML 生命周期的所有阶段都能保持公平性和性能。我们的工作还没有结束;我们还需要确保负责任的部署。
在本节中,我们将简要概述可用的工具和指南。我们将在下一章中探讨每个工具的实施和最佳实践。
人类-人工智能体验工具包
人类-人工智能体验(HAX)工具包是一套资源和实践工具,旨在支持组织在负责任地开发和部署 AI 系统。它包含多个工具和指南,我们可以使用它们将 UX、AI、项目管理、工程团队聚集在一起,并在 ML 过程的各个阶段保持负责任和道德的 AI 开发。
使用 HAX Toolkit 的第一步是熟悉人机交互的指南。它们概述了 AI 系统应该如何表现并与用户互动。
HAX Toolkit
在这里找到 HAX Toolkit 的最新文档和指南:www.microsoft.com/en-us/haxtoolkit/。
然后,您可以使用 HAX 工作簿,这是一个包含多个问题的 Excel 表格,将帮助您优先处理工作项,并根据您的个人场景确定需要实施哪些指南。特别是如果您正在处理自然语言处理(NLP),您可以使用 HAX 演练手册。这将帮助您识别可能出现的系统故障以及如何防止或从中恢复。
如果这一切听起来非常理论化,在下一节中,我们将看到一个如何使用 HAX 工作簿来制定我们策略的例子。
探索 HAX 设计库
我们需要做的第一件事是熟悉 HAX 设计库。您可以在以下链接找到所有完整材料:www.microsoft.com/en-us/haxtoolkit/library/。在这里,您可以找到基于负责任 AI 原则的人机交互的 18 条指南。这些指南附带设计模式和行业案例。
这就是一眼就能看到的 18 条指南:
- 
G1: 清晰说明系统 能做什么。帮助用户了解系统的优势或局限性。
 - 
G2: 清晰说明系统 能做什么。在本指南中,我们确保用户了解系统的错误频率。
 - 
G3: 根据上下文 安排服务。这计划根据用户的任务何时采取行动。
 - 
G4: 根据上下文 显示相关信息。根据用户的当前任务或场景向用户显示信息。
 - 
G5: 与相关 社会规范 匹配。在这里,体验应与用户的社会和文化环境相匹配。
 - 
G6: 缓解 社会偏见。确保系统公平对待所有敏感群体。
 - 
G7: 支持 高效调用。系统应在需要时易于访问。
 - 
G8: 支持 高效忽略。确保有忽略系统服务的能力。
 - 
G9: 支持 高效纠正。确保有从错误中恢复的能力。
 - 
G10: 在怀疑时 明确服务范围。优雅地阐明模糊的命令。
 - 
G11: 清晰说明系统为何 这样做。确保系统的结果可以解释。
 - 
G12: 记住 最近交互。保持之前行动的简短历史记录。
 - 
G13: 从 用户行为 中学习。如有需要,调整用户行为。
 - 
G14: 谨慎 更新和适应。在维护期间限制干扰。
 - 
G15: 鼓励 细粒度反馈。允许用户提供反馈。
 - 
G16: 传达用户行为 的后果。明确用户行为如何影响系统的功能。
 - 
G17: 提供 全局控制。确保用户可以自定义系统的行为。
 - 
G18: 通知用户 关于变更。让用户了解新功能。
 
在熟悉上述指南后,我们需要看看我们如何使用它们来制定负责任 AI 策略。
让我们看看如何优先级排序和跟踪每个指南的实施。
使用 HAX Workbook 开发负责任的 AI 策略
要开始,请从www.microsoft.com/en-us/haxtoolkit/workbook下载 HAX Workbook。我们将根据第一章中展示的场景,一起填写第一行,包括糖尿病预测模型。
在工作簿中,第一行展示了这个指南:明确系统 能做什么。
说明
通常,您会在进入下一步之前填写一个步骤中的所有行。然而,仅作为一个例子,我们将只通过第一个指南。
让我们继续填写工作簿的第一行,如下面的步骤所示。您可以在每个步骤的截图上看到结果:
- 选择相关指南:在我们的案例中,第一个指南,明确系统能做什么,是关键的,因为预测涉及医疗数据,可能会影响患者的诊断和治疗,因此医生应该清楚结果是一个估计,他们需要在向患者提供诊断和治疗之前验证其有效性。在下面的截图中,您可以看到指南的第一步以及如何填写其余单元格的示例列。由于对我们来说这个指南是关键的,我们在步骤 1下选择是:
 

图 3.2 – 步骤 1:选择相关指南
- 想象相关指南的影响:在这个步骤中,您将遍历您已设置为相关的所有指南,并想象实施或不实施这个指南对您的用户的影响。在我们的案例中,这非常重要,因为我们的机器学习模型旨在加速,而不是取代诊断过程。医生应该意识到预测是一个估计,他们应该验证结果。如果医生不验证结果,他们可能会开出错误的治疗方案,这对患者的健康可能产生危险后果:
 

图 3.3 – 步骤 2:想象相关指南的影响
- 草拟实施要求:在这个步骤中,我们概述了实施这个指南需要做什么。在这种情况下,我们确定了三个不需要太大承诺的任务;这些任务在下一张截图中可见:
 

图 3.4 – 步骤 3:草拟实施要求
- 优先级:优先级由您决定。实施这个指南有多紧急?由于我们正在处理一个医疗保健系统,明确系统能做什么是至关重要的:
 

图 3.5 – 步骤 4:优先级
- 跟踪:你可以使用这份文档或你自己的项目管理工具来评估你使用这份文档优先考虑的负责任开发特性:
 

图 3.6 – 步骤 5:跟踪
然后,这个过程(从步骤 1到步骤 5)需要为所有指南重复进行。
经过这次练习,你将很好地了解如何着手进行道德人工智能的开发。即使你不确定如何填写文档,在示例列中,你将找到每个指南如何在系统中实施的解释,这特别有帮助。
然而,应用程序需要经过测试以确保我们覆盖了所有基础。当涉及到人机交互时,有一些具体的事情我们需要注意。
那么,让我们看看 HAX Playbook 如何帮助我们。
发现 HAX Playbook
如果你正在处理自然语言处理(NLP),那么你真的应该利用 HAX Playbook。这是一个基于你提供的场景的交互式工具,它为你提供常见的交互场景进行测试,以确保在你的应用程序中你已经考虑了最基本的问题,并制定了补救计划。
操练手册可以在以下链接找到:microsoft.github.io/HAXPlaybook/,或者如果你想调整它创建的调查,你可以从这里构建源代码:github.com/microsoft/HAXPlaybook。
要使用操练手册,打开网站并选择页面左侧你的应用程序支持的 AI 功能。一旦你点击某个选项,操练手册就会显示右侧的常见用法以及可能出现的常见错误和问题,如下一张截图所示:

图 3.7 – HAX Playbook
例如,如果你在左侧选择对话式人工智能和文本输入,操练手册会建议一个常见错误是文本中的拼写错误。你选择的选项越多,展示的场景就越多。这些场景也可以以各种格式导出,供以后使用。
在我们完成了人机用户体验之后,让我们使用下一个方法确保我们的系统具有包容性。
包容性设计方法
如前所述,负责任人工智能的一个原则是包容性。如果你不知道从哪里开始,你可以使用微软的包容性设计原则,这是一种确保每个人在数字环境中都被包括并得到支持的方法。
包容性设计
你可以在以下链接找到包容性设计文档和指南:inclusive.microsoft.design/。
包容性设计原则很简单。首先,我们需要认识到排斥和承认偏见。其次,我们需要通过引入新鲜和多样化的视角来通过多样性学习。最后,当您提供内容以适应有身体或精神障碍的人时,它创造了惠及每个人的体验。在您对如何进行负责任的设计有了良好的理解之后,您可以继续使用许多工具和库。在这本书中,我们将看到许多实现和工具,帮助我们将负责任的人工智能功能集成到我们的系统中。
在负责任的人工智能开发之后,我们需要学习如何确保监管合规。
Azure 机器学习的 Azure 策略中的监管合规
监管合规是指遵守通常由政府、行业协会或其他监管机构设定的法律、法规和标准的过程。监管合规的一部分意味着一个组织在其行业和或其地理位置适用的特定法律或监管框架内运营。监管合规对于维护道德实践、保护组织和客户以及减轻风险至关重要。它包括法律和法规、政策和工作流程、风险评估和管理、报告和文件编制,最后是监控和审计。在组织内建立合规文化可能很困难,但这是必不可少的。这可能包括员工培训和确保合规是优先事项。然而,有时为了确保所有这些流程和实践得到执行,可能需要实施或配置安全控制措施。
如果您的组织需要证明符合法律或监管标准,微软和 Azure 平台完全符合多个全球、区域和行业标准。您可以在 Azure 合规文档中找到所有信息。然而,平台符合标准并不意味着您实施和使用服务的方式也符合标准。您可能需要正确实施或配置这些控制措施,以符合与服务无关但例如与数据相关的法规。在这里,我们将探讨适用于 Azure 机器学习的所有监管合规控制措施,我们将在接下来的章节中看到如何实施。
每个控制项都与一个或多个Azure 策略定义相关联。Azure 策略是 Azure 中的一项服务,您可以使用它来创建、分配和管理策略,以强制执行并管理您组织在 Azure 资源中的合规性和安全要求。这些策略可以用于强制执行对资源的各种配置和约束,例如资源类型、地区、标记、访问控制等。您可以使用 Azure 策略通过现有资源的修复和新资源的自动修复来使资源符合规范。您可以将多个业务规则组合在一起形成一个策略倡议。您还可以定义和实施一组规则,称为策略定义,这些定义了您的 Azure 资源所需的状态。策略定义或倡议可以分配给 Azure 支持的任何资源范围,例如管理组、订阅、资源组或单个资源。Azure 策略将资源与定义的策略进行比较,并提供合规性结果,使您能够在一个中心选项卡中监控和强制执行所需的配置。
策略分配相当简单。让我们看看它是如何工作的:
- 打开 Azure 门户
portal.azure.com/,并在搜索框中键入policy,如下截图所示: 

图 3.8 – 打开 Azure 策略
- 您将进入概览选项卡。在这里,您可以看到您策略的摘要和您资源的一致性:
 

图 3.9 – Azure 策略概览选项卡
- 要分配新策略,请转到左侧的创作菜单并点击分配。在此菜单中,您可以将策略分配给您的资源:
 

图 3.10 – 策略分配
- 点击分配策略按钮,并填写下一张截图中所概述的信息:
 

图 3.11 – 分配策略基础
- 范围是策略应用的空间。您可以将范围设置为资源所在的管理组、订阅或资源组。我选择了我的订阅。如果您想排除特定的资源,您可以在此处设置排除。然后,您可以选择一个策略定义。在门户中有 1000 多个;您可以在 GitHub 上找到更多,或者您可以创建自己的。我选择了一个简单的定义,要求所有资源都必须有一个标记。如果可用,您可以在修复选项卡上设置此操作。我选择的策略没有为之前创建的资源提供修复。
 
如果您不想设置超过所需设置,那就行了!分配可能需要 15 分钟才能启用,然后它将在您设置的范围内对所有新资源强制执行。
对于 Azure 机器学习,您可以实施几个策略以确保您的资源符合规范。我至少建议启用以下两个策略:Azure 机器学习计算实例应重新创建以获取最新的软件更新,这样您的计算实例始终更新并安全,使用最新的操作系统版本,并且应启用空闲关闭以防止使用策略 Azure 机器学习计算实例应具有空闲关闭 来防止不必要的成本。其他策略则更具体,您可以在以下链接中找到完整的列表。
Azure 机器学习的内置策略
您可以在以下表格中找到 Azure 机器学习的内置策略:learn.microsoft.com/en-us/azure/governance/policy/samples/built-in-policies#machine-learning
上述策略专门适用于 Azure 机器学习并不意味着这些是我们唯一可以用来遵守合规框架的策略。由于 Azure 机器学习使用多个相关服务来工作,因此值得研究 Azure 容器注册表、Azure Kubernetes 服务、我们在 Azure 中使用的数据库等策略。如果策略没有涵盖我们想要做的事情,我们可以创建一个自定义策略或在 GitHub 上找到更多内容。
Azure 策略服务与 Azure 资源管理器 (ARM)、Azure 门户、Azure DevOps 以及其他 Azure 服务集成,使您能够在资源创建、部署和持续管理过程中强制执行策略。此外,您还可以通过使用 Azure Active Directory 条件访问 功能根据条件利用 Azure 策略。在本节中,我们将探讨适用于 Azure ML 的特定行业标准和策略,并使用它们来创建安全基线。
Azure 合规性文档
您可以在此处找到所有 Azure 合规性产品提供的详细信息报告:learn.microsoft.com/azure/compliance/。
Azure 安全基准
Azure 安全基准 (ASB) 是一套基于行业标准的推荐方案,指导您如何在 Azure 上保护您的云解决方案。ASB 包含了所有 Azure 服务的策略和建议,包括安全和合规性标准。如果您想查看每个服务以及如何应用 ASB 建议,您可以在文档中找到 ASB 映射文件。对于 Azure ML,我们将考虑网络安全和数据保护控制。
联邦风险和授权管理计划
联邦风险和授权管理计划(FedRAMP)是美国政府提出的针对云服务提供的联邦政府方法。如果你的组织或客户位于美国,你应该真正考虑这些规定,以确保符合相关法律。这个方法是由美国政府提出的,并不意味着你不能用它来保护其他地区的 Azure 机器学习工作负载。
Azure 中的 FedRAMP 包括两个级别的保护:FedRAMP 高和 FedRAMP 中。高影响级别通常用于执法、紧急服务、医疗保健或金融等系统,这些系统的完整性、机密性和安全性对组织的运营将产生灾难性的影响。中等影响级别适用于大多数云系统,可能会产生严重影响,但它们不在数据和处理极其敏感的行业。对于 Azure 机器学习,我们将使用访问控制和系统与通信保护控制措施。尽管这些控制措施是由于这种方法而存在的,但它们是有效的,可以帮助你在任何位置或类型的任何地方保护你的工作负载。在这本书中,我们将包括来自多个行业标准的最优实践,包括 FedRAMP。
新西兰信息安全手册(受限)
新西兰信息安全手册(NZISM)是新西兰政府关于信息安全和管理系统安全指南。尽管 NZISM 旨在供新西兰政府机构和组织使用,但它包含多个控制措施,这些措施对于 Azure 机器学习特别重要,因为它们适用于 Azure 基础设施和加密。
NIST SP 800-53 Rev. 5
NIST 提出了几个控制措施,特别是关于安全性的,从低影响、中等影响、高影响到隐私控制。NIST SP 800-53数据库包含信息系统和组织的安全和隐私控制措施评估程序和基线。你可以在 NIST RMF 下找到所有这些信息。通过这个合规标准,我们将获得在 Azure ML 中实施访问控制、系统保护和通信安全控制措施的知识。
印度储备银行 IT 框架(银行)v2016
在印度储备银行 IT 框架(银行)的 Azure 策略合规性下创建的一些控制措施也可以用来保护 Azure 机器学习工作负载。尽管这个标准是关于一个非常具体的领域,但它包含了关于指标、高级实时威胁防御和管理、补丁/漏洞和变更管理以及反钓鱼控制措施,这些措施对于 Azure 机器学习特别有用。
所有的先前合规性标准和它们的政策都内置在 Azure 平台中,因此我们可以轻松地利用它们来创建我们的安全基线,您会发现其中许多政策可以重叠,因为它们是许多不同方法和标准的一部分。当然,如果您愿意,您始终可以创建适用于您个人行业或组织程序的自定义政策,但在这本书中,我们将专注于为您构建一个坚实的基础。
合规性审计和报告
只需使用 Azure 策略服务,您就有权访问合规性和修复选项卡,您可以使用它们免费监控 Azure 资源的合规性状态。您只需要一个活跃的 Azure 订阅。请注意,如果您将 Azure 策略服务启用到 Arc 资源,可能会产生相关费用。在这种情况下,您可以访问 Azure 定价计算器以查看相关费用。
合规性审计是评估组织遵守相关法律、法规、政策和行业标准的过程。它通常涉及对组织的实践、程序和控制进行彻底检查,以确保它们符合既定要求。合规性审计可以由内部或外部审计员进行,他们必须独立于被审计的过程。内部审计和合规性审计似乎有类似的步骤;然而,它们非常不同,因为合规性审计关注的是组织是否遵守所有相关的法律、规则和法规,而不是财务或运营系统。
审计过程涉及许多步骤。首先是要确定范围。审计范围定义了需要评估的具体法规、法律、标准或政策,这些都与公司的地理位置或行业相关。然后是合规性评估,我们通过分析流程、控制和报告来确定组织是否遵循规定的程序。如果审计员发现了不符合规定和可能影响组织运营或声誉的风险区域,他们将评估这些风险的严重性和可能性,并根据评估结果优先推荐建议。这些建议可能包括实施新的控制措施、修订政策和程序、进行员工培训或增强监控流程。审计结束时,将创建一份包含所有结果的报告,并与适当的利益相关者共享。组织有责任解决和纠正问题,有时在审计期间内,并确保他们监控合规性,以便在未来修复问题。
合规审计在帮助组织保持法律和监管合规、降低风险以及向利益相关者展示问责制方面发挥着至关重要的作用。它有助于在这些问题导致法律违规、经济损失或声誉损害之前识别和解决不合规领域。
要在 Azure 和 Azure 策略的帮助下完成此操作,我们有几个可用的工具,我们可以使用这些工具来监控和提取报告,以证明我们服务的合规性。让我们看看其中一些工具以及如何使用它们进行报告。
Azure 门户
您可以从在 Azure 门户中打开 Azure 策略服务开始。您不需要为此创建新的资源;它已经是您订阅的一部分。您需要做的就是打开门户,在顶部搜索框中搜索策略,正如我们在本章之前所看到的。一旦您打开策略菜单,您将看到类似于以下截图的内容:

图 3.12 – Azure 门户中的 Azure 策略概述选项卡
您可以从概述选项卡或合规性选项卡中查看您当前分配了哪些策略以及您的订阅中哪些资源是合规的或不合规的。这些都在表格形式中,您还可以看到几个图表,如前一个截图所示,以快速查看您资源的合规百分比。
这份报告非常出色,因为它能立即为您提供信息摘要。通过点击政策或倡议分配,您可以查看有关政策的更多信息,查看不合规的资源,并创建修复任务或例外情况,如下面的截图所示:

图 3.13 – 使用门户的 Azure 策略分配详情
注意顶部您有多少选项而无需离开报告页面。
Azure 资源图探索器
Azure 资源图探索器是一个强大的服务,它使您能够快速高效地探索、查询和分析您的 Azure 资源及其属性。这是一种非常可扩展的方式来检索信息和获取洞察。您可以使用Kusto 查询语言(KQL)创建 Azure 资源图探索器查询,以获取您环境中策略的信息。
让我们看看如何运行一个简单的查询并提取报告:
- 要开始,通过在顶部搜索栏中键入名称打开 Azure 资源图探索器,如下所示:
 

图 3.14 – 打开 Azure 资源图探索器
- 在页面底部,在
策略下,如以下截图所示: 

图 3.15 – 搜索策略相关查询的查询模板
- 运行最左边的查询。您将获得您的订阅的活跃策略任务:
 

图 3.16 – 在 Azure 资源图探索器中运行查询
现在,您可以使用 KQL 来定制结果和列,以获取您想要的信息,将数据导出为.csv文件,或将表格固定到 Azure 仪表板上。
KQL 参考
如果这是您第一次听说 KQL,您可以从这里开始使用 KQL 查询,因为我们将在接下来的章节中也需要它:learn.microsoft.com/en-us/azure/data-explorer/kql-quick-reference。
此外,还有其他方法可以访问由您的策略和倡议任务生成的合规性信息。我们可以使用命令行脚本、Azure REST API和Azure Monitor Logs。策略评估和执行报告是实时的。一旦在您的 Azure 订阅中启用每个策略,在允许流程继续之前,任何要创建的资源都将被评估。
您还可以将 Azure 策略任务与其他服务集成,例如 Event Grid,或创建警报,以便您在资源方面获得通知。Azure Policy 与 Azure Defender for Cloud 配合得很好,您可以根据我们在这里概述的行业合规性标准查看资源的合规状态。然而,我们将在本书的后面部分更多地讨论这些仪表板和工具,当我们处理 Azure 中的所有日志和监控技术时。
可以理解的是,手动处理所有内容可能会产生一些管理开销。在下一节中,我们将探讨如何自动化一些这些流程。
Azure 中的合规性自动化
正如我们在上一节中看到的,遵循内置的合规性标准并在我们的资源中执行策略相对容易。然而,我们很少只有一个资源或一个订阅来应用这些策略。通常,我们将创建开发环境,然后再次将其部署为生产环境,有时我们甚至使用类似的政策和执行规则同时维护两者。
在 Azure 中重新创建开发环境很容易,因为有几种方法可以通过使用 ARM 模板和命令行脚本等在资源组或订阅之间复制资源。然而,ARM 模板仅用于描述一个或多个相关资源。基于基于角色的访问控制(RBAC)的角色分配和策略必须重新创建并重新分配给每个订阅、资源组或资源。在这种情况下,我们还有一个服务可以帮助我们在 Azure 中重新创建环境:Azure Blueprints和基础设施即代码(IaC)。
让我们在接下来的几节中讨论这两个方面。
Azure Blueprints
虽然 Azure Policy 中的 ARM 模板 需要在每次需要实施某些内容时部署或分配,但 Azure 蓝图服务利用角色分配、策略分配、ARM 模板和资源组来复制或重新创建一个完整的环境,保留资源和治理。几乎你可以用 Azure 蓝图完成的所有事情,你都可以用 Azure ARM 模板完成。区别在于 ARM 模板部署一个或多个资源。Azure 蓝图保留了应部署的内容、模板和蓝图分配、策略等之间的关系。
这是如何工作的:通过创建蓝图定义。蓝图定义由工件组成——具体来说,是针对订阅或管理组的资源组、ARM 模板、策略分配和角色分配。工件也可以是参数化的。要创建蓝图,你只需要遵循两个步骤:
- 首先,你需要分配蓝图名称和定义位置值,这将是你想要应用此蓝图的订阅。这在上面的截图中显示:
 

图 3.17 – 创建蓝图基本细节
- 你需要声明工件及其参数。工件包括资源组、资源模板、RBAC 分配和政策。请参考以下截图:
 

图 3.18 – 添加工件
当你使用蓝图时,其模式设置为草稿。当你准备好应用它时,你需要发布蓝图,并将其设置为已发布。每个发布的蓝图都有一个版本号。我们使用版本号来区分对同一蓝图的未来更改。如果你想对蓝图进行更改,你需要做的只是创建一个新的版本,包含你想要的所有更改,然后将其应用到相同的订阅或管理组。
IaC
门户和命令行工具并不是在 Azure 中部署服务的唯一方式。我们还可以利用基础设施即代码(IaC)以及DevOps实践来确保你的环境、角色和策略在订阅之间的一致性。
在 Azure 上通过 IaC 进行治理是指使用基于代码的声明性模板来管理和治理 Azure 资源和配置的实践。Azure 提供了工具和服务,使你能够实现 IaC,以实现其云基础设施的高效和一致管理。
你可以将 IaC 与版本控制和协作功能集成,你还可以通过将 IaC 与 CI/CD 管道集成来利用持续部署和自动化。通过集成 DevOps,你可以自动化任何基础设施更改的部署、测试和验证。
Azure 提供了可以与基础设施即代码(IaC)结合使用的监控和审计功能。您可以利用并分析日志和遥测数据,以便监控和审计对您基础设施所做的更改。这确保了 Azure 中的合规性和治理。我们将在本书的后面部分看到如何利用 IaC 和 DevOps 在机器学习(或我们称之为MLOps)中的应用。
摘要
在本章中,我们学习了如何负责任地开发 AI 系统,以及如何使用负责任 AI 工具开发道德方法。我们熟悉了行业标准,并学习了如何使用 Azure 策略服务来实施这些标准。由于有许多工具可以帮助我们查看和维护服务的合规状态,因此合规性和审计的汇报从未如此简单。对于汇报和审计,我们在 Azure 策略、Azure 资源图探索器和命令行工具中拥有合规性和补救选项卡。为了自动化环境创建,我们可以利用 Azure 蓝图服务和 IaC。
现在我们已经制定了一个策略,并了解了一些开箱即用的多个安全标准,让我们看看我们如何在 Azure 环境中实施所有这些控制和护栏。正如在机器学习方面一样,我们将从数据开始。
在下一章中,我们将解释数据治理以及如何在我们的机器学习项目中安全地存储、传输、备份和恢复数据。
第二部分:保护您的数据
机器学习基于数据,因此保护它们是我们的首要任务。在本部分中,您将学习如何开发数据治理计划,然后学习如何在存储和传输过程中保护数据。您还将学习如何与备份和恢复服务合作,以及如何识别和保护敏感信息以及解释机器学习模型。最后,您将探索使用联邦学习和安全多方计算的最佳实践。
本部分包含以下章节:
- 
第四章**,数据保护和治理
 - 
第五章**,数据隐私和负责任 AI 最佳实践
 
第四章:数据保护和治理
数据是机器学习的基础部分,因此在本章中,我们将关注数据治理、存储和安全的各个方面。我们将首先解释什么是数据治理以及了解我们拥有的数据的重要性。我们需要知道如何开发一个管理框架,以便我们可以改进从组织工作流程到商业决策的每一件事。数据治理还将帮助我们识别敏感数据以及我们如何更好地保护它,作为我们的数据治理计划或机器学习解决方案的一部分。
我们将首先学习在 Azure 机器学习中存储和检索数据的最佳实践。我们将了解许多可以用来保存我们的数据集的数据服务——例如,Azure Blob 存储和 Azure SQL 数据库及其基本的加密和安全功能。Azure 机器学习已经为我们提供了许多功能,如版本控制和日志记录,但由于数据通常与工作区相关联而不是保存在工作区中,因此熟悉来自不同服务的不同安全功能非常重要。最后,我们将探讨备份选项和恢复选项,因为尽管我们将尽最大努力保护我们的资产,但这并不意味着我们不应该为最坏的情况做好准备,即需要从人为错误或安全事件造成的数据丢失中恢复数据。
在本章中,我们将涵盖以下主要主题:
- 
在 Azure 中处理数据治理
 - 
在 Azure 机器学习中存储和检索数据
 - 
加密和安全数据
 - 
探索备份和恢复
 
到本章结束时,您将更好地了解如何使用适当的工具和最佳实践为您的组织设置数据保护和治理框架,以在 Azure 机器学习中保护您的数据。
在 Azure 中处理数据治理
数据治理是指组织数据资产的整体管理和控制。它包括建立流程、政策和指南,以确保信息的可用性、完整性、安全性、隐私以及有效和高效地使用信息。这始终很重要,但当我们谈论机器学习时,它尤其关键,因为机器学习模型是基于数据的。无论我们是在谈论用于训练我们的模型的数据,还是我们的模型生成的数据,都不会改变这样一个事实:我们需要意识到我们处理的所有信息以及其生命周期。
为了有效地实施数据治理,组织通常需要建立一个数据治理框架或策略,该框架概述了数据管理的结构、流程和责任。这个框架应包括建立一个数据治理委员会或理事会,数据治理政策和程序,数据管理员角色,以及使用技术解决方案来支持数据治理活动。
数据治理不仅涉及技术方面,还涉及业务方面。在整个组织的不同部门之间交换了不同类型的信息,所有这些都需要成为公司数据治理政策的一部分,这可能会一开始就让人感到 daunting。记住,数据治理是一个涉及人员、流程和技术协作的努力。它需要所有利益相关者的持续承诺、沟通和参与,以推动成功的实施,确保数据治理策略的长期有效性。然而,由于存在关于安全和隐私的多个全球和地区性数据法规,如果您的组织没有数据治理策略,可能会导致经济损失并损害您的声誉。
制定这些政策和流程的复杂性给我们带来了许多挑战;然而,制定有效的策略也会带来许多好处。让我们从挑战开始。
识别挑战
挑战可以在每个步骤中识别为技术性、运营性或甚至以人为导向的。并非所有这些都会适用于所有组织,但了解可能的问题将帮助我们更好地为它们做准备。我们将一起探讨这些问题:
- 
当我们制定新的策略时,无论是什么策略,最困难的部分往往是公司范围内的接受度。数据治理的实施通常需要组织内部的转变。员工需要改变他们的行为,采用新的流程,并接受不同的思维方式——一种以数据驱动的思维方式,这将打乱他们的日常常规。从一开始,如果缺乏意识和理解,接受新的策略将是一场斗争。不幸的是,由于数据治理需要跨不同部门和业务单元的协作和协调,任何缺乏参与、目标不一致和不一致之处都可能阻碍发展,导致数据管理实践碎片化,使组织面临许多风险。
 - 
另一个挑战是吸引和协调合适的利益相关者。我们需要涉及来自不同部门和组织的不同层级的利益相关者,以确保一致性和协作。这包括高管、IT 专业人士、数据所有者、数据用户以及法律和合规团队。理解他们的观点、需求和挑战与数据管理和治理直接相关,并将导致有效的数据治理框架。
 - 
然后,还有一致性和标准化的问题。我们真的需要在治理标准和灵活性之间找到正确的平衡。创建过于复杂的过程,虽然可以增加数据安全和隐私,但也会阻碍日常业务,这也不是一个受欢迎的结果。数据治理作为一种策略,旨在保护组织免受潜在的数据泄露和非合规的侵害。在某些情况下,可能需要做出一些让步或例外,以允许业务运营顺利进行。
 - 
如果我们设法或多或少地克服了上述挑战,那么接下来就是实际数据的问题。责任对齐是我们参与机器学习(ML)开发时需要更加关注的问题。决定谁应该和谁不应该访问特定数据段至关重要,但这只是第一步。这也可以进一步细分为哪些数据应该和不应该用于训练机器学习模型。
 - 
最后,启用正确的数据治理工具和技术同样至关重要。我们需要识别和实施适当的工具和技术来支持数据治理活动。这可能包括数据目录工具、元数据管理系统、数据质量工具和数据安全解决方案。这些工具有助于自动化和简化数据治理流程,提供对数据资产的可见性,并促进数据发现和协作。在本章和下一章中,我们将看到一些实践、工具和产品特性,它们将帮助我们做到这一点,特别是对于机器学习(ML)而言。
 
如果没有解决上述任何挑战,将导致数据管理不善。这意味着信息不安全、信息孤岛化以及流程不完整和不一致。结果使组织容易受到数据泄露的攻击,甚至可能对业务运营产生不利影响,因为决策可能会受到信息不足的影响。
如果我们成功克服了这些挑战,我们可以获得多重好处。让我们在下一节中回顾一下它们是什么。
探索益处
数据治理不仅可以保护组织,还可以改善业务运营。根据微软的说法,一个强大的数据治理策略有助于确保您的信息得到审计、评估、验证、管理和适当的安全保护,并保持可靠性。
第一个也是最为明显的益处是数据质量提升。数据治理确保数据准确、一致和可靠。通过建立数据标准、实施数据质量控制和分配责任,可以提高数据的整体质量。高质量的数据可以带来更多好处,例如更好的决策、提高运营效率以及改善业务流程。
数据治理可以改善决策。它提供了一个坚实的基础,并且当有可靠和可信的数据可用时,决策者可以基于准确洞察做出明智的选择,而这些洞察又基于当前的数据。数据治理有助于确保决策者能够及时、以正确的格式和适当的背景访问正确的数据。这也可以导致成本降低和提高盈利能力。
此外,由于数据治理侧重于保护敏感数据并确保遵守数据隐私法规,我们还需要提高数据合规性、安全性和隐私性。通过实施数据安全措施、建立访问控制和定义数据处理程序,我们可以大大降低数据泄露和未经授权访问的风险。在 Azure 机器学习中,通过适当的控制,你还可以创建符合数据法律和法规的合规性报告。
通过创建流程和最佳数据实践,你最终会得到改进的数据管理。任何需要、问题或问题都可以被找到并更有效地缓解。数据共享和协作在不同团队和部门之间进行得更加高效和安全。数据管理可以促进数据集成并确保系统和应用之间的数据互操作性。通过定义数据标准、数据格式和数据集成指南,组织可以实现更好的数据一致性和增强数据互操作性。
最后,数据管理可以建立信任。利益相关者和客户的信任可以导致卓越的组织声誉。当涉及到信任某人处理数据时,组织的声誉可能是他们选择的决定性因素,因为机器学习是通过旧数据和新技术数据进行训练和学习的。
既然我们已经了解了数据治理的重要性,让我们开始学习最佳实践,并探索一些可以应用于 Azure 机器学习和其相关服务的工具和资源。
开始使用云数据最佳实践
Azure 机器学习是一种云数据服务,正如你将在以下章节中看到的,与 Azure 机器学习一起工作的多数服务也是云服务或托管在 Azure 上。因此,我们将关注与云数据管理相关的最佳实践,而跟随由全球行业委员会——EDM 委员会——开发的云数据管理能力(CDMC)框架开始,无疑是一个更好的起点。
CDMC 框架概述了以下 14 项关键控制措施来管理数据风险:
- 
数据合规性意味着包含敏感数据的任何事物都必须受到监控,一旦出现任何问题,应实施通知。
 - 
数据所有权必须在任何保存的信息中明确,并且具有报告的能力。
 - 
权威数据源和供应点应适用于所有敏感数据。
 - 
数据主权和跨境流动规定敏感数据必须根据政策进行控制和审计。
 - 
数据编目应在部门或环境中一致自动化,理想情况下在数据创建或摄取时进行。
 - 
数据分类应完成,并在可能的情况下自动化所有敏感数据。
 - 
敏感数据的权限和访问应由所有者管理并跟踪。
 - 
数据消费目的应提供所有数据,包括任何协议。
 - 
安全控制必须实施以强制执行数据合规性。
 - 
当出现问题时,数据保护影响评估应到位并实现自动化。
 - 
数据保留是指根据数据生命周期要保留的数据,最终这些数据将被删除。这应该明确定义,并可能实现自动化。
 - 
数据质量确保数据适合并根据其目的正确分类。
 - 
存储和移动数据的成本指标必须可用于报告。
 - 
数据血缘确保可以识别数据的来源和任何使用情况。
 
CDMC 框架对所有行业免费提供内部使用许可,包括 EDM 委员会成员和非成员。它还可以用于实施数据治理以及作为评估工具。你只需要接受他们的条款和条件。
数据管理能力(CDMC)
如果你想要了解更多关于 CDMC 框架和 EDM 委员会的信息,请访问官方页面:https://edmcouncil.org/frameworks/cdmc/。
然而,无论你选择哪种框架或流程,一次性完成所有事情可能并不可能。相反,你需要从小处着手以确保成功的实施。指派某人或一个团队来执行和监控整个组织中的所有实施可能是个好主意。然后,确保你有明确的目标和清晰的商业案例。在整个过程中保持沟通畅通,并制定适当的指标来衡量进度也是至关重要的。关键在于认识到数据治理不仅仅是实施几个 IT 解决方案。
此外,虽然不存在一种适用于所有组织或行业的万能策略,但 Azure 提供了多种工具来实施控制和在你的数据中应用治理。让我们在下一节中探讨其中的一些。
探索 Azure 工具和资源
我们已经看到了一些工具帮助我们强制执行资源中的合规性,例如在第3 章中提到的 Azure 策略和 Azure 蓝图。让我们再回顾一些适用于数据治理的工具。
微软成本管理
在处理数据治理时,一个目标可能是优化您的云使用和支出。要监控并获得建议,您可以使用 Microsoft 成本管理。这对于 Azure 订阅是免费的,但它可以用于监控其他云。在后一种情况下,您可能需要检查管理成本是多少。
Azure 成本管理包括成本和使用的报告、多个分类选项、创建使用预算以及能够在预测成本上设置警报。
让我们看看如何使用此服务的示例:
- 在下一张图中,您可以看到成本管理的成本分析选项卡。一些功能在撰写本文时仍在预览中,但它为我们提供了关于订阅和每个资源成本的很好了解。
 

图 4.1 – 成本管理概述
- 在这里,我们可以通过资源、服务或甚至时间段创建报告。这些报告是可定制的,并提供每个计费期间实际和预测成本的图形表示,如下图所示:
 

图 4.2 – 成本分析
- 您可以在成本警报菜单中轻松创建警报以检测异常或基于建议。一旦您点击添加并填写字段,您的警报就准备好了。每当发生任何事情时,您都会收到电子邮件警报。
 

图 4.3 – 创建警报规则
- 
如果您想基于预算创建警报,您需要通过预算菜单创建它。一旦您设置了预算,您就可以根据使用情况或预测使用情况创建警报,以确保您始终了解最新情况,确保您不会超出预算。此过程有两个步骤:
- 首先,您创建一个预算金额。您会得到一个包含您过去使用信息的图表,以帮助您决定如果尚未有预定义的金额,预算的大致金额应该是多少。
 
 

图 4.4 – 创建预算
- 第二步是设置警报条件和警报接收者。警报可以是实际金额或预测金额,这有助于您在超过某个阈值之前收到通知并相应地计划。这在此处显示:
 

图 4.5 – 创建预算警报
您还可以使用 Azure 顾问的建议来查找您订阅的服务在使用和成本方面的最佳实践。通常,任何可以优化云使用的信 息都应成为您组织治理的一部分。
Azure 顾问成本建议链接
在learn.microsoft.com/en-us/azure/advisor/advisor-reference-cost-recommendations,您可以找到不同服务的成本建议。然而,如果您没有部署这些服务,它们将不会在顾问推荐选项卡中显示。
Microsoft Purview
Microsoft Purview是一个数据治理、风险和合规性解决方案,旨在帮助组织管理和治理他们在各种来源和平台上的数据资产。其功能适用于 Azure 和Microsoft 365,您可以使用它来保护不同云、应用程序和设备之间的敏感数据,并识别和管理法规遵从性。
Microsoft Purview 提供了几个关键功能来支持数据治理。这种支持的基础是数据地图。Purview 提供了一个数据地图功能,帮助组织可视化和理解其数据资产的关系和特征。Purview 中的数据地图代表了组织内部数据景观的图形表示,包括数据源、连接和元数据。
在数据地图之上,您会发现许多用于不同目的的应用程序:
- 
数据目录应用程序通过搜索您的数据并帮助对其进行分类来查找数据源
 - 
数据资产洞察应用程序帮助您了解您拥有哪些类型的数据以及它们在哪里
 - 
数据共享应用程序帮助您在合作伙伴和客户之间安全地保护数据
 - 
数据策略协助访问配置
 
Microsoft Purview 与各种 Azure 服务集成,例如 Azure Data Factory 和 Azure SQL 数据库,以提供端到端的数据治理能力。它利用 Azure 的安全和合规性功能来确保数据保护和法规遵从性,并发现的所有敏感数据都会与Microsoft Defender for Cloud共享。通过使用 Purview,您可以建立一个全面的数据治理框架,以改善数据可见性、控制和合规性。它通过提供一个集中平台来管理和治理数据资产,有效地解决与数据蔓延、数据隐私和法规要求相关的问题。
数据治理非常重要,因此在我们确定了敏感数据的位置之后,我们将看到如何使用 Azure 机器学习安全地与之合作。
让我们从数据的存储和检索开始。
在 Azure 机器学习中存储和检索数据
第一个任务是存储和检索 Azure 机器学习中的数据。您可以通过多种方式将数据带入机器学习。这包括从您的本地机器、互联网上的源,甚至是基于云的存储。在本节中,我们将探讨所有这些概念。
让我们看看如何与数据存储合作。
连接数据存储
如我们在第一章中介绍的 Azure 机器学习简介中提到的,数据存储作为对现有存储服务的引用,无论该服务是存储账户还是数据库。如果你已经有了对数据的引用或连接,这不是强制的,因为你也可以连接外部源,但连接数据存储有许多好处。首先,你有一个通用的方式将不同的数据源连接到你的工作区,而无需在脚本或代码的任何地方添加凭证信息,这在安全性方面是一种最佳实践。当你与团队一起工作时,拥有一个可以供每个人重用的相同数据源引用会更容易。当然,这也提供了一个使用可以与不同存储类型一起工作的 API 的通用直接方式。
当你创建数据存储时,你可以使用不同的身份验证方法。它可以是基于凭证的,也可以是基于身份的。基于凭证的身份验证意味着使用服务主体或共享访问签名(SAS)令牌进行身份验证,而在基于身份的身份验证中,你将使用你的 Microsoft Entra ID 身份或托管身份。在任何情况下,连接和身份验证信息都存储在工作区中。我们现在不会过多关注这一点,因为我们在下一章将分析你可以与机器学习一起使用的所有不同类型的身份验证选项。
每个工作区都有四个内置数据存储,这些数据存储被 Azure 机器学习用作系统存储。在“数据”菜单下的“数据存储”选项卡中,有两个 Azure Blob 存储数据存储和两个 Azure 文件数据存储。你可以从这里看到默认设置,或者设置另一个作为默认数据存储。
列表看起来会类似于以下截图:

图 4.6 – 内置数据存储
如果你想创建一个新的数据存储,当前可用的选项如以下截图所示:

图 4.7 – 创建数据存储选项
你可以从 Azure 门户、命令行界面(CLI)或 Python软件开发工具包(SDK)创建数据存储。目前,看起来你只能添加你具有访问权限的订阅中的数据存储。你可以随时添加或删除数据存储。记住,它们只是连接到拥有数据的服务的连接。因此,从工作区创建或删除数据存储实际上不会删除或创建任何服务,也不是强制的。此外,我们还需要确保所有连接的服务都使用它们自己的功能和最佳实践来确保安全。我们将在实验中使用数据资产。
让我们看看我们如何在工作区中创建数据资产,无论是从我们添加到工作区中的数据存储,还是从外部服务。
添加数据资产
在 Azure Machine Learning 中,数据资产指的是可以在机器学习工作流程中使用和管理的几种类型的数据。如果数据存储是数据源的联系,那么数据资产就是对实际数据的引用。您可以从数据存储、本地文件、公共 URL 或 Azure Open Datasets 创建数据资产。
如果可能,使用数据资产和数据存储一起使用,可以为我们提供几个安全和数据治理的好处。您可以使用相同的数据资产与您的团队协作,并通过您的训练代码无缝访问,而无需寻找不同的凭证或路径。数据资产支持版本控制,因此任何更新或数据处理都可以保存为新版本并重用。使用数据的管道或作业记录在工作区中,因此任何更改或更新都可以进行审计。
一旦创建数据资产版本,它就是不可变的,这意味着它不能被删除或编辑。因此,如果新版本的数据资产没有提供预期的结果,您始终可以回滚到之前的版本以进行工作。您可以使用来自旧 Azure Machine Learning API 的不同资产类型,但建议使用最新版本,即 Azure ML v2 API。
在 v2 中,您可以使用以下三种主要类型的数据资产:
- 
URI 文件:URI 文件指向一个特定的文件
 - 
URI 文件夹:URI 文件夹指向一个文件夹
 - 
MLTable:MLTable 指向一个文件夹或文件,并包含一个用于读取为表格数据的模式
 
选择取决于您拥有的可用数据和您选择的 ML 项目和算法类型。
无论数据类型如何,您都有三个可用的来源,如下面的截图所示:

图 4.8 – 创建数据存储选项
如果您选择从 URI作为您的来源,请确保端点是公开的,并且不受任何凭证的保护。如果您想选择现有的数据存储,可以选择从 Azure 存储选项。然后,如果您想要的数据存储尚未预先创建,您可以通过向导直接创建它,并在列表中找到文件路径。您还可以通过选择从本地 文件选项将您自己的文件上传到您选择的数据存储中。
最佳实践
在支持的情况下,请结合使用数据存储和数据资产。数据存储提供安全性,因为凭证存储在工作区而不是您的代码中。使用数据资产,您可以获得版本控制、可重复性、可审计性和血缘关系等能力,这些都是数据治理最佳实践的组成部分。
现在我们知道了如何将数据连接到工作区,让我们确保它在未使用和传输时都尽可能安全。
加密和保障数据
正如我们在上一节中看到的,Azure 机器学习依赖于外部服务来拉取数据作为数据资产。根据托管数据的服务,我们可以使用不同的安全和数据保护功能,例如加密、数据分类和数据掩码。
在本节中,我们将探讨与我们的数据相关的加密和分类功能。
静态加密
静态加密是指对存储在存储介质(如云存储)中的数据进行加密的实践,例如在存储介质中“静止”时。静态加密的目的是在存储介质被破坏、丢失或被盗的情况下,防止数据被未经授权访问。
当数据被静态加密时,它使用加密算法和加密密钥转换成不可读的形式。只有拥有适当解密密钥的授权用户或进程才能访问并解密数据,恢复到其原始的可读形式。没有解密密钥,加密数据对未经授权的个人来说仍然是不可理解的和无用的。
在 Azure 服务的背景下,Azure 为其许多存储服务提供了内置的静态加密,例如 Azure Blob 存储、Azure Data Lake Storage 以及 Azure 机器学习使用的数据库等。这些服务自动使用行业标准加密算法对静态数据进行加密。Azure 管理加密密钥并确保加密数据的安全性。
实施静态加密不仅提供安全性,而且构成了组织符合数据保护法规的一部分,加强了数据安全性,并减轻了数据泄露或未经授权访问敏感信息的风险。
让我们探索与 Azure 机器学习一起工作的数据服务中的那些功能。
Azure 存储
当我们创建一个 Azure 机器学习工作区时,你也会创建一个 Azure 存储账户。该服务将快照、输出和日志存储在默认存储账户中,该账户与 Azure 机器学习工作区和你的订阅相关联,并用作工作区文件系统。它还用于托管训练计算目标使用的训练数据。在训练过程中,它作为远程文件系统挂载到这些计算目标上。最后,如果你选择上传文件,它们将存储在你选择的存储中,这通常是一个 Azure Blob 存储。因此,了解如何保护你的 Azure Blob 存储账户是必要的。同样适用于 Azure Data Lake Storage,因为它本质上是一个升级的 Blob 存储账户。
Azure 存储帐户使用 Microsoft 管理的密钥进行静态加密。在这种情况下,Microsoft 在线服务自动生成并安全存储加密密钥。如果您想控制和使用自己的加密密钥,请打开 加密 菜单,该菜单位于 存储帐户 选项卡中,并切换到带有 客户管理的密钥 的加密选项,如图下所示:

图 4.9 – 创建数据存储选项
输入您的密钥托管的位置的密钥 URI 并点击 保存。
最佳实践 – 客户管理的密钥和 Azure Key Vault
使用 Azure Key Vault 服务生成和存储加密密钥。有关该服务的更多信息,请点击此链接:learn.microsoft.com/en-us/azure/key-vault/general/overview。
连接到 Azure Blob 存储的数据存储使用账户访问密钥进行访问。每个存储帐户有两个访问密钥。在您的 存储 帐户 选项卡的 访问密钥 菜单中找到您的密钥:

图 4.10 – 存储帐户访问密钥
您可以使用任一密钥在 Azure 机器学习中进行认证。这些密钥必须频繁轮换以保障安全。以下是轮换访问密钥的过程可能的样子。此过程适用于任何使用 访问密钥 进行认证的服务。

图 4.11 – 密钥轮换过程
您还可以使用 SAS 令牌来认证存储帐户;但是,请注意,SAS 令牌会过期,在过期日期之后,您将无法访问该存储帐户以与 Azure 机器学习一起工作。
要创建一个账户级别的 SAS 令牌,请转到 共享访问签名 菜单,该菜单位于 存储帐户 选项卡中,并生成一个令牌,如图所示:

图 4.12 – 生成账户 SAS
请注意包括适当的权限和服务可见性。一旦您对选择满意,您就可以回到 Azure 机器学习工作室,打开数据存储,通过点击 更新认证 按钮,您可以使用新的凭据更新数据存储。

图 4.13 – 在工作区中更新认证凭据
然而,存储帐户并不是我们唯一的数据库。让我们讨论更多选项及其功能,从 Azure 数据库开始。
Azure 数据库
Azure 中有很多数据库选项。大多数这些服务提供类似的安全选项,可以利用这些选项来保护符合加密和其他数据最佳实践的数据。
大多数关系数据库服务使用加密的方式类似于 Azure 存储账户 - 例如,Azure Database for PostgreSQL 和 Azure Cosmos DB,这是一个无 SQL 多模型数据库。这些服务默认启用加密,使用 Microsoft 管理的密钥,并且您始终可以选择通过启用 客户管理的密钥 选项并将密钥添加到 Azure Blob 存储账户来使用自己的密钥。Azure Database for MySQL 也提供了加密功能,使用 FIPS 140-2 认证的加密模块来加密静态存储中的数据。根据服务不同,您可能会发现更多安全功能,例如我们在 Azure SQL 数据库中拥有的那些。
让我们更深入地了解一下 Azure SQL 数据库的安全功能。
Azure SQL 数据库
Azure SQL 数据库提供了多种加密功能,以保护静态数据和传输中的数据。在加密方面,Azure SQL 数据库提供了多种选项。
- 透明数据加密(TDE):透明数据加密是 Azure SQL 数据库中的一个内置功能,可以自动加密静态数据。TDE 使用对称的 数据库加密密钥(DEK)加密数据库文件(例如,数据、备份和日志文件)。TDE 有助于保护数据免受未经授权的访问。
 
最佳实践 - Azure SQL 数据库中的 TDE
通过使用 TDE 和 自带密钥(BYOK)选项,您可以使用 Azure Key Vault 服务和客户管理的密钥来控制 TDE。
- 始终加密:始终加密是一种功能,允许您在 Azure SQL 数据库中加密敏感数据,如信用卡信息,无论是在静态存储还是在传输过程中。使用始终加密,数据在数据库中保持加密状态,只有拥有必要加密密钥的授权应用程序和用户才能访问和解密数据。数据的加密和解密在客户端进行,确保敏感数据永远不会以明文形式暴露给数据库引擎或管理员。
 
Azure SQL 数据库还提供了数据治理和保护功能,包括数据掩码和分类,以帮助保护敏感数据并管理数据隐私。让我们回顾 Azure SQL 数据库中的这些功能:
- 
数据分类:数据分类是 Azure SQL 数据库中的一个功能,可以帮助您在数据库中识别和标记敏感数据。它允许您根据预定义或自定义的分类标签对包含敏感信息的列进行分类。Azure SQL 数据库为常见的敏感数据类型提供了内置的分类标签,例如信用卡号、社会保险号或电子邮件地址。然后,您可以使用数据掩码功能来保护这些信息免受未经授权的访问。
 - 
数据掩码:数据掩码是一种功能,允许您在 Azure SQL 数据库中混淆敏感数据。它通过在查询结果中将原始值替换为掩码值来帮助保护敏感信息免受未经授权的访问。掩码规则包括部分掩码(例如,仅显示信用卡号的最后四位)或完全掩码(例如,用常数值或随机字符或星号替换原始值)。数据掩码在数据库级别运行,可以为包含敏感数据的特定列进行配置。这允许您控制对不同类型敏感数据应用的混淆程度。
 
最佳实践:Azure SQL 数据库数据分类和 Azure Purview
您可以使用 Azure SQL 数据库中的数据分类功能与 Azure Purview 一起发现、分类和管理组织内各种数据源中的数据。
数据集成服务
Azure 机器学习与许多数据集成服务一起工作,例如 Azure Data Factory、Azure Databricks 和 Azure Synapse Analytics。Azure Data Factory 允许您创建用于大规模数据集成和数据转换的数据驱动型工作流。它是一个无服务器且无需代码的平台,用于 提取-转换-加载(ETL)、提取-加载-转换(ELT)和数据集成。其管道可用于数据摄取,因此您可以使用它们与 Azure 机器学习一起使用。Azure Databricks 是一个基于 Apache Spark 运行数据科学工作负载的数据分析平台。在 Databricks 中创建的模型然后可以部署到 Azure 机器学习。这两个服务都提供内置加密,使用 Microsoft 管理的密钥或客户管理的密钥。
Azure Synapse Analytics 是一种无限制的分析服务,将大数据和数据仓库结合在一起。我们可以用它来摄取、准备、管理和为商业智能以及支持实现机器学习和与 Azure 机器学习集成的方式提供服务。根据您使用的池类型,有不同的加密选项。对于专用 SQL 池,您可以使用 TDE,而对于 Azure Synapse SQL 无服务器池或 Apache Spark 池,由于它们基于 Azure Data Lake Gen2(ALDS Gen2)或 Azure Blob Storage,您可以利用存储账户的安全选项。
我们看到了多个服务如何处理静态加密,但数据是需要在系统之间进行通信的,所以让我们来谈谈传输中的加密。
传输中的加密
传输中的加密是指在网络或通信通道中从一处传输到另一处时加密数据的行为。它确保数据保持安全并受到未经授权访问的保护。
当谈到 Azure 机器学习时,传输中的加密是保护数据以及平台不同组件之间通信的关键方面。
Azure Machine Learning 强制使用安全的通信协议,例如HTTPS(代表安全超文本传输协议)或TLS(代表传输层安全性),用于数据传输。这些协议在客户端应用程序、Azure Machine Learning 服务和其它组件之间建立加密连接,确保通过网络传输的数据被加密,并且不能轻易被拦截或篡改。
通过在 Azure Machine Learning 及其所有相关服务中实施静态和传输中的加密,以及其他安全功能,我们可以保护敏感数据并确保其在传输过程中的隐私和完整性。然后,我们可以防止未经授权的访问或干扰,增强机器学习项目的整体安全态势。然而,这仅仅是第一步。与任何安全问题一样,我们可以寄希望于最好的结果,但我们应该始终为最坏的情况做好准备。
让我们在下一节中探索如何部署护栏以确保在事件发生后可以恢复数据。
探索备份和恢复
备份和恢复是密切相关的概念,两者都是必要的,这样我们才能保护我们的数据。在本节中,我们将解释我们工作空间及其相关数据的备份和恢复选项。我们还将讨论如何处理备份选项不可用的情况。然而,在我们开始之前,让我们记住备份和恢复是什么。
备份指的是创建数据的副本或副本并将它们存储在单独的位置或介质中的过程。备份的目的是在数据丢失、意外删除、系统故障、灾难或其他不可预见的事件发生时提供恢复数据的方法。备份充当安全网,允许您将数据恢复到其先前的状态或特定的时间点。备份可以在不同的级别执行,例如完全备份(复制所有数据)、增量备份(仅复制自上次备份以来的更改)或差异备份(复制自上次完全备份以来的更改)。可以根据组织的需要和数据保护需求实施不同的备份策略和计划。
恢复,另一方面,指的是在数据丢失事件或任何导致数据不可用或损坏的其他事件之后,从备份中恢复数据的过程。恢复过程包括访问备份副本,并将数据恢复到数据丢失之前的状态,或一致的状态。恢复可以采取不同的形式,这取决于数据丢失的性质和实施的备份策略。这可能涉及恢复单个文件或目录,恢复整个系统或数据库,甚至将数据恢复到不同的位置或环境中。
让我们在下一节中探索我们的备份和恢复选项。
检查您的数据存储的备份选项
由于 Azure 存储作为工作空间的一个文件系统,因此我们需要确保和备份的最重要的事情。我们需要记住,工作空间不会对其数据存储提供任何保护,因此我们需要了解每个数据存储的基本功能。
在我们深入探讨每个服务的功能之前,我们可以再迈出一步,通过使用资源锁来防止意外删除我们的资源。
Azure 资源锁
Azure 资源锁允许用户对 Azure 资源应用限制,以防止意外删除或修改,为关键资源提供额外的保护和管理层。有两种类型的锁来防止删除和只读实例。过程极其简单。您在资源、资源组或订阅上创建锁,除非他们有适当的权限临时移除锁以进行更改,否则没有人可以做出任何更改。
要创建资源锁,找到您所需资源的锁菜单,然后点击下面的添加按钮,如图所示:

图 4.14 – 添加资源锁
添加一个锁名称、锁类型,如果您想的话,还可以添加一些备注。一旦您点击确定,资源就不能被删除或更改,具体取决于锁类型。我们有只读锁和删除锁可用。
Azure 资源锁并不是一个备份解决方案,它们只保护资源,而不是数据,因此让我们来回顾我们的选项。
Azure 存储
在我们用于机器学习的存储帐户中,有多个级别来保护数据。有 blob 容器、blob 本身和文件共享。
以下的一些功能适用于存储帐户的一个或多个级别。让我们探索每个功能:
- 
不可变策略:在容器级别和 blob 级别,您可以启用不可变策略,这有助于您强制执行一个时间段,在此期间您的数据受到修改或删除的保护。不可变策略不仅用于数据保护,还提供审计和监控。它们应该是您治理过程的一部分,因为它们可以确保符合法律和合规要求以及数据保留。
要在容器级别启用不可变策略,请在存储帐户中打开选定的容器刀片,然后点击访问策略。在不可变 Blob 存储部分,点击+ 添加策略。在策略类型下拉菜单中选择基于时间的保留,添加无法修改 blob 的天数,然后点击保存。
 

图 4.15 – 新的不可变存储策略
- 
软删除:在容器和 Blob 级别,您也可以启用软删除。软删除通过允许您在指定的时间范围内恢复已删除的 Blob 或容器,提供额外的数据保护层,从而降低意外数据丢失的风险。它在需要保留和可恢复数据的情况下特别有用,例如合规性要求、意外删除或数据恢复需求。
要启用软删除,请转到存储帐户选项卡中的数据保护部分,并通过勾选相应的复选框启用 Blob 和容器的软删除,如图下所示。填写每个选项的保留天数,并点击保存。
 

图 4.16 – 启用软删除
要恢复 Blob,请转到容器并启用显示已删除Blob 按钮。然后,选择已删除的 Blob,并从右侧的三点菜单中选择恢复。

图 4.17 – 恢复 Blob
- 
时间点恢复:容器和 Blob 也支持时间点恢复,这意味着您可以将 Blob 或容器恢复到删除前的状态。这在应用程序或系统进行多次删除或意外更改,且难以找到每个单独的文件或容器进行恢复的情况下很有用。在这种情况下,备份是连续的。
要启用时间点恢复,请转到存储帐户选项卡中的数据保护部分,并通过勾选相应的复选框启用容器的时点恢复,如图下所示。填写最大恢复点天数,并点击保存。
 

图 4.18 – 启用时间点恢复
要将容器恢复到之前的时间点,请选择容器并点击恢复容器按钮。然后,选择一个之前的时间点。此操作不可撤销,因此请确保您明智地选择。

图 4.19 – 恢复到之前的时间点
- 
分层备份(操作和分层):分层备份使用对象复制将 Blob 复制到外部备份库。此过程是异步的,需要外部 Azure 备份库资源。要恢复对象,我们可以启动恢复操作。备份可以是操作性的(连续的)或通过创建自定义策略进行定期备份。
要启用分层备份,请转到存储帐户选项卡中的数据保护部分,并点击启用 Azure 备份用于 Blob复选框。如果您已经有一个备份库,您可以在下拉菜单中选择它;否则,选择创建并填写库名称、资源组和备份存储冗余选项,如图下所示。
 

图 4.20 – 启用 Azure 备份
然后,选择备份策略。如果您已经有了,您可以选择它;否则,点击创建新。

图 4.21 – 创建或选择备份保险库
为策略提供一个名称,并确保数据源类型选项为Azure Blob。然后,点击下一步。

图 4.22 – 创建策略
设置操作和保险库备份的调度和保留。

图 4.23 – 配置操作备份
对于此示例,我们使用的是每周备份计划,如图下所示。

图 4.24 – 配置保险库备份
最后,如有必要,我们可以通过点击选择容器链接,然后点击保存来过滤此备份中包含的容器。

图 4.25 – 选择策略和过滤容器
要恢复,请从备份保险库的概览选项卡启动恢复操作。

图 4.26 – 启动恢复操作
软删除和成本管理
软删除数据继续占用存储空间,并在保留期间相应计费。然而,与活动数据存储相比,存储成本通常较低。保留期过后,软删除数据将自动清除,您将不再为此承担任何存储费用。
- 
对象复制:对象复制本质上是从容器或整个存储账户复制数据到同一区域或不同区域的另一个存储账户。这样,如果发生什么情况,您可以保留数据的两份副本。这是在不将数据下载到其他介质并重新上传的情况下备份数据的好方法。
要设置它,请点击存储账户选项卡的对象复制部分,然后点击创建复制规则按钮。在您继续之前,您需要已经创建了一个第二个存储账户来复制数据和必要的目标容器。
 

图 4.27 – 添加对象复制
在创建复制规则屏幕上,选择存储账户的目标位置,创建源到目标容器的映射,以便对象被复制到相应的容器中,然后点击保存,如图下所示。

图 4.28 – 选择目标存储账户和容器映射
最佳实践
在上述选项中,对于 Azure 机器学习来说,最佳组合是在不同区域或存档备份的存储账户中的对象复制。这些选项可以保护我们免受区域灾难的影响。此外,使用带有删除资源锁的软删除功能,可以防止资源和意外数据删除。不可变规则可能会干扰 Azure 机器学习工作区的功能,因此我不建议使用,除非是法律保留。
前面的选项是可行的;然而,你也可以使用跨平台的命令行工具AzCopy或数据集成服务,如 Azure 数据工厂,来实现相同的目标。请记住,在这种情况下,你实际上是在另一个存储账户中复制你的数据,这会伴随着额外的成本。
AzCopy
AzCopy是由 Microsoft 提供的命令行工具,允许你将数据传输到和从 Azure 存储服务。它通常用于大规模数据迁移场景,以及在不同 Azure 存储账户或 Azure 区域之间传输数据。该工具适用于 Windows、Linux 和 macOS,可以从命令行或集成到脚本或自动化工作流中执行。要开始使用此工具,请访问此链接:https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10。
如果你正在使用关系数据库或任何其他数据服务,它们也有各自独立的备份和恢复选项,所以请确保你审查一切。大多数服务默认都启用了默认设置,所以你不会完全没有保护,但其他服务为了安全需要比其他服务更多的配置。
让我们看看如何恢复你 ML 项目最重要的部分,即 Azure 机器学习工作区本身。
恢复工作区
外部服务可能不是你唯一需要能够恢复的东西。也许最重要的事情是 Azure 机器学习工作室工作区。工作区是一个中心点,你在这里管理从你的数据资产到正在运行的工作和发布供应用程序消费的模型的一切。
Azure 机器学习工作空间默认支持软删除。此功能允许你在意外删除后恢复工作空间数据。然而,在这种情况下,它的工作方式与 Azure 存储账户不同。当你创建并在此工作空间中工作时,有许多组件连接到工作空间。并非所有内容都可以进行软删除;其中一些项目将被永久删除,而且无法恢复。可恢复的项目包括运行历史记录、模型、数据、环境、组件、笔记本、管道、数据标注和数据存储。任何排队或正在运行的作业、角色分配、计算、推理端点和任何链接的 Databricks 工作空间都将被硬删除。这意味着即使你尝试恢复软删除的工作空间,这些项目也无法恢复。
软删除默认保留期为 14 天。在这 14 天后,任何剩余的数据将从系统中清除,并且工作空间将无法恢复。然而,即使在那些 14 天之间,也无法保证完全恢复。你可能能够恢复大量数据和笔记本,但你仍然可能需要重新创建任何正在运行的作业或其他内容。
恢复工作空间的过程很简单。你所需要做的就是转到 Azure 机器学习类别,从页面顶部,你会找到最近删除按钮来查看在保留期内的软删除工作空间。从那里,你可以选择恢复或永久删除工作空间,如下面的截图所示:

图 4.29 – 恢复或删除工作空间
你可以始终覆盖默认的软删除工作空间行为,并在首次尝试删除服务时选择永久删除,如下面的截图所示:

图 4.30 – 添加资源锁定
最佳实践 – Azure 机器学习工作空间恢复
使用资源锁定来保护你的资源免受意外删除或修改,而不是依赖软删除进行恢复。即使恢复成功,你仍然会丢失大量数据和配置。
尽管数据备份非常重要,但它只是我们需要采取的预防措施之一,以保护我们的资产。我们还需要了解如何恢复数据及其相关资源,这是我们安全基线的一部分,这个过程必须在特定间隔进行测试,以便在需要时做好准备。测试恢复过程还将帮助我们衡量完全恢复所需的时间以及它对日常运营的影响。例如,如果任何停机时间不可接受,我们可能需要利用其他措施。
摘要
一切都基于数据,所以如果你从事机器学习工作,拥有一个清晰的数据地图,了解你的数据在哪里存储、其敏感程度以及如何保护它,应该是你的首要任务。因此,尽管与模型和算法一起工作可能是机器学习中最激动人心的部分,但拥有一个数据治理和保护计划将帮助你避免与数据相关的问题。CDMC 框架是一个非常全面的策略,你可以特别用于云数据,但就像往常一样,它不是唯一的选择。构建你自己的数据策略政策最终是你的决定,并且结果将始终是有益的,这取决于你所属的行业和地区。
一旦你决定了一个策略,Azure 中就有许多可用于治理的工具,例如 Azure 策略、Azure 蓝图、成本管理和 Microsoft Purview,每个都有自己的优点和局限性。由于工具可能会出现和消失,而数据治理不是一个一次性过程,所以不要害怕从小处开始,然后随着不同需求的产生逐步添加或改进。
此外,尽管规划和策略听起来很令人兴奋,但启动一个新项目就是采取行动的时候了。在 Azure 机器学习中加密和保护数据是一个影响多个服务的过程,我们需要利用每个服务的优势和功能,以拥有一个完全安全和高效的系统。
在本章中,我们只是简要地了解了几个相关数据服务及其安全功能。备份和恢复选项以相同的方式工作,并且需要与 Azure 机器学习工作区的安全和备份选项相结合。但这还没有结束。我们仍然需要涵盖我们的网络、基础设施、DevOps 等方面的安全最佳实践。在我们能够做到这一点之前,让我们去看看我们如何将我们的数据保护扩展到与数据隐私和负责任的 AI 最佳实践一起工作,在下一章中。
第五章:数据隐私和负责任 AI 最佳实践
在上一章中,我们讨论了如何为我们组织构建数据治理计划以及如何识别敏感数据类型。我们的工作并没有停止在那里。尽管在某些情况下我们可以安全地排除敏感信息,但在其他时候我们却不能。因此,我们解决问题的机器学习(ML)模型可能需要包含个人数据。有时这些数据可能是相关且有用的,或者它们可能产生意外的相关性,导致模型偏差。这就是本章我们将要解决的问题。
我们将讨论如何识别敏感信息,以及如果这些信息与模型训练过程无关,如何使用差分隐私等技巧来减轻其影响。我们将探讨如何保护个人信息,即使是从汇总数据或模型结果中。为了帮助我们做到这一点,我们将了解如何使用 SmartNoise 软件开发 套件(SDK)。
我们还将讨论公平性以及你如何识别模型预测中的偏差。在这里,我们将应用我们共同学习的负责任 AI 原则,以及 Fairlearn 库和负责任 AI 仪表板。与偏差相伴而来的是模型可解释性。我们将一起分析如何通过生成特征重要性值来计算哪些特征会影响你模型的全球或个体预测。
最后,我们将总结解释联邦学习(FL)和安全多方计算,以保护跨组织机器学习场景中的敏感数据。
在本章中,我们将讨论以下主要主题:
- 
发现和保护敏感数据
 - 
介绍差分隐私
 - 
缓解公平性问题
 - 
与模型可解释性合作
 - 
探索联邦学习和安全多方计算
 
到本章结束时,你将能够保护你的数据免受偏差和隐私问题的侵害,同时不会影响预测的质量。
技术要求
本章的代码存储在本存储库的ch5文件夹中:
github.com/PacktPublishing/Machine-Learning-Model-Security-in-Azure/
使用 Python 进行工作
要使用这些库,你需要熟悉 Python。在这本书中,我们将使用 Azure Machine Learning 环境中的笔记本来运行示例,但如果你更喜欢使用自己的开发环境和工具,那也是可以的。
开始使用 Python
如果你是 Python 和 ML 的新手?请查看这个学习路径,了解 Python 的基础知识:learn.microsoft.com/en-us/training/paths/beginner-python/。
在 Azure Machine Learning 中运行笔记本
在 Azure Machine Learning 中运行笔记本的过程非常简单。您需要做的只是导入或创建界面中的工作簿,附加计算目标,然后运行单元格。让我们一起来查看步骤:
- 前往笔记本部分并上传或创建您的文件:
 

图 5.1 – Azure 机器学习笔记本
- 打开笔记本文件,并从计算下拉菜单中附加一个正在运行的计算目标:
 

图 5.2 – 将计算目标附加到笔记本
- 按照常规运行笔记本中的单元格。
 
安装 SmartNoise SDK
SmartNoise SDK (smartnoise.org/) 是一个差分隐私工具包,您可以在机器学习或分析中使用它。在这里,我们将看到如何安装库以便在本书的后续部分使用它。
要安装 SmartNoise SQL,请运行以下命令:
pip install smartnoise-sql
要安装 SmartNoise Synthesizers,请运行此命令:
pip install smartnoise-synth
SmartNoise 文档
在这里可以找到完整的文档:docs.smartnoise.org/.
安装 Fairlearn
Fairlearn 可以通过以下命令从 PyPI 使用 pip 安装:
pip install fairlearn
Fairlearn 文档
在这里可以找到完整的文档:fairlearn.org/.
发现和保护敏感数据
虽然良好的治理和与多个数据处理工具合作可以帮助我们在敏感数据发现、分类和配置文件方面取得进展,但很多时候,我们机器学习实验中使用的数据来自外部来源,或者我们可能只是在为我们的组织开发。在这种情况下,我们需要了解什么是敏感数据,以及如果需要使用 Azure Machine Learning,如何快速清理。
识别敏感数据
敏感数据是指任何如果泄露可能会造成伤害、隐私泄露或导致身份盗窃、经济损失或其他对个人或组织的不利后果的信息。由于其性质和披露相关的潜在风险,此类数据需要特殊保护。
敏感数据有许多类别,其中许多将在下面概述,包括我们需要注意的示例:
- 
个人可识别信息(PII):可以用来识别个人的信息,例如全名、出生日期、社会保险号码、驾照号码、护照号码等。
 - 
财务信息:信用卡号码、银行账户详情、财务交易记录等。
 - 
健康信息:医疗记录、健康保险信息、心理健康记录以及其他与健康相关的数据。
 - 
密码和认证数据:用户名、密码、安全问题或用于访问系统或账户的任何其他凭证。
 - 
生物识别数据:指纹、视网膜扫描、面部识别数据和其他生物识别标识符
 - 
机密商业信息:商业机密、知识产权(IP)、财务报告、客户名单、专有算法等等
 - 
政府机密信息:政府出于国家安全原因进行分类的信息
 - 
个人通讯:私人消息、电子邮件和其他个人期望保密的通讯
 - 
社会和人口信息:种族、民族、宗教、性取向和其他敏感的人口数据
 - 
地理位置数据:个人或资产的精确位置数据
 
我们可以排除一些数据,使其不进入我们的机器学习过程。例如,如果我们正在训练一个预测糖尿病的模型,我们不需要患者数据,只需要症状数据。在这种情况下,我们可以通过使用下一节中将要探讨的技术,安全地从数据集中排除这些信息。但如果我们正在训练一个用于识别面部的模型,我们需要实际的生物识别数据。
让我们看看一些帮助我们清理敏感数据的技术,以便它不会被机器学习模型所知。
探索数据匿名化
数据匿名化是一个从数据集中移除或模糊化 PII(个人身份信息)的过程,以保护个人的隐私,同时仍然保持数据在分析和研究目的上的整体有用性。目标是确保数据不能追溯到特定的个人。
这里有一些在数据匿名化中常用的技术:
- 
移除直接标识符:最直接的方法是从数据集中移除直接标识符,如姓名、社会保障号码、电话号码、电子邮件地址等。我们可以使用一个唯一的识别号来标识每条记录以保持唯一性或相关性,但任何可以识别个人的信息都将被完全移除。
 - 
化名化:将敏感数据替换为化名或随机生成的标识符的过程称为化名化。目标是模糊化数据集中个人或实体的原始身份,同时允许使用化名化数据继续进行数据处理和分析。与完全匿名化不同,化名化保留了原始数据的结构和格式,使其在某些目的上仍然有用,同时保护隐私。这样,原始数据仍然存在于数据集中,但与特定个人的联系已被切断。
 
最佳实践 - 将化名化与其他技术相结合
化名化是一种非常好的增强隐私的技术,但并不保证。如果额外的信息或外部数据集可以与化名化数据相结合,个体的识别仍然可能发生。因此,将化名化与其他安全措施相结合以有效保护敏感数据是很好的。
- 
数据掩码或标记化:这种技术与匿名化非常相似,但不是加密或替换敏感数据,而是用随机生成的标记或符号替换数据值。例如,如果存在信用卡号码,所有数字除了最后四位将被星号符号替换。数据掩码或标记化可能导致对机器学习过程无用的数据。因此,你可能希望完全删除数据。
 - 
泛化或聚合:这涉及到将数据分组到更广泛的类别中,以减少细节水平,同时仍然保留整体模式和趋势。这种技术在数据匿名化中常用于保护个人隐私。泛化或聚合的目标是在数据效用和隐私之间取得平衡。虽然它降低了直接识别个人的风险,但仍然为分析和研究提供了有价值的见解。然而,重要的是要仔细考虑泛化的程度,以避免潜在的重新识别风险,尤其是在与其他可用信息结合使用时。以下是一些泛化或聚合的例子:
- 
年龄范围:而不是使用确切的年龄,数据可以泛化到如 18-24、25-34、35-44 等年龄范围。这样保持了关于年龄组的信息,而不透露确切的年龄。
 - 
地理聚合:而不是使用精确的地址,数据可以在城市、州或国家级别进行聚合。例如,纽约 可以代表城市内各个社区的数据。
 - 
收入区间:而不是确切的收入值,数据可以分组到如 低收入、中等收入 和 高收入 等收入区间。
 - 
时间间隔:时间数据可以聚合到如天、周或月的时间间隔中,而不是使用确切的日期和时间戳。例如,Q1 2023 可以代表从 一月 到 三月 的数据。
 - 
教育水平:而不是具体的学位,数据可以根据如 高中文凭、学士学位、硕士学位 等教育水平类别进行分组。
 - 
产品类别:销售数据可以在产品类别级别进行聚合,而不是列出单个产品;例如,电子产品、服装 和 家具。
 - 
客户细分:数据可以根据客户行为或特征进行分组,例如 常客购物者、新客户 或 高消费客户。
 - 
交易金额范围:金融数据可以分组到如 $0-$50、$50-$100 等范围,而不是精确的交易金额。
 - 
健康状况:医疗数据可以聚合到更广泛的健康状况类别中,而不是指定个体诊断;例如,心血管、呼吸系统 和 神经系统。
 - 
Web 浏览模式:基于网站类别(例如,新闻、娱乐、购物)而不是记录每个访问的网站,可以对互联网浏览数据进行汇总。
 
 - 
 
删除、合并或屏蔽敏感信息不是唯一的选择。当我们需要使用敏感数据来训练模型时,还有其他技术可以保护数据或以保护任何敏感信息的方式操纵数据,同时不会限制我们模型的可能性。
让我们探讨如何在不从数据集中删除数据的情况下保护个体数据的隐私。
介绍差分隐私
差分隐私是一个旨在保护单个数据贡献者隐私的同时,仍然允许进行有用统计分析的概念。差分隐私背后的基本思想是在数据中添加噪声或随机扰动,使得数据集的统计属性保持不变,但识别数据集中个体信息变得更加困难。
差分隐私中的隐私保护级别由一个称为 epsilon(ε)的参数控制。epsilon 值越小,表示隐私保护级别越高,但也可能导致数据效用(数据用于分析的有用性)降低。在隐私和效用之间取得平衡是实现差分隐私的关键挑战:

图 5.3 – Epsilon(Ɛ)值与隐私和准确性的关系
我们可以使用 SmartNoise SDK 来向数据添加噪声。SmartNoise 是一个开源 SDK,旨在在各种数据分析和工作流程中实现差分隐私。它由 OpenDP 开发,旨在使数据分析师、研究人员和数据科学家更容易将差分隐私技术应用于他们的数据,而无需深入了解底层数学复杂性。
SmartNoise SDK 提供了一套工具和实用程序,可以集成到现有的数据分析和工作流程中,以确保隐私保护的计算。它提供了一个抽象层,用于向计算添加差分隐私,允许数据分析师轻松指定隐私参数(如 epsilon),并应用隐私保护机制,而无需直接处理差分隐私算法的复杂性。
您可以使用不同的组件,以下是文档中的官方推荐:
- 
当使用 Jupyter 笔记本和可重复研究或需要精细控制处理和隐私时,直接使用OpenDP。
 - 
如果您正在处理大型数据集或存储在 SQL 数据库或 Spark 中的表格数据的数据立方体,请使用SmartNoise SQL。
 - 
如果您仍在研究过程中,并希望看到与其他合作者合作的结果,请使用SmartNoise Synthesizers。
 
在这里,我们将通过使用 SmartNoise SQL 来举一个例子:
- 
首先,你需要通过运行以下命令安装 SmartNoise SQL:
diabetic column that declares if the person is diabetic or not and an age column:import pandas as pd
data_path = 'mockdata.csv'
mockdata = pd.read_csv(data_path)
actualdata = mockdata[['age','diabetic']].groupby(\
['diabetic']).mean().to_markdown()
print(actualdata)
By running this cell, we get the true average age for diabetics and non-diabetics. - 
让我们看看当我们向数据添加噪声时会发生什么。首先,我们需要声明 epsilon 变量。我们将执行此代码多次,首先使用低 epsilon 值以获得更高的隐私性(
0.05),然后使用高 epsilon 值以提高准确率(0.90),并比较结果:import snsql from snsql import Privacy import pandas as pd privacy = Privacy(epsilon=0.05, delta=0.01) csv_path = 'mockdata.csv' meta_path = 'mockdata.yaml' mockdata = pd.read_csv(csv_path) reader = snsql.from_df(mockdata, privacy=privacy, \ metadata=meta_path) result = reader.execute('SELECT diabetic, AVG(age) \ AS age FROM mockdata.table GROUP BY diabetic') print(result) 
我们可以在下表中看到前面代码多次执行的比较,非糖尿病和糖尿病患者的平均年龄几乎相同(大约 47 岁),但当我们使用具有不同 epsilon 值的 SmartNoise SDK 库时,结果开始从 1%到 15%不等,具体取决于使用的 epsilon 值。这个百分比可能看起来很高;然而,我们决定隐私和准确率之间的平衡。库唯一保证的是保持统计一致性:
| 实际平均 年龄 | 执行 1 平均年龄 | 执行 2 平均年龄 | 执行 3 平均年龄 | 执行 4 平均年龄 | |
|---|---|---|---|---|---|
| Epsilon 值 | N/A | 0.05 | 0.05 | 0.90 | 0.80 | 
| 非糖尿病患者 | 47.4101 | 54.2823275862069 | 53.209829867674856 | 47.72727272727273 | 47.38953488372093 | 
| 糖尿病患者 | 47.4741 | 42.19132149901381 | 44.00204081632653 | 47.36438923395445 | 47.616977225672876 | 
表 5.1 – 数据集结果
你可以在之前在技术要求部分提到的书籍仓库中看到如何运行这个笔记本。这样,我们可以在不损害模型结果的情况下保护数据的隐私。然而,当我们试图保护的数据实际上影响了预测,导致负面影响时,会发生什么呢?
让我们看看我们如何确保我们的数据是私密的,并且模型也为不同的敏感群体提供公平的结果。
缓解公平性
在机器学习模型中缓解公平性是确保模型不会对某些个体群体表现出偏见或歧视的必要步骤。尽管我们可以从数据集中移除 PII,但预测可能会根据种族、性别、年龄或宗教等特征偏向不同的群体。如果训练数据不具有多样性,也不能代表你希望服务的群体,那么如果数据不能充分代表所有群体,偏见就可能渗入模型。
首先,我们需要学会识别模型中的偏见。通过分析模型的指标,这很容易做到。假设你怀疑你的贷款批准模型倾向于让年龄超过一定的人获得贷款申请批准。你可以从查看以下完整数据集的指标开始:
| 选择率 | 准确率 | 召回率 | 精确率 | |
|---|---|---|---|---|
| 完整数据集 | 0.337 | 0.8895 | 0.8385650224215246 | 0.8323442136498517 | 
表 5.2 – 数据集指标
现在,按年龄组计算相同的指标。我们可以通过使用 Fairlearn 等库来完成这项工作。分割后的结果如下:
| 选择率 | 准确率 | 召回率 | 精确率 | |
|---|---|---|---|---|
| 30 岁或以下 | 0.299282 | 0.890668 | 0.818519 | 0.815498 | 
| 年龄超过 30 岁 | 0.698413 | 0.878307 | 0.922481 | 0.901515 | 
表 5.3 – 每个年龄组的指标
指标解释
指标是特定于模型类型的。前面的指标是针对分类模型的。您可以在以下位置找到不同模型的指标列表和解释图表:learn.microsoft.com/en-us/azure/machine-learning/how-to-understand-automated-ml?view=azureml-api-2.
从这些指标中,您应该能够辨别出,预测获得贷款批准的老年人数比例较大。两组的准确率应该大致相等,但更仔细地检查精确率和召回率表明,模型对每个年龄组的预测能力存在一些差异。
在这个场景中,考虑召回率。这个指标表示模型正确识别出的正例所占的比例。换句话说,对于所有应该获得贷款批准并且实际上确实获得批准的个人,模型找到了多少?模型似乎在老年年龄组中做得更好。
那么,我们现在该怎么做?我们是否尝试纠正数据和模型以在两组之间进行平等预测?简短的答案是还不行。我们需要首先考虑上下文,并评估模型表现出这种行为的理由,以及这是否合理。记住,指标只是指标,解释它们的责任在我们。也许我们的模型偏好老年年龄组,因为他们更经济稳定。在我们做出决定之前,我们需要进行更多的调查,因为这种识别出的偏差可能是合理的。假设我们有一个偏好浅色皮肤人群的肤色识别应用程序,那么这将是一个明显的偏差,需要纠正。上下文和模型的目的将定义我们的下一步行动。
Fairlearn
Fairlearn 是一个开源项目,旨在帮助机器学习工程师和数据科学家提高人工智能系统的公平性。它可以通过提供可以比较不同组和整体人群的公平性相关指标来协助。为了计算这些指标并进行调查,Fairlearn SDK 非常有帮助。它将每个敏感组的指标分解开来,然后您可以使用公平性仪表板来完成您的评估,因为直观地查看数据总是有帮助的。
Fairlearn SDK 和 Azure Machine Learning
在撰写本文时,此功能处于预览阶段,因此您可以在 Azure Machine Learning 环境中看到局限性和应用:learn.microsoft.com/en-us/azure/machine-learning/how-to-machine-learning-fairness-aml?view=azureml-api-1。Fairlearn 项目的文档可以在这里找到:fairlearn.org/。
在这里,您可以看到一个使用可视化仪表板的工作流程示例。您可以在笔记本中生成 UI,看起来像这样:

图 5.4 – 公平性仪表板主页面
您还可以将模型注册到您的空间,并将仪表板数据上传以进行评估,如下面的截图所示。在向导的帮助下,这个过程会容易得多:
- 第一步是选择敏感特征;例如,年龄列:
 

图 5.5 – 步骤 1:选择您的敏感特征
- 第二步是选择一个指标来评估,以便检查任何可能的偏差。根据模型算法,您可能在这里获得不同的指标以供选择:
 

图 5.6 – 步骤 2:选择主要指标以衡量性能
- 在第三和最后一步,您设置要衡量公平性的对等约束;例如,人口统计学对等或选择率:
 

图 5.7 – 步骤 3:选择您想要如何衡量公平性
服务基于参数运行分析,并返回我们可以用来确定模型是否基于敏感特征偏向一个或多个群体的结果:

图 5.8 – 查看结果
注意
在撰写本文时,与 Fairlearn 开源包的集成仅支持 azureml v1 Python SDK。
总是记住,完全的公平性可能并不总是能够实现,不同公平性目标之间可能存在权衡。我们需要确保模型在数据集中的所有敏感群体中都能良好地表现。关键是就公平性权衡做出明智的决定,并持续努力提高模型公平性。
负责任的人工智能的另一部分是解释模型如何进行预测的能力。让我们在下一节中看看一些技术。
与模型可解释性一起工作
机器学习中的模型可解释性指的是理解并解释特定模型如何做出预测或决策的能力。可解释的模型为我们提供了关于模型决策过程中哪些特征或变量最具影响力的清晰见解。这在决策过程需要透明和可理解的领域尤为重要,例如医疗保健、金融和法律系统。
虽然你永远无法解释 100%为什么模型做出某个预测,但你可以使用解释器来理解哪些特征影响了结果。解释器可以帮助我们提供全局解释;例如,哪些特征影响了模型的总体行为,或者局部解释,它为我们提供了关于什么影响了单个预测的信息。
让我们探索一些我们可以使用的方法来实现模型可解释性:
- 
特征重要性(FI)决定了每个特征对模型预测的影响程度。以下是一些可以使用的技巧:
- 
置换特征重要性(PFI):这种方法涉及随机打乱每个特征值,并测量对模型性能的影响。在打乱后性能下降最大的特征被认为是更重要的。
 - 
SHapley Additive exPlanations (SHAP) 值:SHAP 值基于合作博弈论提供了一个统一的特征重要性的度量。它们在预测中为每个特征分配贡献,考虑了所有可能的特征组合。
 - 
局部可解释模型无关解释(LIME):LIME 通过扰动数据并观察对预测的影响,在特定预测周围创建局部可解释模型。它有助于解释任何模型的单个预测。
 
 - 
 - 
部分依赖图(PDP)和个体条件期望(ICE)通过不同的技术测试特征对模型的影响:
- 
PDP 绘制了在保持其他特征不变的情况下,单个特征对模型预测的平均影响。
 - 
ICE 绘制了多个个体 PDP,每个实例一个,提供了关于特征如何影响不同实例的更细致的视图。
 
 - 
 - 
基于规则的模型:决策树和线性模型本质上是可解释的,因为它们的结构可以轻松可视化和理解。
 - 
代理模型:训练一个更简单、可解释的模型来近似更复杂模型的行为。这允许在不牺牲太多准确性的情况下更好地理解。
 - 
可视化:如热图、显著性图和激活图等可视化方法可以帮助理解模型如何处理和权衡不同的输入特征。
 - 
层相关传播(LRP):LRP 是一种在 神经网络(NNs)中使用的技巧,用于理解哪些输入特征对特定输出贡献最大。
 
我们选择的方法取决于我们的模型及其创建时使用的风味。让我们看看 Azure Machine Learning 中模型可解释性的选项。
探索负责任的 AI 仪表板
要在 Azure Machine Learning 中使用可解释性,您可以使用 v1 SDK 的 Interpret-Community 包,或者建议使用更新的版本,它是新负责任的 AI 仪表板的一部分。
让我们探索可用的功能:
Azure Machine Learning 中的模型可解释性
在以下文档中了解更多关于 Azure Machine Learning 中的 Interpret-Community 包以及常见解释器的工作方式:learn.microsoft.com/en-us/azure/machine-learning/how-to-machine-learning-interpretability?view=azureml-api-2#supported-model-interpretability-techniques.
- 您可以通过访问模型菜单下的注册模型,选择负责任的 AI选项卡,然后点击创建仪表板按钮,在 scikit-learn 生成的 MLflow 格式模型中生成仪表板,如图所示:
 

图 5.9 – 创建负责任的 AI 仪表板
MLflow 模型
MLflow 是一个开源平台,旨在通过提供一致且易于使用的框架来管理端到端的机器学习生命周期,使数据科学和机器学习团队更容易进行协作和可重复性。更多信息请在此处查看:mlflow.org/.
- 仪表板生成后,您可以在列表中点击它以查看更多详细信息:
 

图 5.10 – 打开仪表板
- 仪表板提供了大量信息,不仅有助于可解释性,还有关于公平性、数据分布和单个预测的指标。除了数据外,还有许多可视化工具可以帮助您分析模型,如图所示。请确保您遵守负责任的 AI 开发原则:
 

图 5.11 – 查看指标
- 
当涉及到模型可解释性时,您可以看到完整数据集和单个预测的 FIs。您可以根据需要调整类别重要性权重和图表,以更好地理解模型。
在下一张截图中,我们可以看到样本糖尿病数据集的全局 FIs:
 

图 5.12 – 查看 FIs
模型可解释性是简单性和准确性的平衡。高度可解释的模型可能会牺牲一些预测性能,而非常复杂的模型可能难以全面解释。可解释性方法的选择取决于具体用例、受众以及模型复杂性和透明度之间的权衡。
使用 SDK 生成 AI 仪表板
要使用 SDK 通过 YAML 和 Python 构建 AI 仪表板,进一步资源请参阅此处:learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-insights-sdk-cli?view=azureml-api-2&tabs=yaml.
我们迄今为止看到的所有技术都集中在拥有一个数据集,该数据集在一个计算资源上训练以生成结果模型。在下一节中,我们将看到一些专注于在不同计算源之间分割模型训练和数据集的技术。
探索联邦学习和安全多方计算
联邦学习是一种机器学习方法,它使模型能够在多个设备或服务器上训练,而无需集中聚合原始数据。在传统的机器学习中,数据通常被收集并发送到中央计算服务器进行训练,这引发了隐私和安全问题,尤其是在处理敏感或个人信息时。
在联邦学习中,训练过程发生在本地设备或节点(例如智能手机、边缘设备或计算实例)上,这些设备或节点生成或存储数据。这些节点通过仅共享模型更新(梯度)而不是原始数据本身来协作。中央计算服务器将这些更新聚合起来,以创建一个改进的全局模型。这个过程是迭代重复的,每个节点都为模型改进做出贡献,同时保持其数据隐私。
联邦学习的主要优势如下:
- 
隐私:由于原始数据保留在本地节点上,因此无需与中央服务器共享敏感信息,从而降低了数据泄露和违规的风险
 - 
减少数据传输:联邦学习减少了需要通过网络发送的数据量,这在处理大型数据集或带宽限制时可能是有益的
 - 
去中心化:模型训练过程可以分布到大量节点上,使分布式环境中的可扩展性和鲁棒性得到增强
 - 
本地自适应:节点可以在考虑其本地数据分布的同时更新全局模型,从而产生更相关且针对特定本地特征的模型
 
联邦学习在数据隐私和安全至关重要的场景中特别有用,例如医疗保健和金融服务,以及可以在物联网(IoT)应用中分布式处理的情况。它为我们提供了利用分布式数据源集体知识的机会,而不会损害单个用户的隐私。
让我们快速了解联邦学习及其在 Azure Machine Learning 中的应用。
使用 Azure 机器学习的联邦学习
在云端工作时,联邦学习可能比你想象的要容易。随着按需计算和处理能力的到来,带来了许多好处。特别是使用 azureml SDK v2,联邦学习功能内置其中。
最简单的方法是通过使用设计器管道进行集成。设计器具有拖放界面。随着 SDK 的新版本推出,出现了几个令人兴奋的功能。我们可以非常容易地创建自己的组件,并且管道中拖放的所有组件都可以在不同的计算目标上运行。
在下面的屏幕截图中,我们可以看到设计器中从预构建样本创建的管道。通过单击一个组件,我们可以通过转到运行设置选项并选择使用其他****计算目标来通过管道界面按钮轻松更改计算目标:

图 5.13 – 在 Azure Machine Learning 中更改计算目标
如果我们扩展功能并使用不同的数据集同时训练多个模型,我们就有了联邦学习实现和多方计算。对于计算,我们还可以利用 Azure 机密计算来使实现更加安全,但本书稍后我们将讨论如何在 Azure 机器学习中确保 Azure 计算的安全性。这也可以扩展到使用连接到相同或不同数据存储的多个工作区。
使用 Azure Machine Learning 进行联邦学习的优点在于,我们仍然可以结合并应用本章中概述的所有指标和技术,因为我们仍然在工作区内部工作。
联邦学习食谱和示例
在此处了解更多有关如何实现 Azure 机器学习的信息:github.com/Azure-Samples/azure-ml-federated-learning。
摘要
保护敏感数据是一个多方面的难题。有方法和技巧可以减轻公平性和保护隐私,以道德和负责任的方式与人工智能合作,但预测准确性和数据保护之间的平衡非常敏感。如果你根据你的数据和算法选择正确的技术组合,可能会觉得令人畏惧。
在本章中,我们学习了如何识别不同类型的敏感数据以及常见的去除或屏蔽它们的技巧。然而,并非总是能够完全消除它们,因为它们对模型训练过程是有用的。在这种情况下,有几个库可以帮助我们。我们可以使用 SmartNoise SDK 向我们的数据中引入噪声以保护隐私,与 Fairlearn SDK 合作以减轻公平性问题,并使用 Responsible AI 仪表板以及解释器来解释我们的模型。我们通过介绍 FL 的概念以及如何使用 Azure 机器学习来应用它来结束本章。
我们可以一直谈到书的结尾,但事实是,在数据处理方面,您能做的事情是有限的。在下一章中,我们将专注于处理数据访问、工作区以及每个部分所需的角色的合作。
进一步阅读
- 
5 分钟内运行联合学习演示:
github.com/Azure-Samples/azure-ml-federated-learning/blob/main/docs/quickstart.md - 
使用 Azure 机器学习、NVIDIA FLARE 和 MONAI 进行联合学习 – 建设会议:
build.microsoft.com/en-US/sessions/5bd5120f-5239-450d-8a57-373efb43c0cf?source=sessions - 
使用 Azure 机器学习进行医学成像 演示:
github.com/Azure/medical-imaging 
第三部分:保护并监控您的 AI 环境
当涉及到云时,安全问题不仅仅是数据。在本部分中,您将学习如何保护身份和访问以及围绕您的 Azure 机器学习资源的所有云基础设施。然后,您将学习如何使用 MLOps 实践自动化这些流程,以及如何设置系统监控以检测和解决任何安全问题。
本部分包含以下章节:
- 
第六章**,管理和保护访问
 - 
第七章**,管理和保护您的 Azure 机器学习工作区
 - 
第八章**,管理和保护 MLOps 生命周期
 - 
第九章**,日志记录、监控和威胁检测
 
第六章:管理和保障访问
到目前为止,我们主要讨论了数据,这是机器学习的基础。但谈到安全,我们还需要探索其他方面。让我们深入了解身份,以及我们如何在 Azure 机器学习中管理访问。随着我们开始本章的旅程,我们首先将探索最小权限原则(PoLP)的本质及其重要性。虽然理论上很简单,但在开始实施 Azure 机器学习之前,我们需要考虑许多事情。
我们将接着探讨 Microsoft Entra 的所有身份功能。我们将看到可用的身份验证选项,以及如何通过实施基于角色的访问控制(RBAC)来处理权限。我们将了解如何使用托管身份进行应用程序和服务的身份验证,以及如何使用诸如密钥保管库等工具来保障访问。最后,我们将讨论如何通过使用条件访问和特权身份管理(PIM)来自动化流程。本章中的最佳实践不仅适用于 Azure 机器学习,也适用于 Azure 中的其他服务。
在本章中,我们将涵盖以下主要主题:
- 
与 PoLP 合作
 - 
使用 Microsoft Entra ID 进行身份验证
 - 
实施 RBAC
 - 
使用应用程序身份进行身份验证
 - 
增强访问安全性
 
到本章结束时,你将学会如何通过在 Azure 机器学习中实施 PoLP 来有效地应用访问管理。
与 PoLP 合作
正如我们在第一章中提到的,当我们讨论零信任策略时,我们学习了 PoLP,它指出用户、设备和应用程序应该只被授予执行其工作职能所需的最小资源访问权限。通常,用户会被赋予更多的网络资源和数据访问权限,假设他们只访问执行日常任务所需的资源。然而,这种策略增加了未经授权访问的风险。当用户有权访问他们不需要的资源时,攻击者可以利用这一点。虽然只给应用程序或用户足够的权限来完成他们的任务听起来很简单,但实施过程中可能会遇到一些挑战。创建过度授权的应用程序从来不是目的,但通常是由于长期未计划的行为所导致的结果。
过度授权的应用程序是指那些被赋予了比实际完成任务所需更多的访问权限、权限或特权的软件应用程序。如果一个应用程序包含了未使用以及可减少的权限,那么它就被认为是过度授权的。让我们来看一些例子。
假设我们有一个包含用户资料的应用程序,用户在此登录后,应用程序会从身份管理系统拉取所有信息。该应用程序的使用与用户资料更新无关,只是使用用户的资料信息来获取经理或部门信息以完成其他业务任务,因此它不包括编辑资料的功能。然而,该应用程序具有编辑资料信息的权限。这是一个可减少权限的例子,其中应用程序需要读取数据但不需要在系统中写入。假设同一个应用程序还使用 API 端点从机器学习模型获取预测,并且还具有启动或停止 Azure 机器学习计算权限。这将是未使用权限的例子,因为该应用程序与模型训练和 Azure 机器学习计算无关。
当我们不愿意修改已部署的应用程序以避免影响其正常业务运营时,将权限包括到应用程序中以便应用于未来的版本是很诱人的。然而,我们必须始终考虑伴随此类决策的风险。应用 PoLP 更像是一个迭代过程,而不是一条规则。
在我们深入到 Azure 机器学习的实现之前,让我们回顾一些最佳实践:
- 
应用程序清单:第一步是保持我们组织中所有应用程序的最新清单。这包括内部开发的应用程序和第三方应用程序及其所需的权限。这可以是我们的治理计划的一部分。
 - 
基于角色的访问控制(RBAC):我们可以实施 RBAC 来定义和分配与特定应用程序功能相一致的角色。最佳做法是根据 PoLP 分配权限,以确保应用程序仅具有所需的访问权限,并在适当的时候重新评估这种访问权限。
 - 
定期审查:我们需要定期审查授予应用程序的权限,并移除任何可能被滥用的不必要或未使用的权限。
 - 
自动化工具:始终使用自动化工具来持续分析应用程序权限并识别过度授权的应用程序是更好的选择。这些工具可以提供有关哪些权限实际上正在使用以及哪些可以撤销的见解。对于 Azure,我们可以使用条件访问策略和 PIM 作为 Microsoft Entra ID 的一部分。
 - 
零信任架构:如第一章中所述,在可能的情况下应用零信任架构,即应用程序不是基于其位置或来源自动获得信任,这总是有益的。在授予访问权限之前,我们应该始终验证应用程序的身份和权限。
 - 
持续监控:在实施后,持续监控应用程序行为和访问模式。检测和调查任何异常或未经授权的活动应该是我们优先考虑的事项之一,以便尽快识别任何违规行为。
 - 
培训和意识提升:我们永远不应该忘记人为因素。从开发人员、IT 人员到数据科学家,每个人都应该了解防止过度授权应用程序的重要性。作为我们组织治理的一部分,我们应该提供实施安全访问控制的指南。
 
遵守 PoLP 具有挑战性,因为它需要彻底了解用户角色、责任和系统交互,并且是一个迭代和持续的过程。随着我们拥有更多应用程序和系统,它也可能变得更加复杂。然而,它通过最小化安全漏洞的潜在影响所提供的安全效益,使它成为任何组织信息安全策略中的基本实践。
让我们探讨如何在 Azure Machine Learning 中实施 PoLP。
使用 Microsoft Entra ID 进行身份验证
Azure Machine Learning 使用 Microsoft Entra ID(之前称为 Azure Active Directory(Azure AD))进行身份验证。Microsoft Entra ID 是微软基于云的 身份和访问管理(IAM)服务。它旨在帮助组织管理云和本地资源中的用户身份和访问权限。
当您登录到 Azure 门户时,相同的账户被用来直接验证您进入 Azure Machine Learning Studio 会话。因此,任何在您的 ML 项目上工作的人都需要成为 Microsoft Entra ID 工作空间的一部分。这并不意味着只有员工才能访问工作空间。Microsoft Entra ID 支持两种类型的用户:成员和访客。成员是在 Microsoft Entra ID 客户端内创建的用户,而访客可以是属于其他 Microsoft Entra 客户端或个人账户,如 Outlook、Gmail、Hotmail 等。但是,一旦您在 Microsoft Entra ID 客户端中创建或邀请用户,您就可以为他们分配角色,并将他们视为组织的一部分。
在 Azure Machine Learning 中使用 Microsoft Entra ID 进行身份验证的方法包括直接与您的账户进行交互式身份验证、Azure CLI、服务主体和管理身份,这些我们将在本章后面进行探讨。
Microsoft Entra ID 在各个行业中得到广泛应用,并且是微软云服务(包括 Azure、Microsoft 365 和 Dynamics 365)的重要组成部分。它是确保云资源安全和管理访问权限的关键组件,同时确保用户在保持高安全水平的情况下,拥有适当的访问级别。
这就是我们如何利用其安全功能来保护我们的 Azure Machine Learning 工作负载。
实施 RBAC
RBAC 是 Microsoft Entra ID 的内置功能,允许您使用角色管理对 Azure 资源的访问。这样,我们可以控制谁可以在 Azure 资源上执行特定操作。这有助于维护安全的环境,并确保用户只有执行任务所需的权限。
RBAC 中的每个角色本质上是一组在不同范围内操作的独立权限。我们可以将角色分配给管理组、订阅、资源组或资源。在较高范围内的角色分配会继承较低范围内资源的权限。例如,如果我们在一个订阅级别为用户分配角色,他们将拥有该订阅内所有资源的那些权限。Azure 中的每个角色分配都有三个不同的部分——角色、范围和服务主体,如下面的图所示:

图 6.1 – 角色分配
原则可以是用户、一组用户或服务主体,例如应用程序或 Azure 资源。我们将在本章后面讨论应用程序标识和管理标识时,更深入地探讨服务主体。
有两种类型的角色:内置和自定义。内置角色由 Azure 创建,我们可以随时分配它们。如果它们不能满足您的需求,您可以组合不同的角色以获得您想要的结果,或者创建自己的自定义角色以用于服务。
让我们看看我们如何为 Azure 机器学习特别分配或创建 RBAC 角色。
使用内置角色
Azure 提供了超过 400 个内置角色,例如虚拟机贡献者、存储账户贡献者等。每个内置角色对应 Azure 中的特定范围、操作和服务。
有三个角色是必须了解并应用于所有 Azure 服务的,即所有者、贡献者和读取者角色。以下截图显示了它们的描述:

图 6.2 – Azure 资源的核心 RBAC 角色
然后,我们还有需要了解的 Azure 机器学习特定角色。以下是我们在与 Azure 机器学习一起工作时需要了解的最重要角色的描述:

图 6.3 – Azure 机器学习的 RBAC 角色
如您所见,角色是围绕特定员工角色构建的,并包括围绕数据科学家或 ML 计算操作员的一定任务。当然,如果您在组织中有不同的结构,您可以给同一个人分配两个角色,让他们完成 Azure 中所有相关的任务。
让我们回顾一下如何处理角色分配。
添加角色分配
作为工作区所有者,我们可以随时使用 Azure 门户、命令行工具,甚至Azure 资源管理器(ARM)模板(如果我们有希望重复的复杂分配)为用户和工作区分配或移除角色。这个过程很简单。在左上角的每个资源页面上,我们可以看到有一个访问控制(IAM)菜单:

图 6.4 – Azure 访问控制(IAM)菜单
从这个页面上,您可以查看现有的角色分配和角色,并可以添加或移除对资源的访问权限。在这种情况下,我们打开了订阅页,这意味着我们更改的任何角色分配都将继承此订阅下的任何资源组及其资源。
要添加角色分配,请点击顶部的添加按钮。按照三个步骤向导添加您的角色分配:
- 第一步是选择一个角色。在这个例子中,我将选择读取者:
 

图 6.5 – 步骤 1:选择角色
- 第二步是选择所选角色的成员。您可以通过点击选择****成员按钮添加多个成员:
 

图 6.6 – 步骤 2:添加成员
- 
就这些了!最后一步是审查并完成分配。
如果您想使用命令行工具,这里是一个 CLI 中的示例:
az role assignment create --role "Reader" --assignee "georg***@*****.com" --subscription "00000000-0000-0000-0000-000000000000" 
角色分配文档
要查看使用 Azure 工具分配角色的更多选项,请点击您选择的工具的相应链接:
CLI: learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-cli
PowerShell: learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-powershell
REST API: learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-rest
ARM 模板: learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-template
添加角色分配只是故事的一部分。让我们看看如何审查现有的分配,并在必要时移除它们。
查看和移除角色分配
查看和移除角色分配的过程同样简单。第一步是访问您想要检查角色分配的资源,并打开访问控制(IAM)菜单。在那里,在角色分配选项卡上,您可以查看现有的角色分配,如下面的截图所示:

图 6.7 – 移除角色分配
通过点击用户列表中角色分配左侧的框,顶部将启用 删除 按钮。您可以点击 删除 并 确认 来删除分配。
与添加分配一样,您可以使用命令行工具。以下是一个使用 CLI 删除分配的示例:
az role assignment delete --assignee "georg***@*****.com" \
--role "Reader" \
--subscription "00000000-0000-0000-0000-000000000000"
角色分配文档
要查看更多使用 Azure 工具删除角色分配的选项,请遵循此链接:learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-remove
内置角色并非唯一分配权限的方式。让我们来回顾一下自定义角色。
为 Azure 机器学习创建自定义角色
内置角色很棒,但有时它们并不提供我们正确限制用户权限所需的确切权限。在这种情况下,我们有创建自己的自定义角色的选项,这些角色具有我们完成任务所需的精确权限。角色本质上是一组权限。这组权限被描述为一个 JSON 文件。您可以在以下位置找到贡献者角色的 JSON 格式示例:learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions-list.
自定义角色概述
如果您想了解更多关于 Azure 自定义角色属性的信息,请参阅此链接提供的信息:learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles
在本节中,我们不会深入探讨 RBAC,但我们将关注如何为 Azure 机器学习服务创建自定义角色。如果查看那个 JSON 文件看起来令人畏惧,您不必担心。我们可以使用 Azure 门户创建自己的自定义角色。像之前一样,我们进入我们想要分配新角色的资源选项卡,并找到 添加 按钮。点击添加按钮,然后遵循 添加自定义 角色 菜单:

图 6.8 – 添加自定义角色
自定义角色向导将会弹出。第一步是为我们的角色创建一个名称。在这种情况下,我选择了名称 AzureML 数据科学家扩展,因为我的目标是克隆现有的角色并简单地添加更多权限。当然,您也可以从头开始或从保存的 JSON 文件开始。然后我们添加一个良好的描述,就可以继续进行,如下面的截图所示:

图 6.9 – 填写基本信息
在权限选项卡下,我看到这个角色在工拥有权限,但在权限类型列被分配为NotAction,因为我们可以看到在工区中禁止了删除和写入操作。角色的操作部分描述了角色可以做什么,然后NotAction描述了它不能做什么。所以,如果我从NotAction中移除那些权限,角色将能够创建和删除工作区,这正是我希望我的数据科学家能够做到的:

图 6.10 – 与权限一起工作
下面的屏幕截图显示了完整的权限列表:

图 6.11 – 最终权限
在我们继续之前,你可能会有这样的疑问:如果我想要添加权限怎么办?我在哪里可以找到它们?在前面的屏幕截图中,我们可以看到+ 添加权限按钮。从这里,添加权限的过程非常直观。当你想要添加权限时,你不需要滚动浏览无尽的列表,也不需要每次都查阅文档。你可以简单地过滤到你想要的服务,并查看相关的权限。对于 Azure 机器学习,我们感兴趣的权限是机器学习服务资源提供者或Microsoft 机器学习 Web 服务管理,如下面的屏幕截图所示:

图 6.12 – 添加权限
通过点击相关类别,我们可以看到权限列表及其描述,正如我们可以在下一个屏幕截图中看到的那样:

图 6.13 – 查看 Azure 机器学习权限
这使得创建自定义角色非常快捷。你只需确保你已经包含了所有需要的权限,然后你可以回到权限页面并查看列表。
下一步是设置可分配的范围。你可以更改可分配范围选项来设置此自定义角色的范围,在订阅级别、资源组级别或特定工作区级别:

图 6.14 – 决定范围
然后,你可以查看并下载生成的 JSON 文件,或者继续到最后一步创建新的自定义角色:

图 6.15 – 查看和创建/下载
在你创建了自定义角色之后,你可以像内置角色一样分配它。你将在访问控制(IAM)菜单的角色列表中找到它,类型为CustomRole:

图 6.16 – 查找你的自定义角色
Azure RBAC
在此处了解有关 Azure RBAC 的更多信息:learn.microsoft.com/en-us/azure/role-based-access-control/overview
Azure RBAC 是保护 Azure 资源并确保只有授权用户和应用程序可以访问的关键组件。它在维护安全、合规且管理良好的 Azure 环境中发挥着至关重要的作用。结合 Azure Policy、Azure 管理组和 Azure Blueprints,我们拥有了构建完整治理框架所需的所有组件。
RBAC – 最佳实践
在分配角色时,以下是一些应遵循的 RBAC 最佳实践:
- 
只授予用户所需的精确访问权限
 - 
限制订阅所有者的数量
 - 
使用 Microsoft Entra ID PIM
 - 
将角色分配给组而不是单个用户,以便权限可以继承
 - 
使用唯一的角色 ID 而不是角色名称来分配角色,以防角色被重命名
 - 
在使用自定义角色时避免使用通配符
 
RBAC 不仅关乎用户。Microsoft Entra ID 也用于验证用户和应用程序。让我们看看在下一节中我们如何与这些标识一起工作。
使用应用程序标识进行验证
应用程序标识是 Microsoft Entra ID IAM 的一个基本概念。它们代表应用程序或服务与 Azure 资源交互时的安全上下文。通常,底层对象是服务主体。服务主体类似于用户标识,但由应用程序、服务或脚本用于安全地验证和访问 Azure 资源。创建服务主体的过程取决于我们想要用于验证的内容,通常,我们可以识别两种类型——应用程序标识和 Azure 服务使用的托管标识。
当涉及到应用程序或托管标识的验证和授权时,过程是相同的。如果它在 Microsoft Entra ID 中存在,它可以被分配 RBAC,就像系统中的任何用户一样。服务主体有生命周期,就像用户标识一样。它们可以被创建、更新和删除。对于独立的 Azure AD 应用程序,服务主体可以使用客户端密钥/密码或证书进行身份验证。客户端密钥应安全存储,而证书提供额外的安全层。Microsoft Entra ID 应用程序可以配置为单租户(仅在单个 Microsoft Entra ID 租户中可访问)或多租户(由多个 Microsoft Entra ID 租户的用户和应用程序访问)。多租户应用程序通常需要额外的配置来处理标识联合。
让我们回顾一下我们如何创建和使用服务主体。
创建服务主体
为了在处理训练和测试模型的程序或脚本时进行身份验证,例如,您可以使用服务主体身份验证。为了实现这一点,我们需要在 Microsoft Entra ID 工作空间中创建一个服务主体。如果您正在创建服务主体,您需要创建一个应用程序注册。
让我们看看实现这一目标的两种方法。
使用 CLI
根据您运行命令的位置,您可能需要验证您的 Azure 订阅。通过 Cloud Shell 运行命令,这样就不需要了。创建服务主体的命令如下所示:
az ad sp create-for-rbac --sdk-auth --name azuremldatascientist --role Contributor --scopes /subscriptions/<subscription id>
结果将包括几个值,我们必须保护它们,因为它们作为凭证使用,但我们必须确保保存它们,以便我们可以在代码中使用它们来检索身份验证令牌。这些是 clientId、clientSecret 和 tenantId:

图 6.17 – 服务主体创建结果
您可以使用门户或以下命令获取有关服务主体的更多信息:
az ad sp show --id <clientId from previous result>
现在我们已经创建了一个服务主体,我们可以在代码中使用它,并在必要时分配更多角色。
注册应用程序
CLI 不是创建服务主体的唯一方式。另一种方法是使用门户。打开 Microsoft Entra ID 工作空间,找到 应用注册 菜单。在下面的屏幕截图中,您可以查看现有服务主体的列表,包括我们在上一节中使用 CLI 创建的服务主体。您也可以从这里使用门户找到必要的 ID 和信息:

图 6.18 – 应用程序注册
要继续操作,请点击 新注册 按钮。填写详细信息,为应用程序命名,并指明哪些类型的账户可以使用它。在这个例子中,我们将保持默认设置并点击 注册,如下一个屏幕截图所示:

图 6.19 – 创建新的注册
您的注册已完成。一旦我们点击 注册,应用程序注册页面就会打开,我们可以配置多个选项,如下面的屏幕截图所示:

图 6.20 – 创建新的注册
通过打开应用程序注册,您可以配置客户端证书和密钥、角色和权限等选项。
但关于服务呢?工作空间是如何验证想要连接到工作空间的 虚拟机 (VM) 的?这就是托管标识发挥作用的地方。让我们看看托管标识是如何工作的,以及我们如何可以使用到目前为止所看到的一切在我们的代码中进行身份验证。
使用托管标识
Azure 中的管理身份是一种在 Azure 生态系统中安全地验证和授权应用程序和服务的方法。它们是 Azure IAM 功能的基本组成部分,并在与其他 Azure 服务和资源交互时用于授权自身。这消除了在代码或配置文件中存储敏感凭据或机密的需求,使应用程序更加安全。管理身份可以与广泛的 Azure 服务一起使用,包括 Azure 虚拟机、Azure 存储帐户、Azure Key Vault、Azure 机器学习等。它们可以在 Azure RBAC 中分配特定的角色和权限。这意味着您可以在 Azure 环境中控制身份可以访问哪些操作和资源。我们可以通过利用可用的 Azure 机器学习库和 SDK,轻松地在我们的应用程序或脚本中使用管理身份,正如我们将在下一节中看到的那样。
支持管理身份的每个 Azure 资源都有一种特定的启用和使用方式。有两种类型的管理身份。让我们回顾一下这两种身份之间的区别。
启用系统分配的管理身份
此类身份由 Azure 为特定的 Azure 资源(如 VM 或 Azure 函数)创建和管理。它与所关联资源的生命周期紧密绑定,这意味着当资源被删除时,管理身份也会随之删除,并且不能与多个资源关联。要使用系统分配的管理身份,您只需在资源上启用它们即可。
要启用系统分配的管理身份,我们只需找到身份菜单,如图下所示,在我们的选择资源选项卡中,将状态切换到开启,然后点击保存。在此示例中,我选择了一个 VM,但它支持多个 Azure 资源:

图 6.21 – 打开身份菜单
一旦我们启用了系统分配的管理身份,我们就可以使用 RBAC 分配角色或通过将状态切换到关闭来禁用它。您可以在下一张截图中看到已启用的系统分配的管理身份:

图 6.22 – 系统分配的管理身份已启用
创建用户分配的管理身份
此类身份作为独立的 Azure 资源创建和管理。然后,您可以将其与一个或多个 Azure 资源关联,允许多个资源使用相同的身份。当需要例如管理身份的生命周期独立于资源生命周期,或者多个资源需要共享相同的权限时,这非常有用。
创建管理身份是一个两步过程。首先,我们需要创建一个管理身份。
要这样做,请从顶部的搜索框中打开 托管标识 菜单,然后点击 创建。填写一些基本信息,如下面的截图所示:

图 6.23 – 创建用户分配的托管标识
一旦创建标识,我们就可以将其与许多资源关联起来。正如之前一样,我们将在资源选项卡中找到 标识 菜单,但这次我们将切换到 用户分配 选项卡。然后,我们可以点击 添加 按钮,筛选我们的标识,一旦找到之前创建的标识,我们就可以将其与资源关联起来。您可以在以下截图中查看这些步骤:

图 6.24 – 关联用户分配的托管标识
托管标识也可以使用其他 Azure 工具(如 CLI、PowerShell 或 REST API)创建或启用。然后,它们可以从脚本或其他我们想要连接的 Azure 服务中使用。我们可以在任何时候启用、禁用或从资源中取消关联它们。
总结来说,Microsoft Entra ID 托管标识是一种通过消除存储凭证的需要,并提供与 Azure 服务的无缝集成来提高 Azure 资源身份验证和授权安全性和管理性的方法。它们帮助开发人员和管理员确保其 Azure 工作负载的安全性和合规性。
这里是如何使用不同可用的标识来设置身份验证的。
设置身份验证
我们可以通过使用来自 Azure Identity 包的 DefaultAzureCredential 类来简化身份验证过程。这个类会根据其运行的环境自动选择合适的身份验证方法(如托管标识、服务主体或交互式登录)。以下是我们在托管标识和服务主体场景中使用它的方法。
当与服务主体连接时,我们需要提供三个环境变量并在身份验证时使用这些值。
这里是变量——它们都可以在我们创建服务主体时返回的对象中找到:
- 
AZURE_CLIENT_ID: 客户端 ID - 
AZURE_TENANT_ID: Microsoft Entra ID 租户 ID - 
AZURE_CLIENT_SECRET: 凭证密钥 
要设置这些变量,您可以使用 python-dotenv 包。
标识库
要了解更多关于库的信息,请参阅此处:
learn.microsoft.com/en-us/python/api/overview/azure/identity-readme?view=azure-python
pypi.org/project/python-dotenv/
如果我们使用托管标识,类将自动检测凭证,并且不需要环境变量。以下是两个示例代码:
from azure.identity import DefaultAzureCredential
identity= DefaultAzureCredential() identity.get_token("https://management.azure.com/.default")
在这段代码之后,你可以编写你想要的代码来与 Azure 机器学习一起工作并训练你的模型。
与应用程序标识符一起工作可以帮助我们极大地确保我们在角色之间的一致性,并保护我们的机器学习资产。现在我们已经审查了我们的身份验证和角色管理选项,让我们来审查一些其他服务,这些服务可以补充此功能并帮助我们进一步保护我们的工作负载。
增强访问安全性
现在我们对如何利用 Microsoft Entra ID 进行身份验证和角色管理有了更好的了解,我们可以看看一些其他我们可以用来补充并进一步保护我们用户身份的服务。
条件访问
Microsoft Entra ID 中的条件访问是一个强大的功能,允许组织为授予或拒绝对其基于云的资源访问设置特定的条件和策略。使用条件访问,您可以在允许或阻止访问之前考虑一系列因素,从而增强安全和合规性。
条件访问策略是您定义的规则,用于控制对受保护资源的访问。这些策略基于条件,可以根据特定用户、组、应用程序、IP 位置信息、用户或签名风险检测以及设备进行定制。基于这些信号的行动是阻止/允许。您可以根据适用于您组织和使用者的不同场景组合多个条件。
以下是一些常用策略的示例:
- 
要求为具有高度特权角色的用户或来自未知位置的用户的多因素身份验证(MFA)启用
 - 
阻止系统标记为高风险的用户
 - 
允许或阻止来自特定 IP 或国家的访问
 - 
要求更改密码以允许访问
 
这是概览选项卡的条件访问,在这里你可以管理策略、位置、网络和其他功能:

图 6.25 – 条件访问概览选项卡
Microsoft Entra ID 中的条件访问是一个动态且灵活的工具,帮助组织在安全性和用户生产力之间取得平衡。通过设置考虑不同因素的政策,我们可以实施适应不断变化的网络安全格局和您组织需求的访问控制。
这不是我们用来增强安全的唯一工具。让我们看看我们如何将 PIM 与 RBAC 一起使用。
PIM
Microsoft Entra ID PIM 是一种 Azure 服务,它帮助组织管理、控制和监控其 Azure AD 和其他 Microsoft 在线服务中的访问。它专注于具有访问关键资源和数据的特权的账户。PIM 提供功能和能力,以帮助组织保护这些特权账户并减轻安全风险。
PIM 可以与 RBAC 结合使用,以增强对特权账户和 Azure 资源访问的安全性和管理。当两者结合使用时,PIM 和 RBAC 提供了一种全面的方法来管理 Azure 资源的访问,特别是那些需要提升权限的资源。我们可以为分配到特定 RBAC 角色的用户启用即时(JIT)和时间限制的访问。例如,如果用户需要资源组的贡献者访问权限,Azure PIM 允许他们在必要时且在定义的时间内激活此角色。当用户需要激活 RBAC 角色时,他们通过 Azure PIM 界面发起请求,并提供有效的理由。此请求经过审批流程,确保激活由适当的管理员或角色所有者授权。用户指定持续时间,当指定的时间周期到期时,访问会自动撤销,从而降低了长期提升访问权限的风险。
Azure PIM 记录所有 RBAC 角色的激活和停用操作,为合规性和安全目的提供审计跟踪。组织可以定期审查和认证对特权访问的持续需求,通过访问审查来确保这一点。此过程有助于确保被分配 RBAC 角色的用户仍然需要它们,并且访问与业务需求保持一致。
通过结合 Azure PIM 和 RBAC,组织可以加强其 Azure 资源的 IAM 策略。这种方法最小化了与持久、过度授权账户相关的风险,并帮助组织在管理对关键 Azure 服务和数据的访问时保持控制、可见性和合规性。
Azure 密钥保管库
Azure 密钥保管库是 Microsoft Azure 提供的一种云服务,帮助您安全地管理应用程序和服务使用的密钥、密钥和敏感信息。它旨在提供一个集中和安全的存储和管理加密密钥和其他密钥的位置,使其更容易遵守安全最佳实践和合规性要求。以下是关于其功能的一些信息:
- 
密钥管理:Azure 密钥保管库允许我们生成、导入和管理用于加密、解密和身份验证的加密密钥。它支持各种密钥类型,包括Rivest–Shamir–Adleman(RSA)、高级加密标准(AES)和椭圆曲线密钥。
 - 
密钥管理:我们可以使用 Azure 密钥保管库来存储和管理密钥,例如连接字符串、API 密钥和密码。这些密钥被安全地存储,并且可以通过您的应用程序以编程方式访问。
 - 
证书管理:密钥保管库能够管理 X.509 证书并自动化诸如证书续订等任务。它还支持与 Azure 服务(如 Azure 应用程序网关和Azure Kubernetes 服务(AKS))的集成,以进行 SSL/TLS 证书管理。
 
要检索密钥或机密,我们不是硬编码机密,而是对 Key Vault 进行身份验证以检索它们。这增加了另一层安全性,我们可以在任何时间轻松撤销访问权限,并拥有额外的安全选项,如密钥版本控制、日志记录、备份、清除保护等。
最佳实践
将 Azure Key Vault 服务与托管标识结合使用以实现最大安全性。
对于 Azure 机器学习,我们可以将 Azure Key Vault 服务与托管标识结合使用,以在我们的脚本中检索机密。我们所需的一切就是 Python 的 Azure Key Vault Secrets 客户端库。
在我们开始之前,我们需要确保我们拥有以下先决条件以及我们的工作区:
- 
我们想要检索机密值的 Azure Key Vault 资源
 - 
一个启用了托管标识并分配了适当的 RBAC 角色或访问策略的 Azure Key Vault 计算集群
 - 
在我们的 Azure 机器学习环境中安装了
azure-keyvault-secrets和azure-identity包 
如果您已经完成了所有先决条件,您可以使用以下代码示例来检索机密。只需确保将密钥保管库名称替换为您自己的,并将机密名称替换为您自己的:
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
identity= DefaultAzureCredential()
kv_client = SecretClient(vault_url="https://<key vault name>.vault.azure.net/", credential= identity)
secret = kv_client.get_secret("secret-name")
print(secret.value)
条件访问和 PIM 都是 Microsoft Entra ID 功能,当启用时,为我们的身份提供额外的安全保护,并确保我们的用户凭证安全且符合 PoLP。Azure Key Vault 是构建 Azure 云环境中安全且合规应用程序的关键组件,尤其是在与托管标识结合使用时。这些功能可能是可选的,但在努力保护我们的 ML 项目时需要考虑。
摘要
在本章中,我们关注了身份和遵守 PoLP 的所有方面。虽然理论上很简单,但 PoLP 是一个迭代和持续的过程,我们需要对其进行监控,以防止过度授权的应用程序。由于 Microsoft Entra ID 是 Azure 和扩展到 Azure 机器学习的身份管理工具,因此实施其核心功能,如 RBAC 和学会与应用程序标识一起工作,将帮助我们确保用户和应用程序的凭证不会轻易受到损害。此外,实施如条件访问和 PIM 等特性可以为我们的身份提供额外的安全层。但这些凭证并非唯一重要的。在我们的脚本中,我们可能会使用不同的连接字符串或机密。在可能的情况下,我们可以使用 Key Vault 服务与托管标识一起使用,以集中管理它们并确保我们的机密安全。
在下一章中,我们将探讨与我们的工作区安全和底层基础设施相关的一切。我们将学习如何保护我们的计算和端点,并利用任何现有的 Azure 基础设施,如网络,以增加安全性。
第七章:管理和保护您的 Azure Machine Learning 工作空间
在数据和访问管理之后是基础设施。尽管 Azure Machine Learning 是一种云服务,但这并不意味着我们不能利用 Azure 或本地基础设施的服务来隔离我们的资源并保护它们免受公共访问。
在本章中,我们将学习如何实施有关工作空间的安全最佳实践。我们将更多地关注虚拟网络、端点安全和计算方面的实践和场景。Azure Machine Learning 中的计算既可以用于模型训练和部署,每个选项都有其自己的安全最佳实践。计算包括计算实例、计算集群和容器。工作空间使用 Azure 容器注册表来部署可以作为容器部署的模型,因此我们将回顾所有这些服务的安全选项。
在本章中,我们将涵盖以下主要主题:
- 
探索网络安全
 - 
使用 Azure Machine Learning 计算资源
 - 
管理容器注册表和容器
 
在本章结束时,我们将了解如何通过在 Azure 中使用虚拟网络来实现最佳实践,并隔离我们的 Azure Machine Learning 工作空间及其相关资源。
技术要求
本章大量涉及 Azure 中的网络和基础设施。尽管教程可以相对容易地实现,但在 Azure 中正确实施和维护网络架构需要大量的知识。
如果你没有在 Azure 中使用网络的经验,我建议在继续本章之前先查看以下服务的概述:
- 
虚拟网络概述:
learn.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview - 
网络架构设计:
learn.microsoft.com/en-us/azure/architecture/guide/networking/networking-start-here 
探索网络安全
Azure Machine Learning 工作空间是主要的使用点。这是你完成所有机器学习任务的地方,默认情况下,所有端点和工作空间都可以访问公共互联网。然而,如果我们已经使用 Azure 基础设施服务用于不同的目的或想要限制对我们资源的访问,我们可以利用 虚拟网络(VNet)。在 Azure 中使用 VNet 为我们的 Azure Machine Learning 资源提供了额外的安全层和隔离,以及更好的入站和出站网络通信控制。在本节中,我们将探讨我们将如何将 VNet 集成到 Azure Machine Learning 中的几个选项。
让我们从工作空间开始。
创建 VNet
我们首先需要的是一个 VNet。如果你已经有了,你可以使用它。如果没有,你可以按照以下步骤创建一个:
- 在 Azure 搜索栏中搜索虚拟网络并点击以创建一个新的。创建表单将弹出。选择订阅和资源组,并提供虚拟网络名称和区域,如以下截图所示。选择与你的工作空间相同的区域:
 

图 7.1 – 填写基本详情
- 点击下一步,保留默认值,直到你到达IP 地址选项卡。确保地址空间足够,并且至少有一个子网可用。以下是一个示例截图:
 

图 7.2 – 添加地址空间
VNet 最佳实践
确保地址空间和子网不要与你的订阅或其他本地系统中的其他网络重叠。如果你需要更多关于创建 VNet 架构的指导,请参阅更多信息learn.microsoft.com/en-us/azure/virtual-network/concepts-and-best-practices。
- 点击审查 + 创建以创建 VNet。在继续进行其他任何操作之前,请等待过程完成。
 
现在我们已经准备好开始使用 VNet 限制对工作空间的访问。
保护工作空间
通过 Azure 门户配置限制工作空间的公共访问非常简单,可以限制所有入站和/或出站连接。当我们谈论入站流量时,我们指的是从公共互联网进入 Azure ML 工作空间或相关资源的连接。这可以是来自本地位置、其他云资源或外部应用程序和平台的数据被摄取到 Azure ML 工作空间中。当你从你的本地机器向 Azure Machine Learning 提交数据集、作业或其他请求时,这被认为是入站流量。出站流量是指离开工作空间或相关资源到其他地方的任何连接。这可以是机器学习模型的结果、处理后的数据、日志等被发送回你的本地机器、另一个云资源或外部应用程序或平台。
挑战在于确保所有与工作空间关联的服务也能通过那个虚拟网络而不是公共互联网进行访问和正确配置。在设计实施此解决方案时,我们还需要考虑的是,工作空间需要通过公共互联网访问特定的端点。如果我们想限制出站访问,我们需要确保这些端点保持其公共访问。
让我们看看我们如何配置这两个选项。
限制入站流量
要限制来自公共互联网的入站流量,我们需要使用 VNet,我们已经在上一节中学习了如何配置它。以下是禁用公共访问和使用工作空间中的 VNet 的过程。
首先,从 Azure 门户打开 Azure 机器学习资源,找到网络部分。在第一个选项卡,称为公共访问,将访问设置为禁用,然后点击保存,如图所示的下个截图:

图 7.3 – 禁用公共访问
现在我们需要创建一个私有端点连接。Azure 私有链接是 Microsoft Azure 云平台中的一个服务,它允许你通过虚拟网络中的私有端点安全地访问 Azure 服务,从而避免将数据暴露给公共互联网。使用 Azure 私有链接,Azure 服务可以通过虚拟网络中的私有 IP 地址进行访问。这提供了几个好处。如果你的虚拟网络通过虚拟专用网络(VPN)或 ExpressRoute 连接到本地工作环境,资源可以使用 Azure 私有链接通过这些私有连接访问 Azure 服务。使用全局 VNet 对等连接,我们可以从任何区域连接到 Azure 服务。Azure 私有链接与 Azure 私有 DNS 区域集成,这意味着服务的私有端点可以注册到私有 DNS 区域,从而使名称解析更加简单。
在 Azure 门户中设置私有端点是一个简单的过程。一旦设置完成,服务提供者和服务消费者之间的所有网络流量都可以通过私有端点进行路由。因此,现在我们已经禁用了公共访问,我们需要创建一个私有链接来通过虚拟网络重新建立这次访问。
虚拟网络对等连接
要了解更多关于 Vnet 对等连接的信息,请访问以下网址:
learn.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview
这里是创建私有链接/端点的过程。转到下一个选项卡,私有端点连接,然后点击私有端点来创建一个:

图 7.4 – 创建私有端点
在表单中填写一些基本详情,包括订阅、资源组、网络接口名称和区域,然后点击下一步,如图所示:

图 7.5 – 填写基本详情
在资源选项卡中,从下拉菜单中选择amlworkspace,然后点击下一步:

图 7.6 – 选择资源
在这里,我们将选择所需的虚拟网络。你必须选择一个现有的虚拟网络,所以请使用我们之前创建的那个。如果你的虚拟网络有多个子网,请确保选择正确的子网。其余选项保留为默认。

图 7.7 – 选择虚拟网络
与 DNS 区域集成是可选的但方便的,因为它使名称解析更容易。将与私有 DNS 区域集成选项设置为是,然后选择订阅和资源组。服务将填写其余字段。

图 7.8 – 添加 DNS 集成
DNS 区域概述
要了解更多关于 DNS 区域的信息,请在此处查看概述:
learn.microsoft.com/en-us/azure/dns/dns-zones-records
现在转到审查 + 创建并开始部署资源。在继续进行任何其他步骤之前,等待此过程完成。
通过 CLI 创建私有链接
关于创建私有链接,您可以在此处了解更多信息:
如果您此时尝试访问工作区,您将收到以下错误,因为公共访问已被禁用。

图 7.9 – 工作区公共访问已禁用
这是工作区入站访问的基本配置。在我们通过 VNet 验证访问之前,我们首先应该配置出站流量并限制对相关服务的访问。
让我们从出站流量开始。
限制出站流量
要限制出站流量,我们将再次在 Azure Machine Learning 中的网络选项卡中操作,但这次我们将点击工作区管理出站****访问选项卡:

图 7.10 – 限制出站流量
要限制出站流量,我们有两种选择:允许互联网出站,其中只有计算受到限制,以及仅允许批准的出站,其中计算和所有出站数据移动都受到限制。
这两个选项都有一些连接例外,您可以在屏幕底部的选项启用时看到。您可以添加一些自己的规则,但默认规则不能被禁用。

图 7.11 – 仅允许批准的出站选项
如果您同时使用防火墙和网络,请确保通过那里也启用了连接,因为限制对这些资源的访问将在工作区中导致连接问题,并且无法与这些服务一起工作。
保护工作区只是第一步。现在我们需要确保通过 VNet 也保护了相关资源。
保护相关资源
如第一章中所述,工作区与许多资源紧密合作,包括存储账户和密钥保管库,这些资源是为了支持工作区而创建的。如果我们真正想要确保它们通过 Microsoft 网络正确连接到工作区,同时仍然保持与公共互联网的隔离,我们需要配置相同的网络设置。首先,我们需要禁用这些服务的公共访问。
要禁用公共访问并限制账户访问特定网络,我们可以转到存储 账户选项卡中的网络选项卡。
在公共网络访问选项中,点击从所选虚拟网络和 ID 地址启用。然后,在虚拟网络部分选择之前创建的 VNet,通过点击添加现有虚拟网络按钮,然后点击保存。
最终视图应如下所示截图:

图 7.12 – 在存储账户中禁用公共访问
下一步是执行与工作区关联的密钥保管库的类似操作。步骤与之前完全相同。
要禁用公共访问并限制账户访问特定网络,我们可以转到存储账户选项卡中的网络选项卡。对于公共网络访问选项,点击从所选虚拟网络和 ID 地址启用。然后,在虚拟网络部分选择之前创建的 VNet,通过点击添加现有虚拟网络按钮,然后点击保存。
最终视图应如下所示:


注意
我们仍然可以配置服务端点,而不限制对服务的网络访问。在这种情况下,来自工作区的流量将通过 VNet,而任何其他流量仍然将通过公共互联网访问服务。同时进行这两项操作可以确保更好的隔离。
现在我们已经禁用了公共访问,我们有两种配置选项:启用服务端点或为每个服务创建私有端点。
让我们从服务端点开始探索这两个选项。
选项 1:配置服务端点
这是最容易且最快的方法。Azure 中的服务端点通过扩展您的 VNet 的私有地址空间到 Azure 服务资源,为 VNets 提供增强的安全性和优化的路由。这允许您将 Azure 服务资源安全地连接到您的 VNet。
打开我们之前创建的 VNet,并转到子网部分。点击所需的子网,然后在右侧的弹出窗口中向下滚动。

图 7.14 – 仅允许批准的出站流量
重要的是要注意,虽然服务端点在许多场景中很有用,但有些情况下您可能需要考虑使用 Azure Private Link 或私有端点,尤其是当您希望 Azure 服务通过您的 VNet 中的私有 IP 地址访问时。
因此,让我们看看如何实现这个选项。
选项 2:创建私有端点
创建私有端点的过程与我们用于创建工作区公共端点的过程类似。让我们看看每个服务的步骤。
Azure 存储账户
在 存储账户 资源的 网络 屏幕上,单击 私有端点连接。单击 + 私有端点 按钮,并按照我们在工作区中之前所做的步骤进行操作。

图 7.15 – 创建私有端点
根据以下截图,为端点填写一些基本信息:

图 7.16 – 填写基本信息
然后,在 目标子资源 的 资源 选项卡中,从下拉菜单中选择 blob:

图 7.17 – 选择 blob 资源
按照工作区的步骤,填写 虚拟网络、DNS,然后转到 审查 + 创建。
完成此过程后,创建另一个私有端点,这次选择 文件 作为 目标子资源。
完成存储账户后,这里是进行密钥保管库相同操作的步骤。
Azure 密钥保管库
在密钥保管库资源的 网络 屏幕上,单击 私有端点连接。单击 + 私有端点 按钮,并按照我们在本章中为存储账户所做的步骤进行操作:

图 7.18 – 创建私有端点
根据以下截图,为端点填写一些基本信息:

图 7.19 – 填写基本信息
然后,在 目标子资源 的资源选项卡中,选择 vault。

图 7.20 – 选择 vault 资源
再次,按照存储账户的步骤,填写 虚拟网络 和 DNS,然后转到 审查 + 创建。
我们已经完成了所需的最小配置。现在,是时候测试它了!让我们回顾一些测试连接性的选项。
验证连接性
为了连接到防火墙后面的工作区,我们有多种选择。这些选择主要取决于您的个人 Azure 基础设施和需求。
让我们回顾那些选项:
- 从本地系统连接:有一种选项可以在您的本地网络和 Azure 之间建立安全、加密的通信。这是通过公共互联网上的 VPN 网关完成的。Azure 提供两种类型的网关:VPN 网关和ExpressRoute。选择合适的 VPN 解决方案很重要,因为它们将有权访问您的互联网活动,并且并非所有 VPN 选项都提供相同级别的安全性、隐私和速度。
 
Azure 上的 VPN 解决方案
在这里,您可以找到有关 Azure 中 VPN 网关和 ExpressRoute 服务的更多信息。
对于 VPN 网关,请参阅learn.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways。
对于 ExpressRoute,请参阅learn.microsoft.com/en-us/azure/expressroute/expressroute-introduction。
- 
从云基础设施连接:我们始终可以创建一个虚拟机——有时也称为跳转盒——然后将其连接到。从那里,我们可以访问受网络限制的服务。此外,您可以在虚拟机中启用Azure Bastion,并通过浏览器访问该机器,而无需在虚拟机上配置公共 IP,这可以减少对安全漏洞的暴露。
对于我们的示例,我们将使用部署在同一 VNet 中的 Azure 虚拟机。您需要做的就是创建一个在同一网络或对等网络中部署的虚拟机,并尝试访问该工作区。
 
快速入门:在门户中创建 VM
如果您需要开始使用虚拟机,请在此处查看快速入门指南:
learn.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-portal
结果符合预期。我们可以从网络内部的设备访问工作区,但网络之外的一切都被禁用。以下是同一 VNet 中工作区访问页面(左侧)和浏览器尝试通过公共互联网访问同一工作区(右侧)的截图:

图 7.21 – 公共访问已禁用
虚拟机安全最佳实践
为了增加隔离性和安全性,有多种方法可以保护网络本身或属于该网络的虚拟机。例如,您可以查看以下服务:
- 
网络安全组:
learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview - 
Azure 堡垒机:
learn.microsoft.com/en-us/azure/bastion/bastion-overview 
我们可以用类似的方式保护相关的资源,例如在数据库和其他可用于 Azure 机器学习的类型的数据存储中。如果服务已经是其他 VNets 的一部分,只要我们的 VNets 没有重叠的地址,我们就可以通过网络对等连接不同的网络。我们可以通过在同一或不同的订阅中使用 VNet 对等连接网络,因此最终您在 Azure 中如何隔离网络的决定基于个别组织的需求。
Azure 中的网络架构
通过探索网络对等、集中辐射拓扑和 Azure 登录区域来了解更多关于网络架构的信息:
- 
VNet 对等:
learn.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview - 
Azure 登录区域:
learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/landing-zone/ 
通过将 Azure 机器学习与 Azure VNets 集成,我们添加了一个重要的安全层,这将有助于保护我们的数据、模型和其他资源免受未经授权的访问和威胁。让我们不要忘记始终监控并定期审查安全措施,以适应不断发展的威胁环境。
让我们现在进一步探讨工作空间的安全实践,从 Azure 机器学习计算开始。
使用 Azure 机器学习计算
Azure 机器学习提供了一个可扩展的云环境,用于构建、训练和部署机器学习模型。它提供了不同的计算目标,用于运行实验、训练模型和提供预测。
总共有四个目标,其中两个由工作区内部管理:计算实例 和 计算集群。计算实例是一个用于开发、培训和推理需求的托管虚拟机。它本质上是在工作区中的专用个人工作站。它可以用于运行 Jupyter 笔记本和脚本。计算集群是一组可管理的可扩展虚拟机,用于大规模训练机器学习模型。计算集群会根据工作负载自动扩展或缩减(在您设置的范围内)。例如,您可以声明最小和最大节点数,机器将根据需求进行扩展,这有助于我们优化成本。还有外部计算,您可以使用它进行推理,特别是 Azure Kubernetes 服务。您还可以将外部服务(如 Ubuntu VM 或 Databricks 计算)用于训练并附加到工作区。
在本节中,我们将专注于确保内部资源的安全。对于外部服务,您必须找到确保每个服务最佳实践。以下是一些链接,为您提供有关确保推理和附加计算安全性的更多信息:
- 
Azure Kubernetes 服务:
learn.microsoft.com/en-us/azure/aks/concepts-security - 
虚拟机安全:
learn.microsoft.com/en-us/azure/virtual-machines/security-recommendations - 
Azure Databricks 安全指南:
learn.microsoft.com/en-us/azure/databricks/security/ - 
Azure Data Lake 安全基线:
learn.microsoft.com/en-us/security/benchmark/azure/baselines/data-lake-analytics-security-baseline 
以下部分将帮助您了解如何确保计算实例和计算集群的安全。
确保计算实例安全
确保计算实例和计算集群的基础在于使用托管标识和网络隔离的组合。让我们跟随以下步骤来启用它们,从计算实例开始。
从 Azure Machine Learning 工作区中,在 管理 下的 计算 菜单中找到 计算实例 选项卡,点击 + 新建 创建新的计算实例:

图 7.22 – 新计算实例
根据需要填写所有选项卡,直到到达安全选项卡。启用分配托管标识按钮,并将标识类型保留为系统分配。确保SSH按钮被禁用以防止公开访问,因为当使用 VNet 时,你仍然可以在该 VNet 内使用安全外壳协议(SSH)连接到机器。如果你之前已限制对工作区和相关资源的访问,启用虚拟网络将默认启用,这使得选择虚拟网络和子网成为强制性的。选择之前创建的:

图 7.23 – 设置计算实例安全
根据需要填写其余选项卡,并创建计算实例。记住,当使用此计算实例进行训练时,在脚本中使用适当的凭据。
让我们继续学习如何确保计算集群的安全。
保护计算集群
保护计算集群的过程非常相似。要从管理下的计算菜单中启动过程,请选择计算集群选项卡,然后点击+ 新建以创建新的计算实例:

图 7.24 – 新计算集群
根据需要填写虚拟机选项卡,直到到达高级设置选项卡。向下滚动,直到到达高级设置下拉菜单,并确保启用 SSH 访问被禁用以防止公开访问,启用分配托管标识,并将标识类型保留为系统分配。
如果你之前已限制对工作区和相关资源的访问,再次,启用虚拟网络将默认启用,这使得选择虚拟网络和子网成为强制性的。选择之前创建的,如下面的截图所示:

图 7.25 – 设置计算集群安全
该过程可能很简单,但足以将我们的计算资源从公共互联网隔离,防止进一步的漏洞。只需记住,当通过计算实例在笔记本上运行脚本时,确保在代码中传递适当的凭据。有关如何使用托管标识的示例,请参阅第六章中的使用托管标识部分。
让我们回顾与工作区相关联的最后一个资源及其安全功能:Azure 容器注册表。
管理容器注册表和容器
Azure Machine Learning 提供了一个集成、端到端的数据科学工作流程,使数据科学家和开发者能够准备数据、实验模型,然后在可扩展的环境中部署它们。部署过程中的一个关键方面涉及容器化,这使我们来到了Azure 容器注册表(ACR)。ACR 是基于开源 Docker Registry 2.0 的托管、私有 Docker 容器注册表服务。ACR 允许用户在 Azure 中以安全且可扩展的方式构建、存储和管理容器镜像和工件。ACR 与现有的容器开发和部署管道集成良好,并且对于存储和管理可在各种 Azure 服务中部署的自定义 Docker 镜像特别有用。
当使用 Azure Machine Learning 时,有一个底层过程用于打包模型以进行部署。这个打包过程包括创建一个包含模型、评分脚本以及运行模型所需的所有依赖项的 Docker 镜像。一旦创建了此 Docker 镜像,它就需要存储在一个可以检索和运行的地方。
这就是 ACR 发挥作用的地方。当您第一次使用 Azure Machine Learning 部署模型时,即使您没有明确设置 Azure 容器注册表,平台也会自动为您创建一个。这是一个无缝的体验;然而,我们需要意识到这对成本和安全性的影响。
在下一节中,我们将了解如何保护我们的 ACR 和在 Azure 容器实例(ACI)中部署的容器。让我们从 ACR 开始。
使用 Azure 容器注册表保护图像
保护 ACR 涉及网络安全、访问控制和图像安全方面的最佳实践的结合。同样,对于计算,ACR 的安全最佳实践涉及尽可能使用托管标识,并确保 ACR 位于与工作空间相同的虚拟网络后面。
要在 VNet 中隔离容器注册表,步骤与其他资源类似。然而,在我们能够使用网络功能之前,我们需要更新服务以使用高级定价层。
要更新定价层,请访问与您的工作空间关联的资源中的 ACR 刀片,并找到属性部分。按照下一张截图所示更新值,然后点击保存:

图 7.26 – 更新容器注册表属性
现在我们可以使用 ACR 的网络功能了。正如我们已多次看到的,转到网络部分,将公共访问设置为禁用,如下截图所示:

图 7.27 – 禁用公共访问
在私有访问选项卡上,点击创建私有 端点连接:

图 7.28 – 为注册表创建私有端点
按照常规步骤操作,确保在资源选项卡下的私有端点表单中,填写正确的资源和资源类型:

图 7.29 – 填写私有端点表单
保护 ACR 是一个多方面的过程。通过采取涵盖网络安全、访问控制和持续监控的全面方法,您可以确保您的容器镜像保持安全,并且只能由经过身份验证的用户或应用程序访问。
容器注册库只是模型的存储库。它们可以通过发布的端点公开,以便它们可供应用程序使用。让我们探索如何在使用 ACI 部署时确保这些端点的安全性。
与 ML 端点一起工作
当我们通过工作区部署模型时,可用的选项是 Azure Kubernetes 和 ACI。最快的选项是使用 ACI,因为它们可以通过工作区快速部署,并且无需进一步配置。如果您想回顾部署模型的过程,可以查看第一章中的部署模型部分。
在通过工作区部署端点后,没有选项可以禁用容器的公共访问。在这种情况下,您可以做的仍然是注册模型,但使用从存储库中保存的容器在新 ACI 部署中重新部署它。这提供了网络隔离的机会。
要做到这一点,我们需要在容器实例表单的基本选项卡中从与我们的工作区连接的 ACR 中选择已部署的镜像。开始填写表单,就像在下一个屏幕截图中所展示的那样:

图 7.30 – 填写基本详情
当我们到达需要选择图像源的部分时,请选择连接到您工作区的 ACR。填写注册表、镜像和镜像标签以匹配您的模型,然后根据需要填写表单的其余部分:

图 7.31 – 选择正确的 ACR
接下来,您将找到网络选项卡。从这里,您可以限制网络。
与 VNet 隔离的应用程序考虑因素
在这个阶段要小心。这完全取决于您的应用程序托管的位置,因为这个端点是打算由服务的外部应用程序使用的。如果它是在 Azure 上托管的应用程序,您可能可以轻松配置访问。如果它是在本地托管的内部应用程序,您可能需要之前提到的某些服务,例如 VPN 网关来访问隔离的端点。如果它是一个面向公众的应用程序,您可能需要进一步配置 VNet 附加的网络安全组或防火墙,以正确允许访问。由于这个过程的部分严重依赖于其他因素,在使用该 API 端点进行评分、训练等之前,请确保您已经探索了所有网络和身份验证选项。
要在 VNet 后面进行隔离,请选择虚拟网络和子网。子网必须与之前我们用来容纳端点而不是虚拟机的子网不同。请参考以下截图:

图 7.32 – 配置网络隔离
然后,您可以按照需要完成其余的设置并创建端点。如果需要,请注意环境变量。这些可以在高级选项卡中填写。然后,您可以审查 + 创建服务。您可以从同一 VNet 中部署的虚拟机测试服务,以测试连接性。这只是隔离端点的一种方法。另一种方法是使用工作空间管理的网络隔离,这是一个尚未完全可用的新功能。值得关注这个功能未来的发展。
工作空间管理的网络隔离
Azure 机器学习目前为 VNet 隔离提供了另一种集成管理选项:使用由工作空间管理的 VNet 自动化流程。在撰写本文时,此功能仍处于预览阶段,不应用于生产工作负载,因为服务不提供服务级别协议(SLA)。如果您想了解更多信息,您可以在 https://learn.microsoft.com/en-us/azure/machine-learning/how-to-managed-network?view=azureml-api-2&tabs=azure-cli 找到更多信息。
我们已经探讨了多种利用 Azure 基础设施来保护我们的 Azure 机器学习工作空间及其相关资源的方法。如果我们已经拥有可以用于组织其他目的的云基础设施,那么这会更容易。即使我们没有,也值得探索,因为它不仅可以帮助我们隔离资源并减少攻击面,还可以在发生安全事件的情况下防止数据泄露。
摘要
在本章中,我们讨论了利用网络保护我们的 Azure 机器学习工作负载的多个方面。
本章的主要目的是学习基本的网络实践,以隔离工作空间及其所有相关服务,特别是存储账户、密钥保管库和 Azure 容器注册库。尽管公共访问意味着来自公共互联网的访问,而不是未经授权的访问,但凭证可能会泄露,恶意行为者可能会获得访问权限。通过使用虚拟网络(VNets)隔离我们的资源,我们正在减少攻击面。
结合网络和关于身份的最佳实践,例如尽可能配置托管身份,并使用适当的基于角色的访问控制(RBAC)来管理我们的用户和服务,我们可以进一步确保在云服务和基础设施中保持基本的安全态势。
在下一章中,我们将了解如何通过持续集成和持续交付(CI/CD)自动化我们的机器学习任务的最佳实践。
第八章:管理和安全保障 MLOps 生命周期
尽管数据和基础设施很重要,但它们的管理可能会产生额外的开销,并从实际的 ML 任务中分散注意力。当不同的角色在 ML 项目中协作时,需要自动化和标准化事物,以使日常任务更加高效。
在本章中,我们将探讨 MLOps 的最佳实践以及如何使用 Azure 和其他工具来实施它们。我们将深入了解如何利用基础设施即代码(IaC)和 Azure DevOps 中 DevOps 在 ML 生命周期中的应用,以实现持续集成/持续交付(CI/CD)。尽管这些不是实施 MLOps 的唯一方法,但 Azure 为我们提供了全面的监控和日志记录功能,我们可以利用事件网格等服务来启动事件驱动的流程。这意味着我们不仅限于工具,还可以实施我们自己的工作流程,并轻松地根据我们的流程进行定制。
在本章中,我们将涵盖以下主要主题:
- 
在 Azure Machine Learning 中使用 MLOps
 - 
利用 IaC
 - 
实施 CI/CD
 - 
探索 Azure 中的事件驱动工作流程
 
到本章结束时,我们将了解 MLOps 是什么,Azure Machine Learning 中的 CI/CD 是什么样的,以及如何结合不同的服务并创建我们自己的工作流程。
技术要求
本章深入探讨了几个 DevOps 概念。对 Git、版本控制和 DevOps 有一定的了解将有助于理解本章中描述的概念。如果你缺乏先前的技术知识,以下的学习资源将帮助你理解一些基本概念和功能。请阅读它们以回顾理解本章内容所需的前提条件:
- 
Git 和版本控制:
learn.microsoft.com/en-us/training/modules/intro-to-git/ - 
使用 Azure DevOps 构建应用程序:
learn.microsoft.com/en-us/training/paths/build-applications-with-azure-devops/ - 
GitHub Actions:
learn.microsoft.com/en-us/training/paths/automate-workflow-github-actions/ 
在 Azure Machine Learning 中使用 MLOps
MLOps这个术语是机器学习和运营的结合,指的是在生产环境中管理 ML 模型生命周期的实践、工具和策略。正如 DevOps 旨在简化软件的开发和运营流程一样,MLOps 旨在为 ML 系统做同样的事情。实施 MLOps 可以提高 ML 项目的生产力、可重复性和敏捷性。MLOps 专注于一系列特定的实践。
让我们探索每个实践以及如何使用 Azure Machine Learning 功能来实现它们:
- 
协作: 在机器学习项目中,促进数据科学家、机器学习工程师和运维团队等不同角色之间的有效协作是核心,因为项目的成功涉及多个角色。通过使用共享的平台和工具,数据科学家可以专注于模型原型设计,机器学习工程师确保其生产就绪,而运维专家则监控其实时性能。Azure 机器学习已经通过一个专用的工作空间实现,在这里每个人都可以协作,促进透明度和团队合作。此外,它基于 Azure,借助 Microsoft Entra ID 和 RBAC,我们可以轻松实现协作,同时遵守安全最佳实践。
 - 
版本控制: 在 MLOps 中的版本控制不仅限于代码,它还扩展到数据集、模型配置、参数和结果。目标是确保任何实验或模型训练都可以在任何时间确定性地重现。考虑一个场景,即模型的性能突然下降。使用版本控制,团队可以回滚到之前表现更好的模型配置,确定当时使用了哪些数据集和超参数。这涉及到维护模型版本、训练数据、决策和变更的系统记录。这对于合规性至关重要,尤其是在受监管的行业中,并确保模型决策透明且可追溯。Azure 机器学习允许我们通过将它们注册到工作空间来实现数据和模型的跟踪和版本控制。
 - 
模型验证: 这种做法确保模型在部署前符合质量标准。它包括对代码的单元测试、对保留数据集的验证,甚至是对现实世界场景的模拟。例如,在部署自动驾驶汽车模型之前,它在虚拟环境中进行测试,以确保它正确识别行人、遵守交通信号并应对各种天气条件。这可以作为 CI/CD 管道的一部分实现。
 - 
CI/CD: 机器学习的 CI/CD 自动化模型训练、验证和部署过程。当新数据到来或代码发生变化时,模型将被重新训练,如果它符合设定的标准,则自动部署。例如,在改进模型架构后,数据科学家将更改推送到存储库。CI/CD 管道重新训练模型,评估它,如果它超过预定义的准确度阈值,则无需人工干预即可在生产中更新模型。在下一节中,我们将看到一些使用 DevOps 的实现。
 - 
监控和日志记录:持续监控跟踪模型的健康状况、性能以及任何潜在的数据漂移。日志记录捕获预测、输入数据和异常,确保有可追溯的证据来记录模型在生产中的行为。一个生产中的图像识别模型开始错误地分类某些对象。监控工具检测到这种性能下降,通过检查日志,工程师可以识别问题。Azure 机器学习维护关于工作区多个方面的日志,无论是数据漂移还是端点未响应。
 - 
可扩展性:MLOps 专注于构建可以随着数据或需求的增加而扩展的机器学习系统,确保基础设施和流程可以处理增长而不会降低性能。假设一个初创公司的用户基础在一年内增长了十倍。他们的推荐系统在设计时就考虑了可扩展性,可以处理这种激增,而无需进行全面的重构或造成服务中断。由于 Azure 机器学习利用 Azure 基础设施,我们可以扩展端点和计算以适应这种类型的扩展场景。
 - 
可重现性:MLOps 的核心是能够重现实验、结果或模型部署。这确保了一致性,有助于调试,并促进了对系统的信任。假设团队成员发现了一个突破性的模型改进;使用 MLOps 实践,其他团队成员可以复制确切的条件、数据预处理步骤和训练配置,以验证并在此基础上进一步研究。模型注册在工作区内部处理这个问题。
 - 
自动化:机器学习生命周期的许多阶段,从数据摄取到模型重新训练,都是自动化的,以提高效率和减少人为错误。当月销售数据上传到云存储时,自动化的管道会预处理数据,重新训练预测模型,并使用新的预测更新仪表板——这一切都不需要人为干预。根据我们想要做什么,我们可以利用 DevOps、Azure Functions 或简单的 Webhooks 等服务来自动化管道和工作流程。
 
在 Azure 机器学习中结合 MLOps 实践,创建了一个全面高效的机器学习生命周期管理系统,确保模型可靠高效,并带来持续的价值。
让我们看看这些实践的实际应用,从 IaC 开始。
利用 IaC
IaC(基础设施即代码)是 DevOps 中的关键实践,它通过代码自动管理、提供和配置 IT 基础设施。在 Azure 中,有多种工具和服务可以促进 IaC 实践。我们之前已经提到了一些,但在这里我们将全面回顾。
让我们深入了解如何在 Azure 中实现 IaC 以及我们可以使用的服务:
- 
Azure 资源管理器(ARM)模板:ARM 模板是 Azure 中的原生 IaC 解决方案。它们是定义您需要为解决方案部署的资源所需的 JSON 文件。通过使用 ARM 模板,您可以声明式地定义和部署您的基础设施。我们可以通过为模板定义参数来使它们更模块化,以创建可重用的部署脚本并实现资源部署的条件逻辑。
 - 
Azure Bicep:Bicep 是一种用于声明式部署 Azure 资源的编程语言。它本质上是对 ARM 模板的透明抽象,使得编写和管理 Azure 基础设施更加容易。与 ARM 的 JSON 相比,Bicep 提供了更简洁、易读的语法,并且有开发环境集成,提供自动完成、类型安全和其他有用功能。
 - 
Azure CLI 和 PowerShell:Azure CLI 和 Azure PowerShell 都是 Azure 提供的用于管理 Azure 资源的命令行工具。虽然它们在技术上属于命令式工具(您正在逐步告诉 Azure 要做什么),但它们通常用于脚本中,以自动化 IaC 方式的配置和部署任务。
 - 
Azure 蓝图:Azure Blueprints 允许组织定义一组符合组织标准和要求的可重复使用的 Azure 资源。与 ARM 模板相比,蓝图更全面,因为它们可以定义角色分配、策略分配和 ARM 模板部署。与代码一样,蓝图具有版本控制功能,因此可以在分配新订阅时使用旧版本。
 - 
Azure 上的 Terraform:Terraform 是 HashiCorp 开发的开源 IaC 工具。它使用一种称为 HashiCorp 配置语言(HCL)的语言来定义和配置基础设施。Azure 完全支持 Terraform,允许您将其用作 ARM 模板的替代方案。其他支持的第三方平台包括 Ansible、Chef 和 Pulumi,用于在 Azure 中进行基础设施自动化。
 
无论您使用哪种服务,使用 IaC 都有多种好处。通过消除环境漂移并确保每个环境以相同的方式部署,我们获得了一致性。由于我们可以在不同的环境或项目中使用相同的脚本或模板,因此具有可重用性。在支持它的服务中,例如 Azure Blueprints,我们可以拥有版本控制。对于不支持此功能的其他服务,我们仍然可以使用版本控制系统保存脚本,以跟踪更改并在必要时回滚。此外,我们还可以将 IaC 集成到 CI/CD 管道中,作为部署过程的一部分自动配置或更新基础设施。
让我们探索 IaC 如何与 Azure 机器学习集成。
将 IaC 与 Azure 机器学习结合
将 IaC 与 Azure Machine Learning 结合意味着我们将 ML 资源的自动化设置、管理和配置与它们所依赖的更广泛的云基础设施集成在一起。这种方法确保了 ML 运作的一致性、可重复性和效率。
以下是一些将 IaC 与 Azure Machine Learning 结合的示例:
- 
基础设施:一切从设置所需资源开始,包括工作区本身、计算实例(例如,训练集群,例如 Azure Kubernetes 服务(AKS)或 AML 计算)、推理集群以及网络组件,如 VNets、子网和安全组。
 - 
数据存储和数据集:Azure Machine Learning 中的数据存储代表存储后端(例如,Azure Blob Storage)。在配置后,我们可以使用 Azure Machine Learning SDK 通过 IaC 程序化注册数据存储和数据集。
 - 
模型部署:与数据相同的原理适用于模型。一旦模型训练完成,它们可以被部署到端点进行实时或批量推理。我们可以使用 IaC 来配置部署目标,例如 AKS 或 Azure 容器实例(ACI)。然后,我们可以使用 Azure Machine Learning SDK 将模型部署到这些目标,并集成自动缩放、日志记录和监控等功能。
 - 
自动化和编排:我们可以将所有 IaC 脚本和 ML 代码存储在版本控制系统(如 Git)中。然后,我们可以使用 Azure DevOps、GitHub Actions 或其他 CI/CD 工具来自动化基础设施的部署和 ML 工作流的执行。这确保了基础设施更改或 ML 模型的更新将启动自动化流程。
 
通过将 IaC 与 Azure Machine Learning 集成,团队可以确保环境的一致性,简化 ML 工作流程,并促进数据科学家、ML 工程师和 DevOps 团队之间的协作。由于 IaC 是 MLOps 的一个组成部分,这种设置确保了每个更改——无论是基础设施相关的还是模型相关的——都是版本化的、可重复的,并且可以自动处理。这种简化的流程最小化了人工干预和潜在错误,优化了 ML 开发生命周期。
MLOps 的另一个核心部分是持续集成和持续交付。让我们探索如何使用 Azure DevOps 来实现它。
实施 CI/CD
CI/CD 是一种软件工程实践,它促进了频繁的代码集成和自动化部署。这种方法在 ML 项目中越来越受欢迎,以确保模型不断改进、验证和以简化的方式部署。在 Azure Machine Learning 中,有多个工具和服务可以帮助您在 ML 生命周期中实现 CI/CD。
以下是一个 CI/CD 的示例:
- 
通过使用带有 Azure Machine Learning 扩展的 VS Code 进行开发,我们可以编写我们的脚本。
 - 
这些脚本可以使用 Git 仓库(例如 GitHub 或 Azure Repos)进行版本控制。
 - 
如果我们有专业知识,我们可以设置自动测试来验证我们的模型。这可能包括单元测试、集成测试以及其他验证或数据检查。
 - 
我们可以配置 Azure 管道,以便在代码库发生更改时自动触发。CI/CD 管道可能包括以下内容:
- 
训练模型
 - 
记录指标
 - 
检索已注册的模型
 - 
打包和部署模型
 
 - 
 
让我们看看 Azure DevOps 和管道的示例。
使用 Azure DevOps 进行工作
Azure DevOps 是一套开发工具和服务,用于代码开发、构建和部署应用程序的工作和协作。
Azure DevOps 包含一系列服务,例如以下内容:
- 
Azure 板:这提供了带有看板、待办事项、团队仪表板和自定义报告的工作跟踪。它允许团队在整个开发生命周期中规划、跟踪和讨论工作。
 - 
Azure 代码库:这是一个版本控制系统,提供 Git 代码库以进行源代码控制。它支持拉取请求、分支和搜索。
 - 
Azure 管道:这是一个 CI/CD 平台,用于部署和测试应用程序到不同的平台,包括云和本地提供的产品。
 - 
Azure 测试计划:这是一个包含多种测试工具的平台,适用于不同的场景,如探索性测试或持续测试。
 - 
Azure 软件包:这允许团队之间协作,将来自私有或公共存储库(如 NuGet 或 Maven)的软件包共享到他们的管道中。
 
注册 Azure DevOps
要开始使用 Azure DevOps,请遵循此快速入门指南:learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops。
对于 Azure 机器学习,我们可以利用管道来触发 ML 任务。让我们看看我们如何连接 Azure 机器学习工作区并通过 Azure DevOps 运行我们的 ML 管道。
创建与工作区的连接
在我们开始处理与 Azure 机器学习工作区相关的内容之前,我们需要使用 Azure DevOps 创建一个服务连接。为此,我们需要在 Azure DevOps 中创建一个新的项目。以下是步骤:
- 打开您的 Azure DevOps 项目,在 项目设置 下查找 服务连接:
 

图 8.1 – 创建服务连接
- 点击 创建服务连接,在随后的表单中,选择 Azure 资源管理器,如图所示:
 

图 8.2 – 从 Azure 资源管理器选项开始
- 点击页面底部的下一步,在身份验证方法选项中,最快的选项是选择服务主体(自动),因为它不需要从 Azure 门户进行进一步配置。为了更好的安全性,如果您有一个已创建的托管标识,您可以考虑使用它,但如果您不确定,您可以直接使用服务主体(自动)选项。
 

图 8.3 – 选择服务主体选项
- 然后,通过填写以下截图所示的详细信息,在您的订阅级别选择工作区资源:
 

图 8.4 – 选择并连接到工作区资源
就这样!现在我们已经建立了与工作区的连接,我们可以用它来运行管道。您仍然可以通过从列表中选择您的连接来执行任何更新或查看使用数据。

图 8.5 – 修改连接属性
现在我们已经建立了连接,我们可以自由地运行管道。让我们在下一节中看看如何操作。
创建新管道
创建新管道的步骤很简单。挑战在于做好必要的准备工作,以便从 Azure DevOps 调用 Azure 机器学习管道。
如果您没有任何示例,可以使用以下存储库,其中包含管道示例和代码。
Azure 机器学习示例存储库
如果您没有管道并想探索 Azure 中的某些 ML 示例,您可以从这个存储库中 fork 和运行代码:https://github.com/Azure/mlops-v2-ado-demo。
在 Azure DevOps 中,您需要构建一个 YAML 管道来运行您的任务。以下是创建新管道所需的步骤:
- 首先创建一个新的管道,如下面的截图所示:
 

图 8.6 – 新管道
- 您需要提供存储脚本所在的存储库。您可以使用项目中的存储库或外部存储库,例如 Bitbucket 或 GitHub:
 

图 8.7 – 选择代码存储库
- 我选择了同一项目中的存储库中的那个,所以我只需要选择存储库的名称,如下一截图所示:
 
f

图 8.8 – 从列表中选择存储库
- 在这里,选择启动管道模板以加载简单的管道 YAML 文件:
 

图 8.9 – 选择启动管道模板
现在,这里是一个大挑战。您需要定义触发器并从这里启动 Azure 机器学习管道。一个有效的开始方法是使用 CLI 提交任何 ML 作业。
启动管道确实提供了一些示例代码,如下一张截图所示,以帮助您开始并填写详细信息。对于一些事物,例如变量,您也可以通过集成设计器添加它们:

图 8.10 – 填写代码以调用您的管道
如果您选择克隆上一节中建议的存储库,您可以在 mlops/devops-pipelines 文件夹中找到管道 YAML 代码。复制并粘贴您选择的文件并提交代码。
一旦提交代码,您就可以运行您的管道。如果出现问题,您可以看到相关的错误消息,并且您始终可以返回修复管道代码并重新提交作业。
YAML 管道编辑器
有关 Azure DevOps 中 YAML 编辑器的简要介绍,请参阅此链接的信息:learn.microsoft.com/en-us/azure/devops/pipelines/get-started/yaml-pipeline-editor?view=azure-devops。
Azure DevOps 提供日志和输出,可以帮助您监控运行情况。此外,您还可以直接从 Azure 机器学习工作区监控运行。考虑在 Azure DevOps 中使用 触发器来自动化 ML 管道运行 – 例如,每次您的训练脚本或数据集发生变化时。
GitHub Actions
类似的功能也可以使用 GitHub Actions 实现。有关快速入门指南,请参阅此教程:https:/learn.microsoft.com/en-us/azure/machine-learning/how-to-github-actions-machine-learning?view=azureml-api-2&tabs=userlevel。
请记住,您将执行的具体步骤和任务将取决于您的 ML 项目的复杂性和您希望如何构建您的 CI/CD 管道。前面的步骤提供了一个高级指南,但您可能需要根据您的需求深入了解具体细节。
Azure DevOps 提供了一套全面且集成的工具,这些工具有助于敏捷软件开发、CI/CD、测试以及团队之间的协作。然而,它并不是唯一与 Azure 机器学习集成的 CI/CD 工具。我们可以使用 GitHub Actions 或通过使用其他服务来创建自己的工作流程。
让我们看看如何使用 Azure 事件和日志来驱动 Azure 机器学习中的工作流程。
探索 Azure 中的事件驱动工作流程
在 Microsoft Azure 的背景下,术语 事件 可以与多个服务和概念相关联,但最常见的是指一个消息或通知,表明平台上的某个事件发生。例如,我们在工作区中完成的每个操作都会生成事件,例如当工作区被创建或我们更改设置时。这些事件可以通过其他服务,如 Azure Event Grid,利用事件来创建工作流程。让我们接下来检查它。
探索事件网格
Azure 事件网格是一个完全托管的事件路由服务。它使您能够轻松构建响应 Azure 服务或本地环境中发生的变化或事件的程序。Azure 事件网格旨在通过事件将基于云的应用程序的不同部分连接在一起。应用程序可以在各种场景中从 Azure 事件网格中受益,例如在事件响应中自动化工作流(例如,在将图像上传到 Azure Blob 存储时创建缩略图)或监控 Azure 中的资源(例如,获取虚拟机更改的通知)。
事件网格使用发布/订阅模型来分发事件。发布/订阅(通常缩写为pub-sub)模型是一种在分布式系统中使用的消息通信模式。它将发送者(发布者)与接收者(订阅者)解耦,允许它们独立操作。这种解耦意味着发布者和订阅者不需要知道彼此的存在。
下面是发布/订阅模型的工作原理。至少有三个组件:
- 
发布者:这是产生消息或事件的实体或组件。它不会直接发送到特定的接收者或订阅者。相反,它将消息发布到一个称为主题或频道的中间件。
 - 
主题或频道:主题(有时也称为频道)是消息发布的通道。订阅者对一个或多个主题表示兴趣,并且只接收感兴趣的消息,而无需知道发布者是谁。
 - 
订阅者或处理器:这是对接收特定消息感兴趣的实体或组件。它订阅特定的主题或频道,并在发布者向该主题发送消息时收到通知。
 
发布/订阅模型
这里是有关发布/订阅模型的一些更多信息:发布/订阅模型。
事件网格是一个负责管理主题、存储消息和通知订阅者的事件平面。以下是关键好处:
- 
事件源:Azure 事件网格支持各种内置事件源,如 Azure Blob 存储、ARM 等。它还允许创建用于用户定义事件的定制主题。
 - 
统一事件架构:事件网格有一个通用的事件模型,这使得跨不同的 Azure 服务处理事件变得更加容易。
 - 
事件过滤:它通过允许订阅者根据事件类型或主题过滤他们感兴趣的事件,实现了细粒度控制。
 - 
可靠性:它提供至少一次交付保证,以确保事件始终被发送到订阅者。它还提供了一个名为死信队列的选项,用于保存由于各种原因而被丢弃到存储 blob 以供进一步处理的事件。
 - 
可伸缩性:它是根据需求自动扩展的,确保您的应用程序可以处理大量事件,正如大多数 Azure 服务所提供的那样。
 - 
低延迟:它提供一致的低延迟事件交付,这对于实时应用至关重要。
 - 
解耦:通过将事件生产者与事件消费者分离,事件网格允许具有更大的灵活性和更模块化的应用程序架构。
 
在下一节中,我们将看到一个示例,其中发布者是 Azure 机器学习工作区,处理器是存储队列。
让我们看看如何使用事件网格来实现这一点。
在 Azure 机器学习中处理事件
我们可以直接从 Azure 门户开始此过程。以下是执行此操作的步骤:
- 打开Azure 机器学习资源选项卡并找到事件部分:
 

图 8.11 – 打开 AzureML 资源事件
- 在入门选项卡中,如果我们向下滚动,我们可以看到哪些事件处理器是事件网格原生支持的。当然,我们总是可以创建自己的:
 

图 8.12 – Azure 事件网格处理器
- 在页面顶部,我们可以点击+事件订阅来创建一个新的事件订阅。填写基本字段,仔细选择我们想要监控的事件,如下面的截图所示:
 

图 8.13 – 创建事件订阅
- 然后,我们可以选择一个目的地。在这个例子中,我们将它们添加到存储队列以进行进一步处理,但请始终记住,您可以通过使用另一个服务(如 Azure Functions 或 Azure Logic Apps)来触发简单到复杂的流程。在端点详情下,选择存储队列端点类型并点击选择****一个端点:
 

图 8.14 – 选择存储队列
- 完成详细信息,并在提示时选择创建新队列并为它提供一个名称:
 

图 8.15 – 创建新队列
- 在交付的托管标识下,选择系统分配:
 

图 8.16 – 选择托管标识
- 在过滤器选项卡中,您可以选择您想要的过滤器。我现在将跳过此选项卡:
 

图 8.17 – 选择过滤器
- 在附加功能选项卡中,选择启用死信队列选项是明智的,您可以选择您想要的重试策略和事件订阅过期时间值:
 

图 8.18 – 启用附加功能
- 在交付属性选项卡中,选择合适的存储队列消息生存时间(TTL)。默认为7天:
 

图 8.19 – 选择消息生存时间
- 最后,点击创建,这样就完成了。现在,每当事件被记录到服务中时,它将被保存在存储队列中。
 
当然,这并不是我们拥有的唯一选项;我们可以使用多个服务作为事件处理器来捕获来自 Event Grid 的事件。让我们接下来探索那些服务。
在 Azure 中探索事件处理器
当使用 Event Grid 时,还有其他无缝集成的选项。在之前演示的事件订阅表单中的事件类型中,以下是我们可以选择的选项:

图 8.20 – Azure Event Grid 的端点选项
让我们探索一些这些服务以及它们如何与 Event Grid 协同工作:
- 
Azure Functions:Azure Functions 是一种无服务器计算服务。它允许开发者在特定事件发生时运行代码片段(函数),而无需担心基础设施。这些函数可以用多种语言编写,包括 C#、Java、JavaScript、Python 和 PowerShell。Azure Functions 可以轻松集成 Event Grid,因为它支持 Event Grid 触发器。这意味着当事件发布时,Azure Functions 函数将自动触发并处理事件数据。
 - 
Azure Logic Apps:Azure Logic Apps 是一种云服务,它使用户能够设计和执行集成不同服务和系统的流程。这些流程可以在 Azure 内部和外部进行,连接基于云和本地系统。Logic Apps 的主要重点是集成,这使得连接不同的服务、编排数据流和自动化流程变得容易。这个描述与 Azure Functions 服务非常相似;然而,Logic Apps 需要无代码场景并提供可视化设计体验,这使得使用拖放连接器创建工作流程变得简单。当发生事件(例如,文件被添加到 Azure Blob 存储)时,Azure Event Grid 可以通知 Logic Apps 应用程序,反过来,该应用程序可以启动预定义的工作流程。
 - 
对 Webhook 的
POST请求(用于执行操作)。Webhook 通常用作在网络上集成不同系统或服务的轻量级方法。Azure Event Grid 可以使用 Webhook 将事件数据发送到外部系统。本质上,外部系统通过 Webhook 订阅 Event Grid 主题,当事件发送到该主题时,Azure Event Grid 使用 Webhook 将事件数据推送到订阅者的端点。 - 
事件中心:Azure 事件中心是微软 Azure 提供的一个大数据流平台和事件摄取服务。它每秒可以接收和处理数百万个事件,使其非常适合遥测和事件流分析场景,例如实时分析、应用程序监控和物联网遥测。事件中心本质上充当了事件管道的高度可扩展的“前门”,允许您摄取大量的事件数据,然后对其进行处理或存储。
虽然 Azure Event Grid 和 Azure Event Hubs 都处理事件,但它们有不同的用途。Event Grid 是为跨不同 Azure 服务的事件路由和事件驱动架构而设计的。另一方面,事件中心是为高吞吐量、大规模事件流而设计的。
在需要响应与事件中心相关的特定事件的情况下,例如创建新的事件流时,可以使用 Azure Event Grid 与 Azure Event Hubs 结合使用。
 
这些是 Event Grid 最常见的处理程序。然而,由于我们可以使用 Webhooks 或 Azure Functions 构建自己的处理程序,因此我们可以根据这些事件集成任何业务逻辑,包括在不想使用外部 DevOps 服务(如 Azure DevOps 或 GitHub)的情况下触发管道端点。本质上,Azure Event Grid 简化了基于事件的应用程序创建,并允许云应用程序景观更加反应灵敏和动态。
摘要
在本章中,我们简要介绍了 MLOps 及其在机器学习项目中的价值。通过使用 MLOps 工具和最佳实践,我们可以简化我们的机器学习任务,提高效率和协作。
尽管 MLOps 拥有从数据、模型、部署到开发的工具和实践,但我们更关注如何使用基础设施即代码(IaC)来管理我们的资源,以及如何使用 DevOps 实现持续集成和持续部署(CI/CD)。虽然使用成熟的代码开发工具提供了最常见的工作方式,但当涉及到 Azure 时,它们并非唯一的选择。由于 Azure 在其服务中收集了多个日志和事件,我们可以利用这些日志来自动化并使用其他 Azure 服务和工具创建自定义工作流程。Azure 收集的有关其服务的日志可以用于遥测和报告之外的其他用途。
让我们继续进入下一章,我们将看到如何使用 Azure Monitor 服务进行日志记录、监控和威胁检测。
第九章:日志记录、监控和威胁检测
仅遵循最佳实践是不够的。威胁领域每天都在变化,对手找到新的方法来访问我们的资源。监控我们已实施的保障措施对于维护我们的安全态势至关重要。在本章中,我们将了解如何监控我们的资源,并查看我们的安全措施在防止和检测威胁方面的有效性。我们将学习 Azure Monitor 的工作原理以及如何配置日志记录、保留和通知。最后,我们将探索 Defender for Cloud 和 Microsoft Sentinel 的某些功能,这些功能可以帮助我们进一步保护资源并减轻威胁,甚至在实时中。
在本章中,我们将涵盖以下主要主题:
- 
启用日志记录并配置 Azure 服务的数据保留
 - 
使用 Microsoft Defender 保护资源
 - 
使用 Sentinel 探索威胁管理
 
到本章结束时,我们将能够设置警报、创建分析查询、提高我们组织的网络安全态势,并了解在实时减轻威胁方面的下一步是什么。
技术要求
虽然本章主要涉及监控和日志记录,但在实施解决方案时,了解 Kusto 查询语言(KQL)可能会很有用。
KQL 是一种查询语言,用于查询、分析和可视化存储在 Azure Data Explorer、Azure Monitor、Microsoft Sentinel 和 Application Insights 中的大数据集。KQL 是一种强大的语言,允许您对数据进行各种操作,包括过滤、聚合、连接和可视化。
KQL 学习资源
可以在这里找到学习 KQL 的资源:https://learn.microsoft.com/en-us/azure/data-explorer/kql-learning-resources。
启用日志记录并配置 Azure 服务的数据保留
一旦我们创建了一个 Azure 订阅,我们就可以通过 Azure Monitor 服务获得完整的监控能力。这是一个我们无需启用或执行任何操作的服务,它自动对我们订阅可用。尽管它为我们提供了完整的堆栈监控和高级分析,但我们可以使用在 Azure Monitor 之上工作的服务做不同的事情。Azure Monitor 可以监控和组合 Azure、本地和其它云中的数据。
您可以通过在搜索栏中搜索 monitor 并点击资源来访问 Azure Monitor 服务。在这个页面上,您将看到 Monitor 提供的所有内容:

图 9.1 – Azure Monitor 概览
让我们看看 Azure Monitor 的关键组件。
使用 Azure Monitor
监控器收集两种类型的数据,指标和日志。指标是表示特定时间点 Azure 资源性能和健康状况的数值。这些指标提供了关于资源如何运行的实时数据,可用于监控和解决 Azure 中的应用程序和基础设施问题。Azure Monitor 收集了广泛的指标,包括性能指标,如 CPU 使用率、内存使用率、网络流量和磁盘活动。这些指标针对不同类型的资源,如虚拟机、数据库和 Web 应用程序。
Azure Monitor 中的指标在不同的时间框架内收集,具体取决于资源类型。例如,某些指标可能每分钟收集一次,而其他指标可能每小时收集一次。Azure Monitor 收集的指标也用于 Azure 自动扩展,根据需求自动调整资源组中的资源数量。数据在服务中保留 90 天。对于更长的保留期,还有其他服务,如日志分析或使用 Azure API 在存储帐户中的无限保留。
在下面的截图中,我们可以看到指标如何在图表中可视化:

图 9.2 – Azure Monitor 指标
这些图表可以过滤和修改以显示不同的指标,可用于生成警报,并可以保存并添加到 Azure 仪表板中。
Azure Monitor 还收集日志。日志是来自您 Azure 订阅和租户中各种来源的事件记录。日志可以从广泛的来源收集,包括 Azure 资源、虚拟机操作系统、数据库、安全事件、网络事件应用程序以及使用 API 导入数据的来自外部源的自定义日志。
日志和指标在 Azure Monitor 中协同工作。您可以将指标数据与日志数据相关联,以全面了解您资源的健康和性能。我们可以通过访问资源选项卡并点击活动日志来查看每个资源的单个日志,如下面的截图所示:

图 9.3 – Azure Monitor 日志
活动日志也可以通过 Azure 门户的主页或顶部栏中的铃声图标获取。您可以通过 Rest API 和命令行工具获取指标和日志。
当与监控或日志分析数据交互时,监控器还内置了 RBAC 角色。请查看以下表格截图,了解这些角色可以做什么:

图 9.4 – Azure Monitor RBAC
接下来,让我们看看如何使用日志分析查询和从日志中获得洞察。
设置日志分析
如前所述,Azure Monitor 会保留数据 90 天。如果我们需要保留更长时间的数据,我们可以使用日志分析。这是一个强大的工具,可以帮助我们从多个来源收集数据,并将其保存到一个或多个工作区中,这些工作区充当日志的容器。它们为查询、视图和其他配置提供了范围。我们可以拥有多个工作区来组织和管理工作来自不同来源的日志数据。这些查询可以可视化、导出并保存以进行持续监控。Azure Monitor 日志使用 KQL 查询和分析日志数据。KQL 是一种类似于 SQL 的强大语言,专门设计用于高效查询大型数据集。它允许我们在日志上执行复杂的搜索和分析。
要开始收集日志,我们需要创建一个日志分析工作区。搜索“日志分析工作区”,然后点击+ 创建以创建一个新的工作区,如图所示:

图 9.5 – Azure 日志分析工作区
在创建表单中,填写名称和其他所需信息,然后点击审查 + 创建按钮以部署资源。

图 9.6 – 创建日志分析工作区
现在我们已经有一个日志分析工作区,我们需要的只是一些数据。在下一节中,让我们看看如何为我们的 Azure 机器学习资源启用诊断设置并将它们发送到工作区。
启用诊断设置
Azure 诊断设置允许我们从各种 Azure 资源收集和路由诊断数据到不同的目的地进行分析、监控和合规性。此功能有助于我们深入了解资源的性能和运行状况,并根据目标提供过滤和更大的保留时间。常见的目的地包括 Azure 存储帐户、日志分析工作区和事件中心。我们可以同时发送数据到多个目的地。例如,我们可以将数据发送到日志分析工作区和 Azure 存储帐户,以实现冗余或不同类型的分析。
让我们在我们的 Azure 机器学习资源上启用诊断设置。
首先,打开您的 Azure 机器学习资源,选择诊断设置,然后点击添加诊断设置,如图下所示:

图 9.7 – 添加诊断设置
选择您感兴趣的日志类别,并点击选择目标详情。对于这个,我们将使用上一节中创建的日志分析资源。勾选发送到日志分析工作区复选框,并提供所需详情,如图下所示。然后,点击保存:

图 9.8 – 选择日志类别和目的地
我们必须启用额外的日志和更多数据的最重要原因之一是当我们的系统中发生某些事情时能够收到通知。让我们回顾如何在 Azure 监控中设置警报。
处理警报
警报帮助我们监控和管理 Azure 中的资源。当满足某些条件时,我们可以使用警报并接收通知,这有助于我们积极应对问题或变化。创建和使用警报涉及许多组件,让我们看看它们是什么。
我们将首先转到监控选项卡下的警报。在这里,我们可以看到按优先级触发的警报并创建新的警报:
n

图 9.9 – 监控 | 警报
然而,在我们深入创建警报之前,让我们回顾操作组。
创建操作组
在我们创建警报之前创建操作组会更好。操作组定义了当警报触发时要执行的一组通知和操作。这可以包括发送电子邮件和短信、发起 HTTP 请求以及触发 Azure 函数。我们可以直接从警报表单创建操作组,但如果它已经存在,这会使事情更简单。
点击创建,然后从下拉菜单中选择操作组。这将带您到创建操作组表单。填写一些基本详情,如以下截图所示,然后点击下一步。

图 9.10 – 创建操作组的基本详情
接下来,在通知选项卡中,我们可以创建两种类型的通知 – 发送到特定角色的电子邮件或发送电子邮件/短信到特定账户/号码。我们在这里将配置这两个选项。在下拉菜单中选择电子邮件 Azure 资源管理器角色以显示右侧菜单。选择所有者作为角色,然后点击确定。还有其他通知角色的选项,包括贡献者和读取者。在此屏幕上,您还需要提供一个名称:

图 9.11 – 创建角色通知
在下一行,选择电子邮件/短信消息/推送/语音下拉菜单的第二种选项以显示右侧菜单。在这里,获取通知的最简单方法是提供一个电子邮件或向 Azure 移动应用发送推送通知;然而,还有更多可能产生额外费用的选项,例如短信和语音。检查所需的选项并提供必要的信息。例如,在电子邮件部分,您必须提供如这里所示的单独电子邮件:

图 9.12 – 创建电子邮件通知
如果您需要更多角色或更多电子邮件,您始终可以添加更多行并相应地配置它们。这就是它的样子:

图 9.13 – 启用多个通知
完成后,点击下一步进入下一个标签页,操作。
在操作选项卡中,我们可以设置操作。操作不是必需的;然而,这是在一步中同时发送通知和触发其他操作的方式。我们的选项包括以下内容,如以下截图所示:

图 9.14 – 操作类型
我们将不会设置任何内容,但让我们仍然回顾一下我们的选项。其中一些我们在第八章中已经见过:
- 
自动化运行手册:运行手册是自动化 Azure 中任务的一种方式。它们使用 PowerShell、Python 或图形工作流设计器构建。它们可以执行从简单脚本到涉及多个 Azure 服务的复杂工作流的各种任务。
 - 
Azure Function:这是一个无服务器计算服务,允许我们在不显式配置或管理基础设施的情况下运行由事件触发的代码。
 - 
事件中心:这是设计用来收集、处理和分析大量事件或数据流。事件中心可以每秒处理数百万个事件,使其成为处理高吞吐量数据流的强大工具。
 - 
ITSM:这是一种将 Azure Monitor 警报与 IT 服务管理(ITSM)工具(如 ServiceNow 或 System Center Service Manager)集成的方法。它允许在您的警报中满足特定条件时,在您的 ITSM 系统中自动创建事件或工单。
 - 
逻辑应用:这是一个基于云的工作流自动化平台,使您能够使用可视化设计器和连接器自动化和集成不同应用程序和服务中的各种任务和业务流程。
 - 
安全 Webhook/Webhook:应用程序提供其他应用程序实时信息的另一种方式是通过使用 webhook。
 
这些都是在操作下的所有选项。根据具体情况,我们可能需要多个操作组,一旦我们设置了这些操作组,我们就可以开始创建警报规则。
创建警报规则
要创建一个新的警报规则,点击创建,然后在下拉菜单中选择警报规则。这将带我们到创建警报规则表单:

图 9.15 – 警报选项卡
第一步是选择规则的范围。这可以是一个订阅、一个资源或一个资源组。在这里,我们可以选择 Azure 机器学习资源。

图 9.16 – 选择范围
在第二个选项卡中,我们可以选择条件。有不同的条件类型:
- 
基于 Azure 资源发出的指标:例如,您可以将警报设置为当 CPU 使用率超过某个阈值时触发。
 - 
基于对资源的操作:例如,你可以设置一个警报,当发生特定类型的操作时触发,例如虚拟机的删除
 - 
基于对 Azure Monitor Logs 收集的数据的日志查询:你可以创建复杂的查询来定义警报的条件
 
在这里,转到选择信号下拉菜单,并选择所有管理操作选项。这将发送任何对 Azure 机器学习资源的行政变更警报:

图 9.17 – 选择信号
根据信号的不同,你可能会有更多选项,例如频率,但在这里,我们只有关于警报逻辑的少数几个选项,如下面的截图所示。保留默认值并点击下一步:

图 9.18 – 警报逻辑
在操作选项卡中,选择我们之前创建的操作组并点击下一步:

图 9.19 – 选择操作组
在详细信息选项卡中,我们可以填写一些基本详情以确保我们能在列表中识别出警报,如下面的截图所示:

图 9.20 – 警报名称和描述
现在我们已经完成了配置,我们只需要等待警报触发。
在下一节中,我们将看到如何管理多个警报。
管理警报
当事件触发时,你将根据你设置的操作组收到通知。另一种监控警报的方法是从监控选项卡中的警报菜单,如下面的截图所示,我们可以看到事件正在触发。警报可以根据资源或严重性进行筛选:

图 9.21 – 触发的警报
为了确保不是每个人都处理同一个警报,我们可以通过点击右侧的三点菜单,从新建切换到已确认或甚至关闭,来更改此警报的用户响应,如下面所示:

图 9.22 – 更改用户响应
记住,Azure Monitor 警报是维护你的 Azure 资源健康和性能的关键部分。正确配置的警报可以帮助你保持积极主动地管理资源,并迅速响应任何问题。尽管在本章中我们将看到更多监控资源的方法,但这是最快、最简单的方法来开始。
现在,让我们看看如何使用 Application Insights 监控我们的模型和端点。
使用 Application Insights
当我们创建工作区时,其中一个相关资源是应用洞察。应用洞察在 Monitor 之上工作,提供对应用程序的实时监控。它跟踪各种指标,如请求率、响应时间、失败率和依赖关系。这有助于你识别性能瓶颈、错误和异常。应用洞察可以帮助我们排查部署在Azure Kubernetes 服务(AKS)或Azure 容器实例(ACI)中的 ML 端点。应用洞察收集以下信息:
- 
异常
 - 
响应
 - 
输出数据
 - 
请求率、响应时间和失败率
 - 
依赖率、响应时间和失败率
 
让我们看看如何通过 Azure 机器学习 Studio 或 SDK 启用洞察。
通过 Studio 和 SDK 配置日志
在第一章中,我们将一个模型部署到了 ACI 端点。在模型部署界面,要启用应用洞察,我们只需展开高级下拉菜单并勾选启用应用洞察诊断和数据收集复选框,如图所示:

图 9.23 – 模型部署高级设置
现在,在部署之后,我们将获得关于此端点的洞察。如果你已经在使用 SDK,过程可能更简单。根据服务不同,你只需将enable_app_insights标志设置为true或false来分别启用或禁用日志记录。
首先,我们需要获取 Web 服务的引用,然后更新标志,如下面的代码片段所示:
From azureml.core.webservice import Webservice
# reference the web service
my_web_service= Webservice(workspace, "service-name")
# update the enable_app_insights flag
my_web_service update(enable_app_insights=True)
然后,我们可以在应用洞察资源视图中查看结果:

图 9.24 – 应用洞察
在这里,除了可用的日志和指标外,我们还可以与 DevOps 集成,创建实时指标流,并跟踪用户和会话,以及依赖的应用和服务。通过点击日志,我们可以运行日志分析查询。
这里是一个简单的 KQL 查询的示例:
requests
| where timestamp > ago(24h) // Filter for requests in the last 24 hours
| where resultCode !startswith "2" // Filter for non-2xx status codes
| project timestamp, name, url, resultCode, operation_Id, duration, client_Type
| order by timestamp desc
让我们分析一下查询:
- 
requests:这是包含所有发送到你的应用程序的 HTTP 请求信息的表。 - 
where timestamp > ago(24h):这一行筛选出过去 24 小时内发生的请求。你可以根据需要调整时间范围。 - 
where resultCode !startswith "2":这一行用于筛选那些resultCode不以2开头的请求。这实际上筛选出了非2xx状态码的请求,通常表示错误。 - 
project:这用于选择要在结果中显示的特定列。你可以根据需要调整它以包含更多或更少的列。 - 
order by timestamp desc:这一行按时间戳降序排序结果,以便首先看到最新的错误。 
此查询将为您提供有关导致错误的最近请求的信息,包括时间戳、请求名称、URL、状态码、操作 ID、持续时间以及客户端类型等详细信息。根据我们需要监控的内容,我们可能需要更改查询以适应适当的表。除此之外,我们还可以将自定义异常添加到日志中。
Application Insights API 用于自定义事件和指标
要将数据摄取或发送到应用程序洞察资源,请确保您熟悉此处提供的可用 API 和 SDK:learn.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics。Application Insights 还提供了一个仪表板来监控一切。

图 9.25 – Application Insights 仪表板
我们可以从 Application Insights 资源的概览选项卡访问此仪表板。我们所需做的只是点击应用程序仪表板以打开仪表板视图(如图 9.24 所示)。
创建 Azure 仪表板
要了解更多关于 Application Insights 仪表板的信息,请阅读此文档:learn.microsoft.com/en-us/azure/azure-monitor/app/overview-dashboard。
要了解如何一般地使用 Azure 仪表板,请参阅此处:learn.microsoft.com/en-us/azure/azure-portal/azure-portal-dashboards。
仪表板也可以通过使用模板编程创建。更多详细信息请在此链接中查找:learn.microsoft.com/en-us/azure/azure-portal/azure-portal-dashboards-create-programmatically。
Application Insights 旨在帮助开发者监控其应用程序的性能和用法,识别和诊断问题,并深入了解用户如何与我们的应用程序互动。它在 Azure 机器学习中非常有用,因为它可以监控您的端点,并且通过使用连接字符串,我们还可以从我们的应用程序中收集日志。
日志和指标可能难以阅读,但在大数据集中,可视化它们则更为容易。让我们看看一些我们可以用来可视化从 Azure Monitor 收集的指标和日志的方法。
数据可视化
要可视化 Azure Monitor 中的数据,我们有各种工具和技术。让我们在这里看看其中的一些。
- 
仪表板:Azure 仪表板允许我们在单个视图中组合多个可视化(如图表、表格和其他小部件)。我们可以将 Azure Monitor 日志中的可视化固定到仪表板上,以便于访问和监控。仪表板还可以设置为 Azure 门户的起始页面,这样我们就可以立即看到它们。
 - 
工作簿:Azure 工作簿提供了一种灵活且可定制的可视化 Azure 监控日志数据的方法。它包括一系列预构建的工作簿模板,适用于常见的场景,如虚拟机,可以根据我们的具体需求进行定制。工作簿可以与团队成员共享,并安排定期更新。
 - 
日志分析语言:您可以使用 Azure 日志分析查询语言编写查询,以从您的日志中检索特定数据。一旦您有了数据,您可以使用可视化功能将其以图形格式显示。
 - 
PowerBI:Power BI 可以连接到 Azure 监控日志,并帮助您创建更复杂和交互式的可视化。
 
Azure Monitor 是维护您的 Azure 基础设施和应用程序健康和性能的关键工具。它对于在云中运行关键任务应用程序的企业尤其有价值,因为它有助于快速识别和解决问题,优化资源利用,并确保流畅的用户体验。
现在,让我们看看一些其他工具,这些工具可以帮助我们监控资源,并提供安全建议。
使用微软防御来保护资源
微软云防御是一个专为云环境设计的云原生应用程序保护平台(CNAPP)。它提供了一套全面的安保措施和最佳实践,旨在保护基于云的应用程序免受各种网络攻击和漏洞的侵害。微软云防御结合了多个功能,包括一个专注于基础设施、存储等方面的云工作负载保护平台(CWPP),一个用于预防安全问题的云安全态势管理(CSPM)解决方案,以及一个DevSecOps解决方案,如果需要,它可以帮助在不同云环境中保护代码。防御器包括一个无需额外费用的基本 CSPM。您可以在其基础上启用高级功能,包括攻击路径分析、云安全探索器、高级威胁搜索、安全治理以及评估您在特定行业和地区适用的监管标准下的安全合规性的工具。
微软云防御定价
您可以在此处查看防御器的定价和功能:azure.microsoft.com/en-us/pricing/details/defender-for-cloud/?v=17.23h。
让我们了解这项服务,看看我们如何利用它来增强我们的 Azure 机器学习资源。
以下是在顶部搜索框中“云防御”的主要选项卡:

图 9.26 – 微软云防御
初看之下,我们可以看到我们工作负载的安全态势安全分数,这是基于我们资源中实施的安全推荐;我们的合规性分数,基于应用的政策;我们的工作负载保护百分比;以及监控资产的清单。屏幕上还有其他关于 Defender 的文章和公告。
让我们看看如何利用提供的信息来保护我们的 Azure 机器学习资源。
提升我们的安全态势
第一件事是点击安全态势以查看提高我们安全分数的推荐。安全分数是一个指标,它评估并分配一个分数来衡量您的 Azure 资源和工作负载的安全状态。分数越低,您的资源就越少遵循安全推荐。为了提高我们的分数,我们需要为我们的每个资源实施推荐。
注意在下面的屏幕截图中,安全态势评估针对的是 Azure、亚马逊网络服务(AWS)和谷歌云平台(GCP)。您可以将您的分析连接起来,创建一个统一的安全面板。

图 9.27 – 安全态势
要开始查看推荐,请点击查看推荐链接下的您的订阅。
然后,我们可以看到我们所有资源的推荐:

图 9.28 – 推荐项
要专注于 Azure 机器学习推荐,请适当筛选此列表。由于我的 ML 资源位于同一资源组中,我将通过资源组进行筛选,包含我的 Azure 机器学习工作区和相关服务:

图 9.29 – 向资源组添加过滤器
对于每项推荐,我们可以看到实施方式将如何提高我们的分数。每个类别下的所有推荐都必须实施,才能获得上述分数提升。例如,应用系统更新推荐在下面的屏幕截图中只有一个操作,但实施将提高我们的分数5%。要实施推荐,您可以点击链接查看更多信息:

图 9.30 – 安全态势推荐
在这里,我们可以看到问题严重性、描述、修复步骤以及受影响的资源。然后我们可以手动进行并按照指示更新资源:

图 9.31 – 推荐修复
我们甚至可以通过点击之前屏幕截图中的强制执行按钮来在未来强制执行此操作,这将把这个推荐作为一项策略分配。
类似地,我们可以在 Azure Machine Learning 实例和订阅中的任何其他资源中实施安全建议。这些建议是 Azure 安全基线的一部分,我们将在第十章中更详细地分析,我们将使用安全最佳实践为我们的 Azure Machine Learning 环境创建安全基线。
现在,让我们探索 Microsoft Sentinel,以帮助我们确保和自动化对安全事件的响应。
使用 Sentinel 探索威胁管理
Microsoft Sentinel 是一个云原生 安全信息和事件管理(SIEM)和安全编排、自动化和响应(SOAR)解决方案。它为 Azure 和其他云提供集中的智能安全分析和威胁情报。使用 Sentinel,我们可以在一个面板中实现智能警报检测、威胁可见性、狩猎和响应。使用 Sentinel 进行上述任务有以下几个好处:
- 
作为云解决方案,它随着我们的数据扩展,我们只为使用的内容付费。
 - 
Microsoft Sentinel 使用来自广泛来源的连接器收集数据,包括 Azure 服务、本地环境和其他云。
 - 
该服务内置了帮助识别可疑活动和减少误报的 ML 模型。随着时间的推移,这些模型可以根据您组织的独特模式进行训练,以提高其准确性。
 - 
使用 KQL 进行威胁狩猎,以识别威胁、异常和模式,并提供模板以帮助您开始。
 - 
除了检测之外,Microsoft Sentinel 还允许您自动化常见任务和响应。这可以帮助组织更快地响应威胁。
 - 
我们可以使用工作簿来可视化数据,并帮助团队深入挖掘数据,发现模式,更好地理解安全态势。
 - 
Microsoft Sentinel 提供从识别到调查再到修复处理事件的工具。
 - 
默认数据保留期为 30 天,但可以增加到 90 天。
 
要与 Sentinel 一起工作,我们需要一个 Log Analytics 工作区来收集日志。请参考本章前面的部分以创建一个新的 Log Analytics 工作区。创建工作区后,您可以将 Microsoft Sentinel 添加到工作区。在 Azure 门户的搜索栏中查找 Microsoft Sentinel,在加载的页面上点击 创建。

图 9.32 – Microsoft Sentinel
在下一步中,将 Microsoft Sentinel 添加到工作区,选择之前创建的工作区,如图 9.33 所示的下一张截图。

图 9.33 – 将 Sentinel 添加到工作区
一旦添加了工作区,您就可以利用 Sentinel 的威胁管理功能。这是 Sentinel 的主页面。您需要用于威胁管理的所有内容都可以在左侧菜单中找到。
让我们探索 Microsoft Sentinel 最有用的功能:
- 事件:在 Microsoft Sentinel 中,事件是相关警报的集合,代表系统内可能有害的活动或模式。它们提供了一个综合的视图,以帮助安全分析师估计潜在攻击的范围和顺序。Microsoft Sentinel 中的事件配备了涉及实体、相关警报的时间线和其他相关细节等信息。事件允许安全团队关注更广泛的事件,而不是单个警报,有助于根据相关警报的综合严重程度优先响应。
 

图 9.34 – 事件
- 
搜索:在 Microsoft Sentinel 中,搜索是指主动查询和对数据的探索,以识别可能没有触发自动警报的恶意或可疑活动的迹象。我们可以运行预定义或自定义的 KQL 查询来过滤收集的数据,寻找异常或感兴趣的模式。目标是发现隐藏的威胁,识别以前未注意到的模式,并加强检测能力。
要访问搜索查询,请点击搜索。创建搜索的过程很简单。从主页点击新建搜索。
 

图 9.35 – 搜索查询
提供一个名称和必要时的更多信息,然后点击创建。

图 9.36 – 新建搜索
一个搜索由一个或多个查询组成。要添加您的查询,点击您刚刚创建的搜索名称,在查询操作下,您可以选择新建查询或将查询添加到搜索以从现有查询中选择。查询是用 KQL 编写的。

图 9.37 – 添加查询
我选择了后者,并从列表中选择了这两个查询,如下一张截图所示。

图 9.38 – 添加现有查询
现在,您可以通过运行这些查询来验证您的假设并发现疑似威胁。发现后,我们可以在搜索页面上直接创建事件。
- 威胁情报:Microsoft Sentinel 中的威胁情报涉及利用有关现有和新兴威胁和漏洞的信息。Microsoft Sentinel 与 Microsoft Defender 的威胁情报集成,提供有关已知恶意 IP 地址、URL、文件哈希等信息。当这些数据与您环境中的活动匹配时,Sentinel 可以发出警报。威胁情报的集成允许组织将其实时数据与已知威胁指标进行交叉引用,提高潜在安全漏洞的检测,并了解更广泛的威胁格局。
 
这些只是基础知识。Sentinel 集成了多个微软服务,例如云端的 Defender 和 Microsoft 365,因此具有很多功能。要提升 Sentinel 的技能,请查看以下资源,从学习路径到认证。
开始使用 Microsoft Sentinel
要开始使用 Microsoft Sentinel,请查看以下学习路径:learn.microsoft.com/en-us/azure/sentinel/skill-up-resources。
摘要
在本章中,我们学习了如何利用多个服务,通过启用不同的服务并学习如何开始使用我们收集的日志来预防安全事件,从而有效地监控我们的资源。我们首先使用的是 Azure Monitor,通过监控警报来确保我们能够被通知任何问题。通过结合 Monitor Log Analytics 和 Application Insights 的功能,我们可以对我们的资源和模型端点进行端到端监控。此外,通过使用 Microsoft Defender for Cloud,我们可以获得实施最佳实践的推荐,并且可以使用 Microsoft Sentinel 进行高级威胁管理。现在,我们已经对包含在机器学习项目中的不同表面区域内的最佳实践有了全面的了解,我们可以在下一章中结合它们,看看我们如何为 Azure 资源建立一个安全基线。
第四部分:Azure 机器学习中企业安全最佳实践
在本部分中,您将回顾本书中概述的最佳实践,并探索更多可用于进一步保护云资源的服务。您还将看到一个包含所有这些实践的示例解决方案架构。最后,您将学习如何与威胁建模合作,制定策略以保持相同的保护水平并在未来保持安全。
本部分包含以下章节:
- 第十章**,为您的 Azure 机器学习工作负载设置安全基线
 
第十章:为您的 Azure 机器学习工作负载设置安全基准
在本章中,我们将总结本书中概述的所有最佳实践,从始至终为您的机器学习工作负载创建安全基准,以帮助您制定安全策略。我们将主要关注 Azure 服务,正如本书其他部分所做的那样。当然,总有更多的事情需要考虑,例如代码或应用程序安全,但这些不是本书的重点。
我们将回顾一些其他服务,尽管它们与 Azure 机器学习没有直接关系,但考虑它们对于提高我们 Azure 服务的整体安全性是有用的。当涉及到安全时,我们可以使用威胁建模来确保我们已识别和缓解的任何做法都持续维护和更新,以适应过去和新的安全建议,只要这些服务在运行。最后,我们将回顾云责任模型,以便我们始终记住某些任务是我们负责正确实施的任务。尽管 Azure 提供了许多工具和安全控制,但正确配置它们的责任在我们身上。
在本章中,我们将涵盖以下主要主题:
- 
为 Azure 机器学习设定基准
 - 
Azure 机器学习的威胁建模
 - 
审查云安全共享责任模型
 
到本章结束时,我们将学习如何为我们的 ML 项目创建基准,并基于流行的框架制定威胁建模策略。
为 Azure 机器学习设定基准
在本书的整个过程中,我们已经看到了多个服务,并探索了多种方法来保护 Azure 机器学习工作空间及其在 Azure 中的相关服务。所有这些最佳实践都是建议的最佳实践的一部分。当我们专注于保护我们的工作负载时,建立安全基础来指导我们的努力是至关重要的。安全基准是我们需要为系统实施的最小安全控制集。让我们再次回顾保护在 Azure 机器学习中运行的工作负载所需的最小要求,这是我们已经在本书中概述过的,并学习如何通过使用其他服务进一步扩展此功能。
让我们回顾一下本书中提到的基于零信任模型的 Azure 机器学习最佳实践基准:
- 
保障身份(第六章):
- 
使用 Microsoft Entra ID 最佳实践:
- 
在用户账户中启用多因素认证(MFA)
 - 
在服务上使用多个管理员
 
 - 
 - 
规划基于角色的访问控制(RBAC)并使用最小权限原则
 - 
当可能时,与应用程序身份和管理身份一起工作
 - 
启用条件访问
 - 
为 RBAC 启用特权身份管理
 - 
通过利用 Azure Key Vault 防止密钥和秘密泄露
 
 - 
 - 
保护数据([第三章、第四章和第五章]):
- 
发现、分类和标记敏感数据
 - 
制定公司级数据治理策略
 - 
在静止状态下加密数据
 - 
在传输中加密数据
 - 
当可用时,使用客户管理的密钥进行加密
 - 
在 Azure Key Vault 中确保密钥管理的安全性
 - 
在可能的情况下使用证书
 - 
仅使用来自信誉良好的来源的批准和安全的数据集
 - 
通过使用策略保持合规
 
 - 
 - 
保护基础设施和端点(第七章):
- 
保持更新并禁用计算实例中的公共访问
 - 
在计算集群中禁用公共访问
 - 
在容器注册库和容器中禁用公共/匿名访问
 - 
遵循外部计算(AKS、ACI)的最佳安全实践
 
 - 
 - 
网络安全(第七章):
- 
禁用公共网络访问
 - 
使用服务或私有端点
 
 - 
 
在零信任类别之外,我们还讨论了以下最佳实践:
- 
制定备份和恢复计划(第四章):
- 
确保每个服务的定期备份
 - 
测试恢复过程
 - 
利用资源锁避免意外删除
 - 
在适用的情况下启用软删除和点时间恢复
 
 - 
 - 
提升安全态势和漏洞管理(第九章):
- 
启用 Azure Defender 并实施建议
 - 
启用 Microsoft Sentinel
 
 - 
 - 
记录和监控(第九章):
- 
启用日志记录和警报
 - 
使用日志分析工作区来获取洞察
 
 - 
 
Azure 机器学习安全基线映射文件
为了制定我们的策略,我们将 Microsoft 云安全基准指南应用于与 Azure 机器学习相关的服务,基准指南可在learn.microsoft.com/en-us/security/benchmark/azure/overview找到。
要查看机器学习服务与 Microsoft 云安全基准的完整映射,请参阅以下文档:
制定基线是组织特定的,尽管前面的建议可能看起来像清单,但它们只是建议。您可以根据您的场景和工作方式选择实施哪些建议。您应该如何决定将哪些建议应用于您的机器学习项目?让我们在下一节中回顾如何制定自己的威胁建模策略,以及在与云中的安全工作时应考虑的其他因素。
我们将首先探讨一些服务,尽管它们与 Azure 机器学习没有直接连接,但在考虑云安全时非常重要。然后,我们将继续探讨解决方案架构的示例。
发现增强安全性的服务
在这本书中,我们更多地关注了与 Azure 机器学习直接相关的服务的安全性。然而,我们讨论的所有服务都有自己的最佳实践和关联服务。当我们处理大数据时,有许多事情我们可以进一步考虑,例如网络或应用。以下是一些在进一步探索如何保护我们的 Azure 服务时需要考虑的服务。有些我们可能已经提到,有些没有,所以让我们在这里一起回顾它们:
- 
网络安全组(NSGs):NSGs 是云计算环境中网络安全的一个关键组成部分。NSGs 用于控制并保护部署在虚拟网络(VNet)或子网中的资源之间的网络流量。它们就像一个无状态的防火墙,允许您在网络级别定义和执行控制传入和传出流量的规则。
 - 
VPN 网关:VPN 网关是一种网络设备或服务,它通过不受信任的网络(如互联网)在两个或多个独立的网络或设备之间提供安全且加密的通信。VPN 网关在确保通过公共或不受信任网络传输的数据的隐私、完整性和安全性方面发挥着至关重要的作用。这是一种将我们的本地数据中心连接到云的方法。
 - 
ExpressRoute:ExpressRoute 是一种服务,它为组织在本地的数据中心或网络与 Microsoft Azure 的云服务之间提供专用、私有且高度可靠的网络连接。它旨在实现安全、高吞吐量、低延迟的连接,为使用公共互联网访问 Azure 资源提供更优越的替代方案。
 - 
Azure 防火墙:Azure 防火墙是一种基于云的网络安全服务,它通过过滤和检查传入和传出的网络流量,充当部署在 Azure VNet 中的资源和应用的防护屏障。Azure 防火墙提供网络安全、威胁保护和流量监控等功能。
 - 
Azure 虚拟广域网(VWAN):Azure VWAN 是 Microsoft Azure 提供的一种网络服务,它简化并优化了不同 Azure 区域、本地位置和分支办公室之间的连接。它旨在简化广域网(WAN)基础设施的管理,并提高网络连接的性能和安全性。
 - 
Web 应用程序防火墙(WAF):Azure WAF 是一种基于云的 Web 应用程序防火墙服务。它为托管在 Azure 平台上的 Web 应用程序和网站提供高级安全和保护。Azure WAF 旨在防御各种 Web 应用程序威胁和漏洞。您可以在 Front Door 和 Application Gateway 服务上启用它。
 - 
分布式拒绝服务(DDoS)保护:Azure 提供 DDoS 保护服务,以保护您的应用程序和资源免受 DDoS 攻击。DDoS 攻击可能会使您的网络和服务超负荷,导致用户无法访问。Azure DDoS 保护有助于检测和缓解这些攻击,确保您的应用程序的可用性和性能。
 - 
Azure Front Door:Azure Front Door 是一种全球性、可扩展且高度可用的内容交付和应用加速服务。它通过优化和通过微软管理的全球边缘节点(PoPs)路由流量,旨在通过优化和路由流量通过全球网络来提高 Web 应用程序和内容可用性、安全性和性能。它可以与 WAF 和 NSGs 一起使用,以提供更好的安全性。
 - 
Azure 应用程序网关:Azure 应用程序网关是一种第 7 层(应用层)负载均衡器和 Web 流量管理服务。它通过分配传入流量、执行 SSL 终止并提供高级应用层路由和安全功能,旨在提高 Web 应用程序的可用性、可伸缩性和安全性。
 - 
Microsoft Defender for Cloud:启用 Defender for Cloud 的高级功能。这些是云安全态势管理(CSPM)和云工作负载保护(CWP),它们将有助于提高 Azure 威胁和漏洞管理。
 - 
Azure 站点恢复:Azure 站点恢复旨在通过提供全面的灾难恢复解决方案来确保业务连续性。它帮助组织从一处复制和恢复虚拟化工作负载和数据到另一处,无论是从本地到 Azure、Azure 到 Azure,还是从本地数据中心之间。
 
Azure 端到端安全
本文概述了所有安全服务和每个可用工具的安全功能:
learn.microsoft.com/en-us/azure/security/fundamentals/end-to-end
探索一个示例解决方案架构
如果我们将之前提到的某些服务与书中概述的最佳实践结合起来,以创建一个安全的 Azure 机器学习解决方案架构,下面的图示将展示它可能的样子:

图 10.1 – Azure 解决方案架构
在本例中,我们通过使用私有链接在 VNet 中保护并隔离了与 Azure 机器学习相关的所有资源。此时已禁用公共访问。此 VNet 与另一个 VNet 配对,该 VNet 有多个可以在多个对等 VNet 之间共享的服务。这种网络架构称为 中心辐射拓扑,其中中心是一个在 Azure 中的中心虚拟网络,它托管多个辐射端共享的服务,例如 Azure 防火墙和 VPN 网关。辐射端是与中心对等的虚拟网络。每个辐射端都可以用来隔离工作负载、环境、应用程序或部门。辐射端允许每个工作负载或应用程序拥有专用资源,从而提高安全性和组织性。在此架构中,辐射端用于隔离 Azure 机器学习资源。这也可以用来隔离不同的环境,如开发和生产环境。我们甚至可以更进一步,通过不同的订阅托管这些 VNet。然后我们可以通过 Express Route 或 VPN 网关使用私有连接与本地系统连接。在此示例场景中,Azure 防火墙可用于保护云和本地资源,并允许来自特定 IP 或外部网络的访问。
在这些服务之上,我们可以利用以下 Microsoft Entra ID 管理功能:云 Defender 和 Sentinel 用于安全和事件管理、GitHub 或 Azure DevOps 用于 MLOps,以及其他如策略和管理组用于治理等服务。每个订阅还包含成本管理、Azure Monitor 服务等。
当然,这只是其中一个例子。根据不同的组织和需求,我们可能会利用更多或更少的服务。要浏览有关机器学习、人工智能等不同解决方案架构,您可以通过下一个呼出窗口中显示的 Azure 架构中心进行浏览。
浏览 Azure 架构
如果您想获得如何组织 Azure 资源的想法,您可以在 Azure 架构中心找到与这里展示的类似的多达多个解决方案架构:
learn.microsoft.com/en-us/azure/architecture/
然而,这还不够。根据所使用的编程语言,我们需要利用安全的编码实践来确保代码不会被破坏,并提供对底层安全基础设施的访问,特别是对于面向公众的服务。
Azure 机器学习的安全编码最佳实践
在本文档中,您将找到一些与 Azure 机器学习和笔记本一起工作时的一些编码安全最佳实践:
既然我们已经很好地掌握了可用的服务和可能的架构,让我们通过制定自己的威胁建模策略来回顾如何决定和优先考虑我们需要哪些服务。
Azure 机器学习的威胁建模
威胁建模是一种结构化的方法,用于检测和评估系统潜在威胁的严重程度,并评估潜在缓解措施可能对减少或消除这些威胁的影响。它在信息安全与网络安全领域被广泛使用,我们也可以将此过程应用于 Azure 机器学习,以主动保护我们的系统。在处理威胁建模时,我们试图确定以下问题的答案:
- 
我们在做什么?
 - 
系统可能出什么问题?
 - 
我们将如何处理这个问题?
 - 
这够了吗?我们是否遗漏了其他东西?
 
该过程通常遵循以下一般步骤,并且是一个迭代过程:

图 10.2 – 威胁建模过程
让我们逐一审查:
- 定义目标和审查架构:在这里,我们需要通过理解我们的数据和系统组件的价值来明确我们试图保护的内容。这通过关注重要内容为威胁建模练习设定了舞台。一旦我们有了组件,我们就应该理解系统的架构。这可能包括数据流图来显示数据如何在系统中移动以及信任边界来指示数据何时改变信任级别,例如跨越网络或在进程之间移动。以下是一个简单的 Azure 机器学习架构:
 

图 10.3 – Azure 机器学习架构
- 
分解架构:将系统分解为其核心组件和功能。这可能包括理解所使用的技术、系统的入口点以及你试图保护的资产。对于 Azure 机器学习,这包括工作区、计算、数据存储、管道、模型以及所有相关服务。
 - 
识别威胁和漏洞:利用我们之前在第二章中讨论的 MITRE ATLAS 等框架,为我们的机器学习工作流程的每个组件识别特定的威胁或漏洞。根据潜在影响和发生的可能性优先考虑威胁。这将有助于将精力集中在最关键的安全问题上。
 - 
定义缓解策略:对于每个威胁,我们需要确定减轻风险的最合适方式。这可能包括对架构的更改、采用新的安全控制措施、应用补丁或改变操作实践。
 - 
验证和审查:在实施缓解策略之后,应对其进行测试以确保其有效性。这可能包括代码审查、测试和合规性检查。详细记录威胁模型和缓解策略。Azure Policy 和 Azure Blueprints 可以帮助执行和跟踪对您的安全要求的合规性。
 
威胁建模不是一个一次性过程,而应该是在整个系统生命周期中持续进行的活动。随着新功能的添加或对系统的更改,威胁模型应更新以反映系统的最新状态。因此,我们需要持续审查和更新我们 Azure 机器学习工作负载的威胁模型。新功能、数据或与其他 Azure 服务的集成可能会引入新的威胁或漏洞。通过应用这些原则,您可以为您 Azure 机器学习工作负载创建一个健壮的威胁模型,有助于确保我们的机器学习解决方案安全可靠。
可用的各种工具和资源可以帮助进行威胁建模,从微软的威胁建模工具到 OWASP 的资源,例如应用程序威胁建模框架。同样重要的是,要跟上最新的威胁情报和行业最佳实践,通过使用 MITRE 框架(例如,我们在 第二章 中突出显示的)来确保威胁模型的相关性和有效性。无论我们基于何处制定策略,我们都必须确保它能够使我们定期验证和审查结果。
应用程序威胁建模框架
在此处了解更多关于 OWASP 的应用程序威胁建模框架的信息:
owasp.org/www-community/Threat_Modeling
我们已经看到了 MITRE ATLAS 框架,这是一个很好的知识库,可以从中开始并基于它制定策略,我们提到的 OWASP 框架则更侧重于应用程序。当然,我们不必一次性使用所有这些框架和方法。我们可以选择最适合我们需求并可以长期使用的框架。让我们简要地探索 STRIDE 方法论,因为我们在本章后面将要使用的 Microsoft 威胁建模工具就是基于它的。
探索 STRIDE 方法论
STRIDE 方法论是一个用于分析和对计算机系统、软件和应用程序中的安全威胁和风险进行分类的安全框架。STRIDE 主要是在威胁建模的程序中创建的。STRIDE 是一个代表六个安全威胁类别的缩写,即:欺骗、篡改、否认、信息泄露、拒绝服务 (DoS) 和 提升权限。
让我们审查每个类别:
- 
欺骗:欺骗威胁涉及冒充某人或某物以获得未授权访问或欺骗用户。这可能包括身份欺骗,攻击者假装是合法用户或系统,或者网站欺骗,创建虚假网站以欺骗用户。
 - 
篡改:篡改威胁指的是对数据或代码进行未授权修改。这可能包括数据篡改,攻击者更改数据以破坏操作或窃取信息,或者代码篡改,攻击者修改代码以引入漏洞或恶意功能。
 - 
否认:否认威胁涉及否认行为或事件。例如,用户可能声称他们没有执行特定操作,或者系统可能不会以可以用来证明发生了什么的方式记录操作。非否认机制用于防止和检测这些威胁。
 - 
信息泄露:信息泄露威胁涉及未授权暴露敏感数据。这可能包括数据泄露,敏感信息被暴露给未授权用户,或者数据盗窃,攻击者为了恶意目的窃取敏感数据。
 - 
拒绝服务:拒绝服务攻击旨在破坏系统或服务的可用性。攻击者可能通过流量过载系统、使其崩溃或使用其他手段使其对合法用户不可用。DDoS 攻击是一个常见例子。
 - 
权限提升:权限提升威胁涉及攻击者获得比他们应有的更高水平的访问权限或特权。这可能导致对系统或数据的未授权访问、控制或操纵。
 
使用 STRIDE 方法论来应对安全威胁,我们通常执行上一节中概述的步骤,以确定处于风险中的系统资产,找到相应的威胁及其缓解措施,然后在实施后验证和审查流程。
这种方法通常与 Microsoft 的威胁建模工具一起使用,旨在帮助在软件开发早期阶段识别和解决安全漏洞。我们也可以独立使用它。
让我们回顾一下如何使用 Microsoft 威胁建模工具。
开始使用 Microsoft 威胁建模工具
Microsoft 威胁建模工具帮助我们识别威胁并规划缓解措施。此工具使用 STRIDE 方法论,并为我们提供基本报告。
要开始使用此工具,您可以在此处下载:
下载并安装工具后,这是打开的主屏幕:

图 10.4 – Microsoft 威胁建模工具
在此屏幕截图中,我们可以看到几个选项,从使用模板到从头开始。我们将首先点击创建模型按钮。
工具提供了一个名为设计视图的图形界面,用于创建威胁模型。用户可以绘制应用程序或系统的组件和数据流,以可视化潜在的攻击向量和安全边界。
在我们的示例中,我们将简单地从右侧的模板工具栏拖放到Azure AD组件(目前更名为 Microsoft Entra ID)上,因为这是我们的用户被管理和代表我们的工作区的Azure ML组件所在的位置。通过在画布上右键单击,我们可以在组件之间创建连接。对于这个示例,你可以点击如图所示的双向连接:

图 10.5 – 建立连接
通过单击每个组件,我们也可以更改或定义属性。例如,在 Azure Storage 组件中,你可以指定它是 blob 还是文件等。对于我们这里的组件,这并不是必要的。最终结果如图所示:

图 10.6 – 创建图表
一旦我们完成,我们就可以点击顶栏上的分析视图按钮来获取分析。我们可以通过使用如图所示的两个并排按钮在分析视图和设计视图之间切换:

图 10.7 – 打开分析视图
在分析视图中,我们可以看到威胁列表,通过单击每个威胁,我们可以看到威胁属性:

图 10.8 – 获取分析结果
威胁属性字段是可编辑的,我们可以将状态更改为未开始、需要调查、不适用或缓解,将严重性更改为低、中或高,以及将SDL 阶段更改为设计或实施,同时附上描述。示例如下:

图 10.9 – 编辑属性
在这个过程的任何时刻,我们都可以保存文档,分享它,或生成总结已识别威胁、相关风险和推荐缓解策略的报告。这些报告可以与利益相关者和开发团队分享,以便优先处理和解决安全问题。
要提取报告,点击报告然后点击创建完整报告…,如图所示:

图 10.10 – 生成报告
选择要包含在报告中的附加属性,然后点击生成报告;这就是我们得到的结果:

图 10.11 – 选择报告项
报告被保存到一个包含图表和工具内所有记录信息的 HTML 文件中。上一个示例中的报告如下截图所示:

图 10.12 – 将报告保存为 HTML
Microsoft 威胁建模工具文档
在这里找到这个工具的完整文档:
learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool
总体而言,Microsoft 威胁建模工具是组织和个人软件开发团队寻求增强其应用程序和系统安全性的宝贵资源。通过使用这个工具,我们可以系统地识别和解决安全威胁和漏洞,从而产生更稳健和安全的软件产品。重要的是要记住,虽然这个工具提供了宝贵的帮助,但它并不能取代在整个开发过程中对安全专业知识与实践的需求,它也不是我们唯一可以使用的工具。
对 AI/ML 系统和依赖进行威胁建模
这里有一个针对 AI/ML 系统的威胁建模的文档示例:
learn.microsoft.com/en-us/security/engineering/threat-modeling-aiml
然而,尽管这个工具为我们提供了建议,如果我们有特定的怀疑,而这个怀疑不是概念性的,也不是基线的一部分,我们可以在 Sentinel 中创建一个假设,并使用威胁狩猎来深入数据并确认,在我们提出任何缓解措施之前。如何在 Sentinel 中与威胁狩猎一起工作的快速演示见第九章。
让我们通过回顾我们在保护我们的服务时的责任来结束这本书。
审查云安全共享责任模型
当涉及到迁移到云端时,我们的一些责任转移到了云服务提供商,例如购买和维护硬件的责任。这个概念对于理解在云端保护数据、应用程序和基础设施时谁负责什么至关重要。具体责任划分可能因所使用的云服务模型类型而异,包括基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)以及特定的云服务提供商。
根据微软的分类,每个服务类别的责任模型如下:

表 10.1 – 共享责任模型
安全责任划分同样适用。理解与 Azure 共享责任模型至关重要,并采取必要的步骤来履行我们的责任部分。未能这样做可能导致安全漏洞和合规性问题。
让我们回顾一下云安全共享责任模型的一般分解。
探索云提供商的责任
我们将从云服务提供商的责任开始:
- 
物理安全:云提供商负责保护物理基础设施,包括数据中心、服务器、网络设备和物理访问控制。
 - 
网络基础设施:云提供商管理和保护底层网络基础设施,包括防火墙、负载均衡器和虚拟化层。
 - 
虚拟机管理程序安全:在 IaaS 环境中,云提供商负责保护管理虚拟机的虚拟机管理程序层。
 - 
数据中心安全:数据中心的物理安全,包括监控、访问控制和环境控制,属于云提供商的责任。
 - 
核心云服务:核心云服务本身,如计算、存储和网络,由云提供商维护和保护。
 
值得注意的是,这种责任划分在不同提供商之间可能有所不同,随着服务的变化或添加的变化,这些责任可能会随时间而变化。因此,我们必须跟上最新的安全更新和实践,以填补任何差距并防止未来问题。
让我们回顾一下我们的责任。
审查客户的责任
其他所有责任都属于客户,这意味着是我们!更具体地说,让我们回顾一下在确保我们的工作负载安全时需要考虑的类别:
- 
数据:客户负责保护他们的数据,并确保适当的加密、访问控制和数据管理实践。如果数据适用于特定行业或当地法律,客户负责跟踪所有这些法规,并在必要时采取适当的行动。
 - 
操作系统:对于 IaaS 环境,客户负责保护并修补他们部署的虚拟机的操作系统。这包括完整的机器管理,包括许可。
 - 
应用程序:客户负责保护并维护他们在云平台上构建和部署的应用程序的安全性,在代码级别。尽管我们可能为托管应用程序的服务启用所有安全控制,但代码中的任何安全漏洞仍可能导致对其他服务的意外访问。
 - 
身份和访问管理(IAM):客户负责管理用户访问、权限和身份验证机制,通常通过云提供商提供的身份和访问管理工具。
 - 
配置管理:配置和维护云资源的安全设置和配置,例如防火墙规则和安全组,是客户的责任。
 - 
合规性和数据治理:确保符合行业法规和数据治理政策是客户的责任。
 - 
安全监控和事件响应:客户负责监控其云环境中的安全事件,并对任何安全漏洞做出响应。
 - 
备份和灾难恢复:虽然云服务提供商通常提供一定程度的冗余和可用性,但客户需要负责其特定的备份和灾难恢复计划。
 
重要的是要记住,Azure 和任何云服务提供商都为我们提供了保护资源的所有必要工具,但我们必须在自己的安全和监控方面发挥作用。这就是为什么我们必须始终牢记共享责任模型。每个系统都与其最薄弱的用户一样强大,因此让我们确保我们已经尽最大努力尽快预防或至少检测和减轻任何问题。
摘要
保护我们的资源是一个迭代的过程。尽管我们可能已经完成了所有必要的步骤来保护我们的资源,但我们的项目中的每个更新或新增都可能影响系统的整体安全性。第一步是为我们使用的资源维护一个安全基线,第二步是制定策略,使用威胁建模框架保持最新,以便主动减轻可能的风险。我们看到了 STRIDE 方法和微软威胁建模工具,但还有更多框架可用。例如,我们可以基于 MITRE 框架制定策略,并根据我们组织的步骤进行调整。
记住,云中的安全是共享责任。虽然 Azure 提供了保护云环境的工具和基础设施,但确保我们的配置和数据安全则取决于我们。
网络安全具有多面性,对手每天都在变得更加有创意。随着我们的云生态系统不断发展,攻击也在随之演变,我们需要保持警惕以确保安全。我希望这本书以及这里概述的工具和服务能够为您提供知识,以保护您现有的 Azure 机器学习服务,并为您提供洞察力,以便在未来制定策略,领先一步应对任何可能的机器学习和非机器学习攻击。

                    
                
                
            
        
浙公网安备 33010602011771号