微软 Azure 解决方案构建备考指南 70-53(二)
原文:
annas-archive.org/md5/1015eaeaa85ca3a27c36ddb9ff0514d9
译者:飞龙
协议:CC BY-NC-SA 4.0
第八章:可扩展的数据实现
在上一章中,我们介绍了存储解决方案目标。我们涵盖了 Azure 提供的不同存储特性,以及何时和如何使用它们。我们还讲解了如何为 NoSQL 存储进行设计,并讨论了何时使用可用的解决方案。
这是领域设计数据实现目标的第二章,内容涵盖了针对 Azure 数据服务的设计,包括对 Azure 提供的服务和解决方案的高层次概述。还涉及 Azure 中的关系型数据库,包括 Azure SQL 数据库,以及如何为性能、可用性进行设计,并介绍了两种开源关系型数据库,如 Azure 上的 MySQL 和 PostgreSQL。
到本章结束时,你应该了解在何时使用哪种数据服务或关系型数据库来解决你的问题。
以下主题将被涵盖:
-
Azure 数据目录
-
Azure 数据工厂
-
Azure SQL 数据仓库
-
Azure 数据湖
-
Azure 分析服务
-
Azure SQL 数据库
-
Azure 数据库 for MySQL
-
Azure 数据库 for PostgreSQL
技术要求
本章的源代码可以从 github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%208
下载。
Azure 数据目录
Azure 数据目录提供了一个中央存储库,你可以在其中找到组织内部使用的所有数据源。大多数组织内的员工不知道企业数据的位置或谁负责这些数据。通过 Azure 数据目录,任何用户(例如开发人员或分析师)都可以从一个中央位置发现并使用数据源。
Azure 数据目录为每个 Azure AD 租户提供一个数据目录,即使你有多个与该租户关联的订阅。数据源的元数据副本以及数据源的位置会被添加到目录中。数据本身仍然保留在原始位置。Azure 数据目录还提供搜索功能,便于轻松发现数据。
你可以使用 Microsoft 提供的工具将数据源导入到 Azure 数据目录中。Azure 数据目录支持多种可以使用导入工具发布的数据源,例如 Azure Blob 存储、Azure 数据湖、SQL Server,以及第三方数据源如 Oracle、MySQL 等。当数据源添加到目录时,可以丰富其元数据,为用户提供额外的信息。
Azure 数据目录有两个版本——免费和标准:
-
免费:提供无限用户和 5,000 个注册数据资产;这些数据资产对所有用户可见
-
标准:提供无限用户、100,000 个注册数据资产,并且具备资产级别授权,限制可见性
Azure 数据目录还可以通过调用 Data Catalog REST API 进行编程使用。它提供了注册和删除数据的接口,以及处理注释的功能。
若要全面了解 Azure 数据目录支持的数据源,您可以参考这篇文章:docs.microsoft.com/en-us/azure/data-catalog/data-catalog-dsr
。关于 Data Catalog REST API 的更多信息,您可以参考这篇文章:docs.microsoft.com/en-us/rest/api/datacatalog/#search-syntax-reference
。
Azure 数据工厂
Azure 数据工厂是一个用于大数据处理和分析的云服务。它利用来自各种数据源的原始数据,为企业决策者、分析师和数据科学家提供有价值的见解。以下功能用于处理和组成数据驱动的工作流:
-
数据管道:表示一组执行单元工作的活动。
-
活动:一个活动代表管道中的一个步骤。例如,你可以创建一个复制活动,将数据从 Azure Blob 存储帐户复制到 HDInsight 集群。Azure 数据工厂支持三种类型的活动:数据移动活动、数据转换活动和数据控制活动。
-
数据集:这些表示来自数据存储的数据,用于输入和输出。
-
链接服务:Azure 数据工厂使用链接服务连接到数据源。你可以将其与连接字符串进行类比。链接服务有两种类型——一种用于连接到数据存储,另一种用于连接到计算资源。
-
触发器:触发器启动数据管道的执行。数据工厂支持计划触发器和滚动窗口触发器,它们按周期性间隔运行。没有触发器可以从自定义代码启动管道。如果你想从应用程序内部启动它,最佳方法是通过代码更改计划触发器的开始时间为你希望启动操作的时间。
-
管道运行:这是数据管道执行的一个实例。
-
参数:你可以将参数作为参数传递到管道内,它们是键值对。
-
控制流:这表示活动的 orchestration(协调)。你可以按顺序处理活动,创建 for-each 迭代器等。
你可以通过 Azure 门户使用 Azure Data Lake UI(仅限 Edge 或 Chrome 浏览器)、.NET、Python、PowerShell、ARM 或调用 REST API 来创建 Data Factory 服务和数据管道。
在编写本书时,Azure 提供了两个版本的 Azure Data Factory:V1 和 V2。V2 目前处于预览阶段。有关两个版本之间差异的详细概述,您可以参考docs.microsoft.com/en-us/azure/data-factory/compare-versions
。
Azure Data Factory 只能在美国东部、美国东部 2 和西欧地区创建。但是,它们可以访问其他 Azure 区域的数据库存储和计算服务,用于在数据存储之间移动数据或使用计算服务处理数据。
Azure SQL 数据仓库
Azure SQL 数据仓库在云中提供企业级数据仓库。它结合大规模并行处理(MPP)和 Azure 存储,提供高性能和可扩展性。为了从存储在数据仓库中的数据中创建有价值的洞察,Azure 使用 Hadoop/Spark 和机器学习技术。
数据存储在具有列式存储的关系型表中。使用列式存储时,数据是按列写入和读取的,而不是传统行式数据库中的按行存储。因此,当您查询数据时,列式存储会通过立即跳转到适当的列来跳过所有无关数据。这将使查询运行得更快。例如,当您想查找所有客户的平均年龄时,列式存储会直接跳转到年龄列,而不是查看每一行的年龄列。这还提供了更好的数据压缩,从而降低了存储成本。
通过使用 MPP,Azure SQL 数据仓库将存储层与计算层解耦,这使得扩展变得更加容易。MPP 使用多个计算节点来处理数据。客户端应用程序或存储解决方案使用 PolyBase T-SQL 命令将数据添加到控制节点。控制节点运行 MPP 引擎,该引擎使用数据移动服务(DMS)在节点之间移动数据。它还负责优化并行处理的查询。当优化后,MPP 引擎会将查询传递给可用的计算节点,以并行执行。计算节点将负责将数据存储在 Azure 存储中:
[外链图片转存中…(img-mkxAnesv-1751164598832)]
MPP 架构
将存储层与计算层解耦也是一种更具成本效益的方式。您可以独立扩展存储层的计算节点,或者暂停计算能力,这样您只需要为存储付费。
Azure Data Lake
Azure Data Lake 是一个大数据存储和分析服务,能够存储大量的结构化、半结构化或非结构化数据。它基于 Hadoop 的资源管理平台 YARN,能够在 Azure SQL Server 实例或 Azure SQL 数据仓库实例之间动态扩展。
想了解更多关于 Hadoop YARN 的信息,可以参考 Hadoop 官网:hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
。
Hadoop YARN 提供三种解决方案:
-
Azure 数据湖存储
-
Azure 数据湖分析
-
Azure HDInsight
Azure 数据湖存储
Azure 数据湖存储是一个大数据工作负载的存储库,在这里你可以存储原始数据。数据湖是一个容器,你可以在其中存储各种类型的数据,如结构化、半结构化和非结构化数据。数据添加到数据湖时仍然是未处理的,这与数据仓库不同,后者存储的是结构化和已处理的数据。
Azure 数据湖存储是为 Hadoop 构建的,可以从 Azure 的 HDInsight 集群中访问。它使用 Hadoop 文件系统来存储数据。应用程序调用与 WebHDFS 兼容的 REST API 将数据添加到文件系统中。它提供无限的存储空间,数据可以使用如 MapReduce 或 Hive 等 Hadoop 分析框架进行分析。Azure HDInsight 集群还可以通过开箱即用的连接来配置,直接访问存储在 Azure 数据湖存储中的数据。你可以在机器学习模型中使用 Azure 数据湖存储的数据,也可以创建批量查询或将数据存储在数据仓库中:
[外链图片转存中…(img-JA1bvzOc-1751164598834)]
Azure 数据湖存储
Azure 数据湖分析
Azure 数据湖分析是 Azure 数据湖的一个功能,可以用来分析你的数据。你的数据可以来自不同的数据源,分析后的数据也可以写入不同的数据源。它与 Azure 数据湖存储、Azure Blob 存储和 Azure SQL 数据库兼容。
Azure 数据湖分析采用无服务器方式;你无需管理集群,只需为实际的数据分析付费。它可以动态扩展,并且与 Azure AD 集成用于身份验证。
它提供两种定价套餐:
-
按需付费:在这种模式下,你只需按分钟为使用的时间付费,没有额外的承诺。
-
每月承诺:这个定价套餐有几种不同的选择,你可以提前支付一定小时数的费用——例如 100 小时、500 小时或 1000 小时等。
想了解更多关于不同定价套餐的信息,可以参考:azure.microsoft.com/en-us/pricing/details/data-lake-analytics/
。
Azure 数据分析使用 U-SQL 来分析数据。U-SQL 是大数据查询语言,可以与 C#、R、Python 和认知服务结合使用。你可以通过 Azure 门户创建脚本,并创建作业在数据上执行它们。你还可以使用 Visual Studio、Visual Studio Code、PowerShell 和 CLI 提交 U-SQL 脚本。
使用数据湖分析分析你的数据
在本演示中,我们将创建一个 Data Lake Analytics 账户并分析一些数据,然后将其存储在 Azure 数据湖存储中。Data Lake Analytics 必须拥有一个 Azure 数据湖存储账户,因此我们也会创建该账户:
-
打开
portal.azure.com/
以导航到 Azure 门户。 -
点击 新建 并在搜索框中输入 Data Lake Analytics。
-
一个新的面板打开了。在写这本书时,Data Lake Analytics 只能在中部美国(Central US)、东部美国 2(East US 2)和北欧(North Europe)地区创建。添加以下设置:
[外链图片转存中…(img-gvrY6Hv6-1751164598834)]
创建 Azure 数据湖分析账户
- 点击 Data Lake Store 来创建存储您数据的账户:
[外链图片转存中…(img-SsT674pQ-1751164598835)]
创建一个 Azure 数据湖存储
-
点击 OK 两次,创建 Data Lake Store 和 Data Lake Analytics 账户。
-
现在,您可以导航到 Data Lake Analytics 账户。接下来,将示例文件
SearchLogs.tsv
上传到 Azure 数据湖存储。点击左侧菜单中的 数据浏览器:
[外链图片转存中…(img-kbhSKUYh-1751164598835)]
数据浏览器
- 创建一个新文件夹,并命名为
input
。将SearchLogs.tsv
上传到该文件夹:
[外链图片转存中…(img-YHGtvI9V-1751164598835)]
创建一个新的输入文件夹
- 接下来,点击“新建作业”:
[外链图片转存中…(img-4BNG1ZsE-1751164598835)]
Azure 数据湖概述
- 为作业命名,并将以下代码添加到其中。该代码从
SearchLog
文件中提取原始数据,并创建一个带有标题的新文件,然后将其存储在 Azure 数据湖存储中的output
文件夹中:
@searchlog = EXTRACT UserId int, Start DateTime, Region string, Query string, Duration int?, Urls string, ClickedUrls string FROM \"/input/SearchLog.tsv\" USING Extractors.Tsv();OUTPUT @searchlog TO \"/output/SearchLog-first-u-sql.csv\" USING Outputters.Csv();
- 运行作业。将显示以下输出:
[外链图片转存中…(img-ocz3Neso-1751164598835)]
Azure 数据湖输出
- 现在,您可以在数据浏览器中查看结果。会有一个名为
output
的新文件夹,文件存储在该文件夹中。
Azure HDInsight
Azure HDInsight 是一个服务,它在云中以集群的形式部署 Hadoop 组件。Apache Hadoop 是一个非常流行的开源框架,用于处理和分析大数据。Azure 上的 Hadoop 组件使得数据处理变得非常容易,因为 Azure 处理集群的创建。
HDInsight 提供以下集群类型:
-
Apache Hadoop:Hadoop 可以使用 MapReduce 并行处理数据,MapReduce 是一种能够高效处理数据的编程语言。
-
Apache Spark:Spark 也可以通过使用内存计算来并行处理数据,以提高性能。您可以将其与 SQL、流数据和机器学习解决方案一起使用。
-
Apache HBase:这提供了一个在 Hadoop 上的 NoSQL 数据库,可作为 MapReduce 作业的输入或输出。
-
Microsoft R Server:提供用于托管和管理 R 脚本的服务器。R 主要由数据科学家使用,并提供可扩展的方法来分析数据。
-
Apache Storm:提供非常快速的数据流处理。您可以使用它来分析实时传感器数据,例如。
-
Apache 交互式查询(预览):Hive 查询现在可以通过内存缓存机制更快地运行。
-
Apache Kafka:为数据管道、消息队列和应用程序提供流处理。
Azure HDInsight 使用 Azure Blob 存储和 Azure Data Lake 存储作为存储解决方案。你可以通过使用 HDInsight .NET SDK 等在 Azure HDInsight 上构建应用程序,支持 Java、Python 和 .NET 等语言。
Azure 分析服务
Azure 分析服务采用与 SQL Server 分析相同的架构,并提供企业级的数据建模功能。
你可以通过将 Azure 分析服务与本地 SQL 分析服务器连接,轻松创建混合环境。然后,可以轻松将来自各种来源的数据(如 SQL Server 分析、SQL Server、Azure SQL Server 等)进行整合。在 Azure 分析服务中,与本地环境相比,模型的处理速度要快得多。这样,像 Power BI、Excel、报告服务以及其他第三方应用程序等客户端应用程序,可以更快速地查询数据并交付仪表盘:
[外链图片转存中…(img-FwzlXBch-1751164598836)]
Azure 分析服务
Azure SQL 数据库
Azure SQL 数据库提供云中的关系数据库。它使用本地 SQL Server 的代码基础,但通过使用 Azure SQL 数据库,而不是本地 SQL Server,你无需管理底层平台、操作系统或购买任何许可证。此外,微软首先发布 Azure SQL 数据库的更新,然后才发布 SQL Server 的更新。
Azure SQL 数据库提供了可扩展性,且不会导致数据库停机。它提供了列式索引,使得查询执行速度更快。还为你的数据库提供了内建监控,并具备自动提高数据库性能的智能功能,同时通过自动备份和时间点恢复提供高可用性。你还可以使用主动地理复制,支持全球应用。
Azure SQL 数据库为你的数据库提供以下层级:
-
弹性数据库池:弹性池是一项帮助管理和扩展具有不可预测使用需求的数据库的功能。所有在弹性池中的数据库都部署在同一数据库服务器上,并共享相同的资源。通过管理数据库池而非单个数据库,它们可以共享性能和扩展。此层的性能通过弹性数据库事务单位(eDTU)来表示。
-
独立数据库:如果你有一个性能可预测的数据库,这是一种不错的选择。扩展是为每个数据库单独进行的。此层的性能通过数据库事务单位(DTU)来表示。
若要了解有关数据库事务单元(DTU)和弹性数据库事务单元(eDTU)的更多信息,请参阅docs.microsoft.com/en-us/azure/sql-database/sql-database-what-is-a-dtu
文章。
Azure SQL 数据库提供了多种不同的服务计划和定价层次。由于这些定期变化,您可以访问azure.microsoft.com/en-us/pricing/details/sql-database/
定价页面了解概况。然而,强烈建议您查看适用于 70-535 考试的不同计划。
SQL Server 扩展数据库
SQL 服务扩展数据库(SQL Service Stretch Database)在 SQL Server 2016 中引入,是一项可以将冷数据从本地 SQL Server 移动或归档到 Azure SQL 数据库的功能。这可以提高本地服务器的性能,同时扩展的数据存储在云端,其他应用程序可以轻松访问。
在 SQL Server 中,您可以将表标记为扩展候选项,SQL Server 会透明地将数据移动到 Azure SQL 数据库。包含大量历史数据的大型事务表可以从启用扩展功能中受益。这些通常是包含数百或数百万行的大型表,不需要频繁查询。
高可用性
即使您的数据库托管在 Azure 中,仍然有可能发生故障和停机。在发生停机(例如,完全区域性故障,可能由自然灾害、恐怖袭击、战争、政府行为或外部设备或网络故障等引起)时,您的数据仍然需要能够访问。
若要在 Azure 上创建高可用性的 SQL Server 数据库,您可以使用故障转移组和主动地理复制,这些内容将在接下来的章节中详细介绍。
备份和恢复
Azure 会自动为每个服务层创建地理冗余备份。这些备份随后会复制到只读访问地理冗余存储(RA-GRS)。Azure SQL 数据库每周创建一次完整数据库备份,每小时创建一次差异备份。差异备份会备份自上次完整备份以来发生变化的数据。Azure SQL 数据库还会每 5 到 10 分钟创建一次事务日志备份。
这些备份的保留期限因服务层而异:
-
基础:保留期为 7 天
-
标准:保留期为 35 天
-
高级:保留期为 35 天
这些保留期可以通过创建长期备份保留策略进行延长。使用 LTR 策略时,保留期最多可延长至 10 年。备份会被复制到 Azure 恢复服务库,并且数据在静态时进行加密。Azure 恢复服务库管理所有备份,并会自动删除已过期的备份。LTR 策略可以通过 Azure 门户或 PowerShell 创建。
你可以将备份用于以下恢复场景:
-
时间点恢复:数据库可以在相同逻辑服务器上的保留策略范围内恢复到任何时间点。将创建一个新的完全可访问的数据库。你可以在每个服务层级以及针对单个数据库和部署在弹性池中的数据库使用时间点恢复。时间点恢复可以通过 Azure 门户、PowerShell 或 REST API 恢复。
-
已删除数据库恢复:已删除的数据库可以在删除时恢复到相同的逻辑服务器。你也可以将已删除的数据库恢复到更早的时间点。已删除数据库恢复可以通过 Azure 门户、PowerShell 和 REST API 执行。
-
地理恢复:使用地理恢复,你可以将数据库备份恢复到任何区域的任何服务器。只能对地理冗余备份使用地理恢复。手动创建的备份不受支持。此类型的恢复可以通过 Azure 门户、PowerShell 和 REST API 完成。
-
Azure 恢复服务库恢复:你可以使用此类型的恢复将数据库恢复到可用保留策略中的某个时间点。通过这种方式,你可以恢复数据库的旧版本,例如用于某个应用程序。此类型的恢复也可以通过 Azure 门户、PowerShell 和 REST API 完成。
主动地理复制
地理复制是一项业务连续性功能,允许你在相同或不同的 Azure 区域中复制主数据库,以及最多四个只读的辅助数据库。你可以使用辅助数据库查询数据,或在数据中心发生故障时进行故障切换。主动地理复制必须由用户或应用程序手动设置。
故障切换组
故障切换组是一项自动管理故障切换的功能。它自动管理数据库之间的地理复制关系、大规模故障切换以及连接性。要使用故障切换组,主数据库和辅助数据库需要在同一个 Azure 订阅内创建。
自动故障切换支持将同一故障切换组中创建的所有数据库复制到位于不同区域的单个辅助数据库服务器。这与使用主动地理复制不同,后者最多可以复制四个辅助数据库。
你可以通过 Azure 门户、PowerShell、Transact SQL 和 REST API 设置和管理地理复制。
配置主动地理复制和故障转移组
在此示例中,我们将为单个数据库设置主动地理复制和故障转移组。请注意,这也可以为弹性池执行:
-
通过打开
portal.azure.com/
进入 Azure 门户。 -
首先,创建 SQL 数据库。点击“新建”,然后在搜索框中输入
SQL 数据库
。 -
在下一屏幕中,添加创建刀片中的以下设置并点击 创建,如下图所示:
[外链图片转存中…(img-lIXcIQri-1751164598836)]
创建 SQL 数据库
- 点击创建新服务器,添加以下设置,然后点击选择:
[外链图片转存中…(img-R0V0L8hG-1751164598836)]
创建 SQL 服务器
- 点击定价层;在此刀片中,你可以选择定价层以及要为数据库配置的 DTU 和 eDTU。现在,你可以保持默认设置并点击应用:
[外链图片转存中…(img-wo6McLGr-1751164598836)]
选择定价层
-
点击创建以创建数据库。
-
进入数据库,在左侧菜单中点击地理复制。在此,你可以配置希望将数据库复制到哪些区域。你可以选择所有区域,但建议选择配对区域。你还可以点击顶部横幅,为数据库创建故障转移组:
[外链图片转存中…(img-byDEyw4Z-1751164598836)]
地理复制设置
- 选择区域后,新的刀片将会弹出。在此处,你需要在新的服务器上创建第二个数据库。创建新服务器的步骤与首次服务器的步骤相同。添加以下设置,然后点击确认:
[外链图片转存中…(img-5pGqMsbl-1751164598837)]
创建辅助服务器
- 要自动复制数据库,你需要将其添加到故障转移组中。点击横幅并添加以下设置。选择在上一步中创建的辅助数据库作为辅助服务器,然后点击创建:
[外链图片转存中…(img-sBiWOHQz-1751164598837)]
自动故障转移
Azure MySQL 数据库
Azure MySQL 数据库是云中开源关系型数据库 MySQL 的实现。Azure 提供的服务具有与 MySQL 社区版相同的功能和能力。
MySQL 数据库被 PHP 开发人员广泛使用,许多 PHP 应用程序,如开源 CMS WordPress 等,也使用它。MySQL 提供以下特性和功能:
-
开源:MySQL 是开源的,但由 Oracle 拥有。它也提供商业版本。
-
ACID 合规性:它提供原子性、一致性、隔离性、持久性(ACID)事务。这确保在发生故障时不会丢失数据。MySQL 在使用 InnoDB 和 NDB 集群存储引擎时提供 ACID 合规性。从 5.6 版本开始,InnoDB 已成为 MySQL 的默认存储引擎。
-
复制:MySQL 提供主备复制,包括单个主节点到一个备份节点和多个备份节点、循环复制(A 到 B 到 C,然后返回到 A)和主主复制。
-
性能:MySQL 在高负载时可能表现不佳,尤其是在需要执行复杂查询时。它最适合需要简单、直接数据事务的基于 Web 的项目。
-
安全性:MySQL 提供基于 访问控制列表(ACLs)的安全性,适用于所有连接、查询和其他操作。它支持 MySQL 客户端与服务器之间的 SSL 加密连接。
-
NoSQL 特性:MySQL 仅提供 JSON 数据类型支持,但不支持 JSON 索引。
-
可扩展性:MySQL 不支持可扩展性。
-
并发性:MySQL 仅在 InnoDB 中支持多版本并发控制(MVCC)。
-
编程语言:只能使用 MySQL 编程语言与数据库中的数据进行通信。
通过在 Azure 上运行 MySQL 数据库,除了 MySQL 提供的所有功能和能力外,微软还提供自动扩展、高可用性、静态数据加密、最多 35 天的自动备份和时间点恢复、企业安全性和合规性等。
Azure 上的 MySQL 提供以下定价层:
-
基础:提供最多 1 TB 的存储空间,四个逻辑 CPU 和本地冗余备份。
-
通用性:提供最多 1 TB 的存储空间,四个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。
-
内存优化:提供最多 1 TB 的存储空间,五个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。
有关 MySQL Community Edition 提供的功能和能力的更多信息,您可以参考 www.mysql.com/products/community/
。
Azure PostgreSQL 数据库
Azure PostgreSQL 数据库是云中开源关系数据库 PostgreSQL 的一种实现。它也基于开源 PostgreSQL 数据库引擎的社区版本。PostgreSQL 提供了类似 MySQL 的功能,但也有一些差异。
它提供以下功能和能力:
-
开源:PostgreSQL 完全开源。
-
ACID 合规性:提供 ACID 事务。
-
复制:PostgreSQL 提供主备复制,包括单个主节点到一个备份节点和多个备份节点、热备/流复制、双向复制、逻辑日志流复制和级联复制。
-
性能:支持各种性能优化,最适合需要执行复杂查询、读写速度至关重要的系统。PostgreSQL 在 OLTP/OLAP 系统和商业智能应用中表现良好。
-
安全性:PostgreSQL 提供基于角色的安全性和继承的基于角色的安全性。它为客户端/服务器通信提供本地 SSL 支持,并提供行级安全性。
-
并发性:PostgreSQL 拥有完全的多版本并发控制(MVCC)支持,并且在高流量环境中反应极其迅速。
-
NoSQL 特性:PostgreSQL 支持 JSON 和其他 NoSQL 特性,如原生 XML 支持、JSON 索引和 HSTORE 中的键值对。
-
可扩展性:PostgreSQL 支持可扩展性,例如添加新的函数、类型、新的索引类型等。
-
编程语言:提供 JavaScript、.Net、R、C/C++、Java、Perl、Python、Ruby、Tcl 等编程语言扩展。
除了 PostgreSQL 提供的所有功能外,Azure 数据库中的 PostgreSQL 还提供自动扩展、高可用性、静态数据加密、自动备份和时间点恢复等功能。
Azure 上的 PostgreSQL 提供与 Azure 上的 MySQL 相同的定价层:
-
基础:提供最多 1 TB 的存储,四个逻辑 CPU,以及本地冗余备份。
-
通用用途:提供最多 1 TB 的存储,四个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。
-
内存优化:提供最多 1 TB 的存储,五个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。
有关 PostgreSQL 数据库提供的功能和能力的更多信息,您可以参考 www.postgresql.org/
。
总结
在本章中,我们已经完成了设计数据实现的目标。我们覆盖了 Azure 提供的各种数据实现解决方案,如各种 Azure 数据服务和 Azure 提供的各种关系型数据库。你现在应该知道在不同的场景中应该使用哪种数据库,如何管理备份和恢复,以及如何设计高可用性和性能。
接下来,我们将开始设计安全性和身份验证解决方案,首先是保护 Azure 资源。
问题
回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案:
-
你可以恢复 Azure 中已删除的数据库吗?
-
是的
-
不是
-
-
你可以使用 SQL Server Stretch Database 将本地数据存储扩展到 Azure 吗?
-
是的
-
不是
-
-
你可以使用 T-SQL 来分析 Azure Data Analytics 中的数据吗?
-
是的
-
不是
-
进一步阅读
你可以查看以下链接,了解本章涵盖的主题的更多信息:
-
Azure 数据目录文档:
docs.microsoft.com/en-us/azure/data-catalog/
。 -
开始使用 Azure 数据目录:
docs.microsoft.com/en-us/azure/data-catalog/data-catalog-get-started
。 -
什么是 Azure SQL 数据仓库?:
docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-overview-what-is
. -
Azure 数据湖存储概述:
docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-overview
. -
Microsoft Azure 数据湖分析概述:
docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-overview
-
Azure HDInsight 介绍及 Hadoop 和 Spark 技术栈:
docs.microsoft.com/en-us/azure/hdinsight/hadoop/apache-hadoop-introduction
. -
Azure SQL 数据库文档:
docs.microsoft.com/en-us/azure/sql-database/
-
使用 Azure SQL 数据库进行扩展:
docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-introduction
-
Stretch 数据库:
docs.microsoft.com/en-us/sql/sql-server/stretch-database/stretch-database
-
使用 Azure SQL 数据库设计高可用服务:
docs.microsoft.com/en-us/azure/sql-database/sql-database-designing-cloud-solutions-for-disaster-recovery
-
了解自动 SQL 数据库备份:
docs.microsoft.com/en-us/azure/sql-database/sql-database-automated-backups
-
使用自动化数据库备份恢复 Azure SQL 数据库:
docs.microsoft.com/en-us/azure/sql-database/sql-database-recovery-using-backups
-
什么是 Azure MySQL 数据库?:
docs.microsoft.com/en-us/azure/mysql/overview
. -
什么是 Azure PostgreSQL 数据库?:
docs.microsoft.com/en-us/azure/postgresql/overview
第九章:保护您的资源
在上一章中,我们介绍了设计 Azure 数据服务目标的内容。我们涵盖了一些不同的 Azure 数据服务以及 Azure 中的关系数据库。我们还介绍了备份和安全策略以及高可用性和性能设计。
在本章中,您将了解设计安全性和身份解决方案领域的目标,包括如何保护您的资源,例如使用 Azure AD Connect、多因素身份验证(MFA)等。还将介绍如何为您的 Azure 解决方案使用不同的身份提供者。
以下主题将被涵盖:
-
Azure Active Directory(Azure AD)
-
Azure AD Connect
-
Active Directory 联合身份认证服务(ADFS)
-
多因素身份验证
-
Azure Active Directory 企业对企业(Azure AD B2B)
-
Azure Active Directory 企业对消费者(Azure AD B2C)
技术要求
本章使用以下工具进行示例:
- Visual Studio 2017:
www.visualstudio.com/downloads/
本章的源代码可以通过以下链接下载:
github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%209/
Azure Active Directory
Azure Active Directory(Azure AD)提供来自云端的目录和身份管理。它提供传统的用户名和密码身份管理、角色和权限管理。除此之外,还提供更多企业级解决方案,如 MFA、应用监控、解决方案监控和警报。Azure AD 可以轻松与您的本地 Active Directory 集成,以创建混合基础设施。
Azure AD 提供以下定价计划:
-
Free:提供最基本的功能,如支持最多 500,000 个对象、SSO、支持 Azure AD Connect 同步和标准安全报告
-
Basic:不限制对象数量,提供 99.9% SLA、组功能、自助密码重置和对应用代理的支持
-
Premium P1:提供高级报告、MFA、MDM 自动注册、云应用发现和 Azure AD Connect 健康监控
-
Premium P2:身份保护和特权身份管理
若要详细了解不同定价计划及每个计划提供的所有功能,您可以参考以下定价页面:azure.microsoft.com/en-us/pricing/details/active-directory/
。
请注意,Azure AD Premium 是企业移动性 + 安全套件的一部分。
您还可以在自定义应用和 API 中利用 Azure AD 来授权用户并保护您的资源。它支持行业标准协议,如 OAuth2.0 和 OpenID Connect,并支持单租户和多租户应用的身份验证,以及业务线(LOB)应用。
它提供了两个不同的端点,可以在你的自定义应用程序中使用:
-
V1 端点:此端点仅支持 Microsoft 工作或学校账户,并使用 Azure Portal 在 Azure AD 中注册应用。它使用 Azure Active Directory 库(ADAL)SDK 来认证应用程序中的用户。
-
V2 端点:此端点同时支持 Microsoft 工作或学校账户和个人账户(如 Outlook.com)。它还提供一个新的注册门户,位于
apps.dev.microsoft.com
,使得在 Azure AD 中注册应用程序变得更加容易。它使用 Microsoft 身份验证库(MSAL)来认证应用程序中的用户。使用此端点,你可以为多平台应用创建一个单一的 App ID。如果你的应用程序由独立的 Web、Android 和 iOS 应用组成,它们可以使用相同的 App ID。你可以使用动态授权,在应用程序本身需要权限时再进行授权,而不是在 Azure AD 中注册应用时预先授权。
Microsoft Graph
Microsoft Graph 是一组 API,它将多个 Azure 服务连接在一起,并为开发者提供一个单一的端点,用于在自定义应用程序中使用。
Microsoft Graph 由各种 Azure 服务之间的关系构成。通过调用特定用户的端点(该用户已添加到 Azure AD 中),你可以检索用户正在处理的文档,找到他的/她的经理,获取用户的会议列表,列出设备等。
Azure AD 也集成在 Microsoft Graph 中,但它不仅仅可以用于 Azure AD 的功能。事实上,几乎所有 Azure 的 SaaS 产品都使用 Azure AD,例如 Office 365、Intune、Dynamic 365 和 Azure SQL。所有这些 Azure 服务都集成在 Microsoft Graph 中,可以在你的应用和 API 中使用。
Microsoft Graph 提供了两个不同的端点,一个是 V1.0 端点,它包含了所有正式发布的 API;另一个是 beta 端点,后者提供的 API 可能会随着时间的推移发生变化。
要开始使用 Graph API 并在 Azure AD 中注册你的应用程序,可以参考:developer.microsoft.com/en-us/graph
。这是一个很好的起点,你还可以下载适用于多种编程语言的安全示例应用程序。
有关所有集成在 Microsoft Graph 中的 Azure 服务的概述,你也可以参考这个网站。
Azure AD Connect
Azure AD Connect 是一个服务,允许你将本地 Active Directory 身份与 Azure 同步。这样,你可以在本地环境和云环境及其他 SaaS 应用中使用相同的身份进行身份验证。
Azure AD Connect 同步服务由两个部分组成:Azure AD Connect 同步组件,这是一个安装在您本地环境中单独服务器上的工具,以及 Azure AD Connect 同步服务,这是 Azure AD 的一部分。同步组件可以将数据从 Active Directory 和 SQL Server 同步到 Azure。还有一个名为 Active Directory 联合身份验证服务(ADFS)组件的第三个组件,可以在涉及 ADFS 的场景中使用。要监控本地身份基础设施和不同的 Azure AD 组件,您可以使用一个名为 Azure AD Connect Health 的工具。
[外链图片转存中…(img-21cC6t1M-1751164598837)]
Azure AD Connect 架构
有关如何安装 Azure AD Connect 并同步用户帐户和密码的更多信息,请参考 docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-select-installation
。有关监控健康状况的更多信息,请参考:docs.microsoft.com/en-us/azure/active-directory/connect-health/active-directory-aadconnect-health
。
Azure AD Connect 提供支持,允许用户使用相同的密码登录本地和云资源。为此提供了三种不同的身份验证方法:密码哈希同步方法、直通身份验证方法和联合单点登录方法(与 Active Directory 联合身份验证服务配合使用)。
这三种不同的身份验证方法将在接下来的部分中详细介绍。
Azure Active Directory 密码哈希同步
大多数组织只需要启用用户登录到 Office 365、SaaS 应用程序和其他基于 Azure AD 的资源。密码哈希同步方法非常适合这种场景。
使用此方法,用户的密码哈希在本地 Active Directory 和 Azure Active Directory 之间同步。当用户密码发生变化时,密码会立即同步,因此用户可以始终使用相同的凭证在本地和 Azure 中登录。
此认证方法还提供 Azure AD 无缝单点登录(SSO)。这样,用户在公司网络上使用域加入设备时,系统会自动登录。使用无缝 SSO 时,用户只需输入用户名。为了使用无缝 SSO,您无需在本地网络上安装额外的软件或组件。您可以通过组策略将此功能推送给用户。
Azure Active Directory 直通认证
Azure Active Directory 直通认证提供相同的功能,例如 Azure AD 密码哈希同步。用户可以使用相同的凭据登录到其 Azure 资源以及本地资源。不同之处在于,使用直通认证时,密码不会与 Azure AD 同步。密码是在本地 Active Directory 中验证的,完全不会存储在 Azure Active Directory 中。
这种方法适用于那些有安全性和合规性限制的组织,这些组织不允许将用户名和密码发送到本地网络之外。
直通认证需要在本地网络内安装一个代理在域加入的 Windows Server 上。该代理会监听密码验证请求,并仅从您的网络内发起外部连接。它还支持 MFA 和 Azure AD 条件访问策略。
Azure AD 直通认证还提供 Azure AD 无缝 SSO。
Active Directory 联邦服务
Active Directory 联邦服务(ADFS)是一项基于标准的服务,是 Windows Server 的一项功能,您可以在 Windows Server 机器上启用它。它为外部用户提供一个身份验证提供者,使其能够通过互联网登录到本地环境。
ADFS 提供以下功能:
-
Web SSO:当联合用户访问安装在本地数据中心的应用程序时,提供 SSO。
-
Web 服务(WS)- 互操作性:不使用 Windows 身份模型但兼容 WS-Federation 规范的应用程序或用户,仍然可以通过 ADFS 服务器对其进行身份验证,并访问本地应用程序。
-
无外部用户帐户管理:外部用户可以使用其所属组织或个人凭证进行身份验证。在 ADFS 中,使用外部身份验证提供者和 ADFS 建立信任。然后,用户可以通过安全声明标记语言(SAML)声明进行联合身份验证。
联合 SSO 认证方法使用 Azure AD Connect 与 ADFS 结合,为用户提供联合单点登录。您可以将 ADFS 部署在本地数据中心或使用 Azure 虚拟机。您可以使用相同的 Azure AD API,如 Microsoft Graph,连接到本地身份。Azure Active Directory 负责通过 ADFS 连接到您的本地环境,并处理认证过程。
你还可以使用 ADFS 扩展 Azure AD 的功能。你可以实现自定义声明或条件策略,这些功能在 Azure AD 中不存在,或者使用你的组织登录屏幕,添加额外的通知或信息,或者使用自定义 MFA 提供商。你还可以使用 ADFS 在不同的环境之间创建信任。
多因素身份验证
在今天的世界中,保护数据和系统至关重要。MFA 为用户登录增加了第二层安全性,并且现在已成为保护数据的最佳实践。它启用两步验证,你首先使用你所知道的信息登录,然后使用你所拥有的信息进行验证。
Azure MFA 使用以下验证方法:
-
你知道的东西:这类似于传统密码。
-
你拥有的东西:这类似于手机,通过发送短信、使用验证应用程序或接听电话来进行验证。Azure MFA 还支持第三方 OAUTH 令牌。
-
你是谁:这类似于生物识别技术,通过指纹或面部识别进行验证。
Azure MFA 是 Office 365 和 Azure 服务的一部分。它易于设置,你可以选择要为用户使用的验证方法。当你需要将 MFA 添加到未通过 Azure 应用程序代理发布到云中的本地应用程序时,你也可以选择部署本地 MFA 服务器。
如果你想了解更多有关本地 MFA 服务器的信息及其提供的功能,你可以参考:docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-authentication-get-started-server.
Azure MFA 包含在 Azure Active Directory Premium 计划和企业移动性与安全套件中。你也可以将其作为独立产品购买。
你还可以在自定义应用程序中使用 MFA SDK 来实现 MFA。用户可以使用现有的凭证登录应用程序。该应用程序向 Azure MFA 服务发送请求,Azure MFA 服务将向电话或其他设备发送请求。用户通过身份验证后,Azure MFA 服务将响应返回给应用程序,从而完成用户登录。MFA SDK 支持多种编程语言,如 C#、PHP、Ruby 和 Java。
在 Azure 门户中启用 MFA
要在 Azure 门户中启用 MFA,请按照以下步骤操作:
-
通过打开
portal.azure.com/
导航到 Azure 门户。 -
在左侧菜单中点击 Azure Active Directory。
-
在下一个窗格中,点击用户。然后在顶部菜单中点击 多因素身份验证:
[外链图片转存中…(img-iISMWJc5-1751164598837)]
启用 MFA - Azure 门户
- 将打开 MFA 门户,你可以为每个用户启用 MFA。
在 Office 365 中启用 MFA
要在 Office 365 管理中心启用 MFA,请按照以下步骤操作:
-
通过打开
portal.office.com/adminportal/home
进入 Office 365 管理中心。 -
进入“用户 | 活跃用户”。点击“更多 | 设置 Azure 多重身份验证”,如下面的截图所示:
[外链图片转存中…(img-GqZ6tW4O-1751164598837)]
启用 MFA - Office 365 管理中心
- Office 365 的 MFA 门户已打开,外观与 Azure MFA 门户基本相同。
Azure Active Directory Business to Business
Azure Active Directory Business to Business (B2B) 是 Azure Active Directory 的一项功能,使组织能够安全地与外部用户合作。要加入 Azure B2B,外部用户不需要拥有 Microsoft 工作或个人账户,并将其添加到现有的 Azure AD 租户中。各种账户都可以加入 Azure B2B。你无需在 Azure 门户中进行任何配置即可使用 B2B;此功能默认对所有 Azure AD 租户启用。
Azure B2B 与 Office 365 集成,支持外部共享。它还提供可以在自定义应用程序中使用的 API,让内部和外部用户都能进行身份验证。
Azure AD 免费功能对外部用户开放且无需收费。然而,如果你希望外部用户使用 Azure AD Premium 功能,如多重身份验证(MFA)和条件访问,你需要有足够的 Azure AD Premium 许可证,比例为 5:1。这意味着每购买一个 Azure AD Premium 许可证,你可以添加五个外部用户。因此,举例来说,如果你的组织想要添加 50 个外部用户到 Azure B2B,你需要购买 10 个 Azure AD Premium 许可证。
Azure AD B2B 提供以下功能:
-
管理门户:为外部组织提供的单独门户,管理员可以在其中添加、管理和删除用户。
-
组:你可以为外部用户创建组。你也可以使用动态组。管理员可以设置规则,根据用户属性自动填充组。
-
条件访问:通过条件访问,你可以为用户设置某些条件。你可以强制外部用户使用 MFA,或只允许他们访问某些应用程序,或仅允许从特定位置访问。
-
共享策略:不仅管理员可以邀请外部用户。你可以使用策略将这些权限委派给其他外部用户。你可以将“访客邀请者”角色分配给用户,这样该用户就可以发送邀请。
-
审计和报告:与普通用户一样,也有审计和报告功能。你可以查看邀请历史和接受详情。
Azure Active Directory Business to Consumer
Azure Active Directory Business to Consumer (B2C) 是一种用于移动和 Web 应用程序的云身份管理解决方案。它提供开箱即用的身份验证提供程序,可以通过 MSAL 在你的应用程序和自定义 API 中使用,这也是其他 Azure AD 应用程序所使用的(使用 V2 端点)。
这意味着开发人员无需手动添加额外的 SDK;所有这一切都由 Microsoft 处理。接下来,除了 Microsoft 提供的身份验证提供程序外,它还提供了添加您自己身份验证提供程序的能力。
Azure AD B2C 提供以下身份验证提供程序:
-
社交帐户:它们是 Facebook、Google、LinkedIn 等
-
企业帐户:它们使用开放标准协议,如 OpenID Connect 或 SAML
-
本地帐户:它们是使用电子邮件地址/用户名和密码的帐户。
您的应用程序需要在 Azure B2C 租户内注册。注册后,可以为该应用配置内置策略,您可以启用不同的身份验证方法、设置声明、启用 MFA 或创建密码重置策略,供应用使用。
然后,您将所需的配置设置添加到您注册在 Azure B2C 租户中的应用程序的代码中,并且所有前面提到的设置都可以在没有进一步配置的情况下使用。
您可以参考以下网站获取更多有关 Azure AD B2C 的信息:docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-overview
。
在您的应用程序中利用 Azure AD B2C
在此演示中,我们创建一个利用 Azure AD B2C 功能进行身份验证的应用程序。此过程分为两个步骤,首先是在 Azure 门户中创建一个 Azure AD B2C 租户,然后是创建该应用程序。
在 Azure 门户中创建 Azure AD B2C 租户,请按照以下步骤操作:
-
通过打开
portal.azure.com/
访问 Azure 门户。 -
点击新建,在搜索框中输入
Azure Active Directory B2C
。创建一个新的租户:
[外链图片转存中…(img-ojWREwBt-1751164598837)]
创建 Azure B2C 租户
- 选择创建新的 Azure AD B2C 租户,添加以下设置,然后点击创建:
[外链图片转存中…(img-1d1iTQnK-1751164598837)]
添加设置
- 您可以通过打开 Azure 门户右上角的菜单来选择租户:
[外链图片转存中…(img-cpls6NrD-1751164598838)]
选择 Azure B2C 租户
- 创建后,您可以导航到门户中的 Azure B2C 页面。
现在,您可以在 B2C 租户中设置不同的身份验证提供程序。在此演示中,我添加了一个 Google 身份提供程序。要添加此提供程序,您可以参考教程:docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-goog-app
。
- 接下来要做的是注册应用程序。在左侧菜单中点击“应用程序”,然后点击“添加”按钮:
[外链图片转存中…(img-ER1S1uWa-1751164598838)]
在 Azure B2C 中注册应用程序
- 我们将创建一个 Web 应用程序来进行 Azure B2C 身份验证。我们使用 OpenID Connect 进行登录,因此你需要启用“允许隐式流”(Allow implicit flow)。你还需要添加回复 URL。添加以下设置并点击“创建”:
[外链图片转存中…(img-SsDOXX2m-1751164598838)]
添加应用程序设置
- 当应用程序创建完成后,点击该应用程序。将应用程序 ID 复制到记事本中。还需要复制应用程序密钥。在左侧菜单中点击“密钥”(Keys),然后点击生成密钥(Generate key):
[外链图片转存中…(img-8WzdXdCt-1751164598838)]
生成密钥
-
立即点击保存并将密钥复制到记事本中。
-
接下来要做的是创建一个 Google 身份提供者。打开左侧菜单中的身份提供者(Identity providers),然后点击“添加”按钮:
[外链图片转存中…(img-HcZF1WR5-1751164598838)]
添加 Google 身份提供者
- 在下一个面板中,选择以下设置:
[外链图片转存中…(img-NIdSMkih-1751164598838)]
选择 Google
- 打开一个新的浏览器标签页并访问:
console.developers.google.com
。创建一个新项目并命名为PacktB2C
。返回 API 主页并在左侧菜单中点击凭据(Credentials):
[外链图片转存中…(img-aWkAJG9Q-1751164598838)]
获取应用程序凭据
- 点击顶部菜单中的 OAuth 同意屏幕设置,添加以下内容,然后点击保存:
[外链图片转存中…(img-oUcAtlWB-1751164598838)]
OAuth 同意设置
- 点击顶部菜单中的凭据同意设置(Credentials consent settings),然后添加以下设置:
[外链图片转存中…(img-Q7heB17M-1751164598839)]
创建 OAuth 凭据
- 添加以下设置以创建应用程序:
[外链图片转存中…(img-Ak8sxGFO-1751164598839)]
注册应用程序
-
一个弹出窗口会显示客户端 ID 和客户端密钥。将其复制到记事本中。
-
返回 Azure 门户,将客户端 ID 和客户端密钥添加到我们注册身份提供者的面板中,然后点击“确定”:
[外链图片转存中…(img-uC41FyZI-1751164598839)]
添加客户端 ID 和客户端密钥
- 接下来,你需要添加登录策略。在左侧菜单中点击此项,然后点击“添加”(Add)。添加以下设置:
[外链图片转存中…(img-zSKpTQJT-1751164598839)]
添加策略
- 选择以下应用程序声明并点击“确定”,然后点击“创建”:
[外链图片转存中…(img-9tMXRs1i-1751164598839)]
选择 Google 声明
- 示例应用程序可以从 GitHub 下载。打开应用程序的
Web.config
文件,并用之前复制到记事本中的值更新设置。它应该如下所示:
<!---->
- 运行应用程序并点击登录按钮。确保应用程序在你已在 Azure 门户配置为回复 URL 的 IP 地址上运行:
[外链图片转存中…(img-CoeYpREY-1751164598839)]
登录应用程序
- 现在,你可以使用你的 Google 账户进行登录。
总结
本章中,我们介绍了如何利用 Azure 提供的不同功能来保护你的资源。我们讲解了 Azure Active Directory,以及如何使用 Azure AD Connect 设计混合环境。我们还讨论了 ADFS、Azure B2B 和 Azure B2C。
下一章将讲解如何保护你的数据。
问题
回答以下问题,以测试你对本章内容的理解。你可以在本书最后的评估部分找到答案:
-
你正在创建一个利用 Office 365 数据的会议应用程序。用户应该能够使用他们的 Azure Active Directory 凭据登录。你可以使用 Microsoft Graph 来实现吗?
-
是
-
否
-
-
你想创建一个混合环境,并为本地应用程序和云应用程序都使用单一登录。你应该使用 Azure AD Connect 来实现吗?
-
是
-
否
-
-
Azure AD B2B 是否是启用 SharePoint Online 环境中的外部共享的合适解决方案?
-
是
-
否
-
深入阅读
你可以查看以下链接,获取有关本章涵盖主题的更多信息:
-
Azure Active Directory 文档:
docs.microsoft.com/en-us/azure/active-directory/
-
Azure AD Connect 同步:了解和定制同步:
docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnectsync-whatis
-
Azure AD Connect 用户登录选项:
docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-user-signin
-
Active Directory 联合身份认证服务:
msdn.microsoft.com/en-us/library/bb897402.aspx
-
在 Azure 中部署 Active Directory 联合身份认证服务:
docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-azure-adfs
-
多重身份验证文档:
docs.microsoft.com/en-us/azure/multi-factor-authentication/
-
什么是 Azure AD B2B 协作?:
docs.microsoft.com/en-us/azure/active-directory/active-directory-b2b-what-is-azure-ad-b2b
-
Azure Active Directory B2C:为使用 Microsoft 帐户的消费者提供注册和登录功能:
docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-msa-app
-
Azure Active Directory B2C:为使用 Facebook 账户的消费者提供注册和登录功能:
docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-fb-app
-
Azure Active Directory B2C:为使用 Google+ 账户的消费者提供注册和登录功能:
docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-goog-app
-
Azure Active Directory B2C:注册你的应用程序:
docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-app-registration
-
Azure Active Directory B2C:在面向消费者的应用程序中启用多重身份验证:
docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-mfa
第十章:保护您的数据
在上一章中,我们介绍了如何保护您的资源。我们讲解了如何使用 Azure Active Directory、Azure B2B 等服务设计解决方案,并讨论了何时使用这些不同的 Azure 服务。
本章将介绍如何为 Azure 服务设计数据安全解决方案,例如使用 Azure 存储加密、Azure 磁盘加密和 Azure 密钥保管库。
本章结束时,您将了解如何使用 Azure 中的不同安全功能来保护您的数据。
以下主题将被涵盖:
-
Azure 密钥保管库
-
Azure 存储加密
-
Azure 磁盘加密
-
Azure SQL 数据库安全
-
Azure AD 托管服务标识
技术要求
本章使用以下工具作为示例:
- Azure PowerShell:
docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-5.1.1
本章的源代码可以从以下链接下载:
github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%2010
Azure 密钥保管库
您可以将加密密钥和机密存储在 Azure 密钥保管库中,这些密钥可以被各种 Azure 服务和自定义应用程序使用。Azure 使用它来存储 Azure 存储服务加密和 Azure 磁盘加密的密钥,这些将在本章后续介绍。然而,您也可以将应用程序客户端 ID 和密钥存储在其中,并在自定义应用程序中检索它们。这样,您就不再需要将这些 ID 和密钥存储在 web.config 中,而是可以从一个位置进行管理,确保它们安全且受到保护,且该位置位于 Azure 门户中。您还可以存储证书和其他身份验证密钥,并为密钥的使用提供监控解决方案。Azure 密钥保管库与 Azure AD 集成,您可以设置访问策略,控制不同用户和组对存储在其中的密钥的访问权限。
Azure 密钥保管库有两种服务层级:
-
标准:提供地理扩展和可用性。
-
高级:提供地理可用性和对硬件安全模块(HSM)的支持,通过为 HSM 密钥提供备份。HSM 是专门用于加密操作的计算机。将操作处理交由硬件本身可以提供更好的性能和安全性。密钥和机密在 Azure 密钥保管库中被加密,并且添加了一些额外的属性,确保只能由特定的 HSM 使用。
在 Azure 门户中创建 Azure 密钥保管库
在 Azure 门户中创建 Azure 密钥保管库服务并向其中添加密钥、机密和证书,请按以下步骤操作:
-
通过打开
portal.azure.com/
访问 Azure 门户。 -
点击“新建”并在搜索栏中输入
Key Vault
。创建一个新的密钥保管库:
[外链图片转存中…(img-MS8mwVXL-1751164598839)]
创建新的 Azure 密钥保管库
- 添加以下设置并点击创建:
[外链图片转存中…(img-x7oAY5Kh-1751164598839)]
添加 Azure 密钥保管库设置
- 一旦密钥保管库(Key Vault)创建完成,你可以从左侧菜单中添加密钥和密钥:
[外链图片转存中…(img-dLokRHyO-1751164598840)]
密钥保管库设置
- 点击密钥(Keys),然后点击生成/导入。在这里,你可以设置多个选项,如密钥类型和密钥大小。添加以下设置并点击创建:
[外链图片转存中…(img-ZnJKbL7r-1751164598840)]
添加密钥
- 如果点击密钥并进入其属性,你会看到你可以使用此密钥执行多种操作;你可以加密、解密、签名和验证数据,或者使用封装密钥(Wrap Key)和解封装密钥(Unwrap Key)操作来保护其他密钥:
[外链图片转存中…(img-b3pabs3T-1751164598840)]
密钥属性
- 要创建密钥,请点击左侧菜单中的密钥(Secret),然后点击生成/导入。例如,你可以添加应用程序密钥和应用程序密钥。添加以下设置并点击创建:
[外链图片转存中…(img-lGIw2amJ-1751164598840)]
添加密钥
- 要创建或上传证书,请点击左侧菜单中的证书,然后点击生成/导入。在这里,你还可以添加证书颁发机构并让它们颁发证书。我们现在为此示例创建一个自签名证书:
[外链图片转存中…(img-gHFKvbwm-1751164598840)]
创建证书
- 点击创建。证书创建可能需要一些时间。
在 ARM 模板中使用 Azure 密钥保管库的密钥
除了在自定义应用程序中使用 Azure 密钥保管库,你还可以在 ARM 模板中使用密钥。你可以将密钥添加到参数 JSON 文件中。参见以下示例,看看你的参数应该是什么样子:
\"packtPassword\": {\"reference\": {\"keyVault\": { \"id\": \"/subscriptions//resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/\" }, \"secretName\": \"packtsecret\" }},
这应该能给你一个关于如何在 ARM 模板中嵌入密钥的印象。关于如何创建 ARM 模板的完整教程,你可以参考以下文章:docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-keyvault-parameter
。
Azure 存储服务加密
Azure 存储默认提供数据静态加密(SSE)。当数据在应用程序和 Azure 之间传输时,使用 HTTPS 进行加密;并且当数据写入存储帐户时,使用 256 位 AES 加密进行加密。你还可以使用 SMB 3.0 或 VPN 连接安全地将数据传输到 Azure。一旦数据再次被访问,它会被解密,并通过 HTTPS 发送回去。Azure 自动管理存储加密密钥,保存在 Azure 密钥保管库中。SSE 用于表、文件、队列和 Blob 存储,适用于标准和高级定价计划,支持所有冗余级别和所有地区。
你可以在 Azure 门户、PowerShell、CLI、REST API 和 Azure 存储 SDK 中设置存储帐户的加密。默认情况下已启用,因此你不必在 PowerShell 脚本中手动设置此项:
[外链图片转存中…(img-mAFAdKrb-1751164598840)]
Azure 存储服务加密设置
你还可以在自定义代码中使用客户端加密。Azure 存储客户端库(.NET)支持此功能。这也与 Azure 密钥保管库配合使用。SDK 创建一个内容加密密钥(CEK),用于在数据发送到存储帐户之前对数据进行加密。加密密钥默认存储在 Azure 密钥保管库中,但你也可以使用自定义提供程序。使用客户端加密将会在数据发送到 Azure 之前以及存储在存储帐户内的瞬间对数据进行加密。
SSE 有一个限制,那就是只有在启用加密时创建的数据才会被加密。因此,如果你曾在某个时间点禁用了存储帐户的加密,存储帐户中的数据将不再被加密。当你决定重新启用加密时,之前存储的数据不会自动加密,因为数据只有在存储时才会被加密。你必须删除并重新上传这些数据才能进行加密。
Azure 磁盘加密
Azure 磁盘加密可以加密 Windows 和 Linux 虚拟机磁盘。对于 Windows 磁盘,使用 Bitlocker;对于 Linux,使用 dm-crypt,这两者都是行业标准。Azure 密钥保管库用于管理加密密钥,类似于 Azure 存储加密。
对于所有虚拟机类型,Azure 磁盘加密在所有 Azure 区域都可用,并可以通过 PowerShell 设置。你可以使用以下命令来设置加密:
Login-AzureRmAccount
如有必要,选择正确的订阅:
Select-AzureRmSubscription -SubscriptionId \"********-****-****-****-***********\"
我们正在使用 Azure 密钥保管库来存储我们之前创建的加密密钥。我们也在这里使用了第一章中创建的虚拟机(确保虚拟机正在运行,否则脚本会报错)。这两者都创建在同一个资源组中。因此,填写密钥保管库的名称、密钥保管库的资源组以及虚拟机,并对虚拟机进行加密。它使用 Azure AD 中的一个应用程序,该应用程序用于将机密写入密钥保管库。你需要先创建这个应用,并在脚本中替换应用程序 ID 和密钥。完全加密可能需要一些时间:
$RGName = \"PacktPub\"$VMName = \"W16PacktServer\"$AADClientID = \"PacktADApp\"$AADClientSecret = \"PacktSecret\"$VaultName= \"PacktKeyVault\"$KeyVault = Get-AzureRmKeyVault -VaultName $VaultName -ResourceGroupName $RGName$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri$KeyVaultResourceId = $KeyVault.ResourceIdSet-AzureRmVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -AadClientID $AADClientID -AadClientSecret $AADClientSecret -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId
Azure SQL 数据库安全性
Azure SQL 数据库还提供了多种数据安全功能。它为传输中的数据、静态数据和使用中的数据提供安全性。为此,它使用了以下功能:
-
HTTPS:此协议为传输中的数据提供安全性。数据通过 HTTPS 的安全连接传输。
-
透明数据加密:这为静态数据提供安全性。它实时加密和解密数据库、备份文件和日志。它也用于 Azure 数据仓库。它使用一个数据库加密密钥,该密钥默认由 Azure 存储,但也可以存储在 Azure Key Vault 中。新创建的数据库默认是加密的。您可以在 Azure 门户、PowerShell 和 REST API 中的设置内禁用或启用加密:
[外链图片转存中…(img-nLoLFO6z-1751164598840)]
Azure 门户中的透明数据加密
- 始终加密:这为正在使用中的数据提供安全性。它为数据库中的机密数据提供加密。例如,社会保障号码或信用卡号码在数据库中以加密形式存储,并在应用程序内为有权限访问的人解密。您可以使用 SQL Server Management Studio 或 PowerShell 启用始终加密功能来加密数据库中的列。为了从应用程序加密敏感数据,您可以使用 .NET Framework 数据提供程序来进行 SQL Server 加密。
Azure Active Directory 托管服务身份
到本书写作时,Azure Active Directory 托管服务身份仍处于预览阶段。它为所有使用 Azure Active Directory 的 Azure 资源提供托管身份。
当您在 Azure 资源上启用 MSI(例如 Azure 虚拟机、Azure 函数或应用程序)时,Azure 会创建一个服务主体,并将该服务主体的凭据存储到 Azure 资源本身。当需要进行身份验证时,调用 MSI 端点,传递您当前的 Azure AD 凭据和特定资源的引用。MSI 然后从 Azure 资源中检索存储的凭据,传递给 Azure AD,并获取可以用于身份验证 Azure 资源或服务的访问令牌。
您应该注意,服务主体仅在其存储的特定 Azure 资源的边界内可见。如果它还需要对其他资源授予权限,您应该使用 基于角色的访问控制 (RBAC) 在 Azure AD 中分配适当的角色。
您可以在 Azure 门户、PowerShell、CLI 和 ARM 模板中启用 Azure 资源的 MSI:
[外链图片转存中…(img-fjcwdlnQ-1751164598840)]
应用服务的托管服务身份设置
从自定义代码中,您还可以调用 MSI 端点获取访问令牌以进行 Azure 资源的身份验证。对于 .NET 应用程序,您可以使用 Microsoft.Azure.Services.AppAuthentication
库来完成此操作。您也可以通过调用 REST API 来实现,但这样您需要手动创建请求。
您可以参考以下 GitHub 页面 github.com/Azure-Samples/app-service-msi-keyvault-dotnet
,了解一个使用 MSI 的应用程序示例。
总结
本章介绍了如何使用 Azure 提供的不同服务来保护数据安全。我们讨论了 Azure 密钥保管库、Azure 存储服务加密、Azure 磁盘加密等内容。现在,你应该知道何时以及如何在解决方案中使用这些技术。
下一章将是本目标的最后一章,治理与政策。
问题
请回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案。
-
你希望为应用程序增加额外的安全层。信用卡号需要加密存储在 Azure SQL 数据库中。你应该使用数据掩码吗?
-
是
-
否
-
-
你正在开发一个自定义应用程序,并且不想将应用 ID 和应用密钥添加到 web.config 中。你可以将这些凭据存储在 Azure 密钥保管库中,并在应用程序执行时动态检索吗?
-
是
-
否
-
-
Azure 磁盘加密是否加密静态数据和传输中的数据?
-
是
-
否
-
深入阅读
你可以查看以下链接,了解更多本章讨论的主题:
-
密钥保管库文档:
docs.microsoft.com/en-us/azure/key-vault/
-
使用 Azure 密钥保管库在部署期间传递安全参数值:
docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-keyvault-parameter
-
使用 Azure 密钥保管库保护应用程序机密:
docs.microsoft.com/en-us/azure/architecture/multitenant-identity/key-vault
-
开始使用 Azure 密钥保管库证书:
blogs.technet.microsoft.com/kv/2016/09/26/get-started-with-azure-key-vault-certificates/
-
Azure 存储服务加密(静态数据):
docs.microsoft.com/en-us/azure/storage/common/storage-service-encryption
-
保护你的 SQL 数据库:
docs.microsoft.com/en-us/azure/sql-database/sql-database-security-overview
-
始终加密:
docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine
-
Azure 资源的托管服务身份(MSI):
docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/overview
第十一章:治理与政策
在上一章中,我们讨论了如何使用 Azure 提供的各种技术来保护您的数据,并介绍了何时使用这些技术。我们讨论了 Azure 密钥保管库、Azure 存储服务加密、Azure 磁盘加密等内容。
在本章中,我们将涵盖治理与政策,诸如 Azure 中的标准和自定义角色、何时使用 Azure 基于角色的访问控制、Azure 资源政策等内容。
本章结束时,您将了解如何设计治理机制和政策,并管理安全风险。
以下主题将被涵盖:
-
Azure 基于角色的访问控制
-
Azure 资源政策
-
Azure AD 特权身份管理
-
Azure AD 身份保护
-
Azure 安全中心
-
操作管理套件 - 安全与合规
技术要求
本章的示例使用以下工具:
- Azure PowerShell:
docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-5.1.1
本章的源代码可以通过以下链接下载:
github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%2011
Azure 基于角色的访问控制
在 Azure 中使用基于角色的访问控制(RBAC),您可以实施最小权限原则,并为用户提供完成工作所需的精确权限。用户、组和应用程序会被添加到 Azure 中的角色中,这些角色具有某些权限。您可以使用 Azure 提供的内置角色,或者可以在 RBAC 中创建自定义角色。
Azure 中的角色可以添加到特定的范围。范围可以是一个 Azure 订阅、一个 Azure 资源组,或例如 Web 应用。然后,Azure 使用访问继承。添加到父资源的角色会自动赋予对子资源的访问权限。例如,添加到 Azure 订阅的组会获得该订阅下所有资源组及其底层资源的访问权限。添加到虚拟机的用户仅能访问该特定虚拟机:
[外链图片转存中…(img-cjwYkjPF-1751164598840)]
基于角色的访问控制继承
在每个 Azure 订阅中,您可以授予最多 2,000 个角色分配,这些分配可以通过 Azure 门户、PowerShell、CLI 和 REST API 设置。
内置角色
Azure 提供了多种内置角色,您可以使用它们来为用户、组和应用分配权限。RBAC 提供以下三种标准角色,您可以将它们分配给每个 Azure 资源:
-
所有者:该角色中的用户可以管理一切,并可以创建新资源。
-
贡献者:该角色中的用户可以像所有者角色中的用户一样管理一切,但不能将访问权限分配给其他人。
-
读者:该角色中的用户可以读取所有内容,但不允许进行任何更改。
除了标准角色外,每个 Azure 资源还拥有作用于特定资源的角色。例如,你可以将用户、组或应用分配给 SQL 安全管理员角色,在该角色中他们可以管理所有与 Azure SQL 服务器相关的安全策略,或者你可以将他们分配给虚拟机贡献者角色,在该角色中他们可以管理虚拟机,但不能管理与虚拟机连接的虚拟网络或存储账户。
要查看 Azure 提供的所有内置角色概览,你可以参考 docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles
。
自定义角色
当没有内置角色符合你的需求时,你还可以在 RBAC 中创建自定义角色。自定义角色可以被分配到与内置角色相同的资源,只能通过 PowerShell、CLI 和 REST API 创建。你不能在 Azure 门户中创建它们。在每个 Azure 租户中,最多可以创建 2,000 个角色。
自定义角色是通过 JSON 定义的,部署后它们会存储在 Azure AD 租户中。通过将它们存储在 Azure AD 租户中,它们可以在连接到该 Azure AD 租户的所有不同 Azure 订阅中使用。
创建自定义角色
在下一个示例中,我们正在创建一个只能在 Azure 中重启虚拟机的自定义角色。我们还将在 JSON 文件中将该角色分配给我的用户账户:
- 你可以使用以下 JSON 代码定义自定义角色。你应该将
Id
设置为null
,因为自定义角色在创建时会自动分配 ID。我们将把自定义角色添加到两个 Azure 订阅中:
{ \"Name\": \"Packt Custom Role\", \"Id\": null, \"IsCustom\": true, \"Description\": \"Allows for read access to Azure Storage, Network and Compute resources and access to support\", \"Actions\": [ \"Microsoft.Compute/*/read\", \"Microsoft.Storage/*/read\", \"Microsoft.Network/*/read\", \"Microsoft.Resources/subscriptions/resourceGroups/read\", \"Microsoft.Support/*\" ], \"NotActions\": [ ], \"AssignableScopes\": [ \"/subscriptions/********-****-****-****-***********\", \"/subscriptions/********-****-****-****-***********\" ]}
- 将 JSON 文件保存在电脑
C:
盘的CustomRoles
文件夹中。然后,运行以下 PowerShell 脚本来创建角色。首先,登录到你的 Azure 账户:
Login-AzureRmAccount
- 然后,通过在 PowerShell 中导入 JSON 文件来创建 Azure 中的自定义角色:
New-AzureRmRoleDefinition -InputFile \"C:\\CustomRoles\\PacktCustomRole.json\"
-
通过打开以下网址,导航到 Azure 门户:
portal.azure.com/
。 -
进入 订阅,选择 JSON 文件中已添加角色的订阅之一。然后,点击 访问控制(IAM)| 添加。
-
在下一个页面中选择角色。自定义角色将出现在列表中:
[外链图片转存中…(img-X2Mlgzfj-1751164598841)]
Azure 门户中的自定义角色
Azure 资源策略
在 Azure 中,你可以创建策略,在这些策略中定义并强制执行 Azure 资源的规则和操作。Azure 策略与 RBAC 不同,因为它关注的不是需要访问权限的用户、组或应用,而是关于应用你组织的治理策略。Azure 可以扫描你的资源,确保它们符合公司规则和 SLA。例如,你可以创建一个策略,评估所有使用托管磁盘的虚拟机。
创建策略时,用户必须在 RBAC 中被授予所有者角色,或者需要创建自定义角色并将以下权限添加到 JSON 文件中:
-
定义策略:
Microsoft.Authorization/policydefinitions/write
-
分配策略:
Microsoft.Authorization/policyassignments/write
可以通过 Azure 门户、PowerShell 和 CLI 创建策略。
要通过 Azure 门户创建策略,您可以参考以下教程:docs.microsoft.com/en-us/azure/azure-policy/assign-policy-definition
。
Azure AD 特权身份管理
Azure AD 特权身份管理(PIM)是 Azure AD Premium P2 或 Enterprise Mobility + Security E5 功能的一部分。通过 PIM,您可以管理和控制 Azure AD 租户内的所有访问权限,例如访问 Azure 资源、Office 365、Intune 和 Azure AD。
在 RBAC 中,您可以授予永久角色访问权限。通过 PIM,您可以将可用角色访问权限授予用户。那些不需要永久访问资源的用户可以在需要特定类型权限时请求访问,且访问时间为预定的时间段。例如,用户可以请求临时的 SharePoint 管理员权限。该请求可以由委派批准人批准,权限在用户完成后会被停用。
PIM 使用以下流程:
-
用户请求:用户使用在线表单请求特定权限的访问,并指定预定的时间。
-
请求审核:请求会在 PIM 门户内由管理员进行审核。
-
审批:请求可以被批准,用户将被添加到所需角色中。
-
通知:用户会通过电子邮件收到通知。
-
用户执行操作:用户使用多重身份验证(MFA)登录 Azure 资源,并且 Azure AD 特权身份管理(PIM)在特定的时间范围内提升他们的权限。
-
监控:监控团队可以跟踪 PIM 门户中的所有权限提升。
[外链图片转存中…(img-e7ukfaxP-1751164598841)]
Azure AD 特权身份管理概述
Azure AD 身份保护
Azure AD 身份保护是一个包含在 Azure AD Premium P2 许可证中的功能。它通过检测基于身份的安全问题,为您的 Azure 身份提供高级保护。它帮助发现被破坏的身份,提供条件访问策略,修复安全事件,并支持调查安全事件。Azure 使用机器学习算法进行检测,并生成报告和警报以解决威胁。
Azure AD 身份保护提供以下策略:
-
MFA 注册:在此,您可以分配 MFA 策略,并强制要求用户使用 MFA 登录。
-
用户风险策略:此策略允许您阻止用户登录,或强制要求他们更改密码为更安全的密码。
-
登录风险策略:当用户从不熟悉的位置登录时,此策略提供保护。您可以强制要求他们在该位置登录时使用多因素身份验证(MFA)。
[外链图片转存中…(img-7yvGLC0y-1751164598841)]
Azure AD 身份保护概览
Azure 安全中心
Azure 安全中心为所有 Azure 资源提供高级威胁防护和安全管理,这些资源位于 Azure AD 租户内以及混合环境中的本地资源。它集成在 Azure 门户中,提供以下功能:
-
集中式策略管理:您可以从一个中心位置管理混合环境中资源的所有安全策略。Azure 资源策略与 Azure 安全中心集成。
-
持续安全评估:此功能为所有虚拟机、应用程序、虚拟网络和存储帐户提供安全监控解决方案。
-
可操作建议:此功能提供建议,以修复来自 Azure 门户的漏洞和潜在威胁。
-
高级云防御:此功能提供端口的 JIT 访问,并对白名单中的虚拟机上部署的应用程序进行管理。
-
优先级警报和事件:此功能提供优先级警报,首先关注最大风险和威胁。
-
集成安全解决方案:您可以将 Azure 安全中心与第三方解决方案集成,从各种资源收集数据。
[外链图片转存中…(img-7WX601R5-1751164598841)]
Azure 安全中心概览
Azure 安全中心提供两种不同的定价层:
-
免费:所有 Azure 订阅都默认获得免费访问层。它提供安全策略、持续的安全评估和可操作的安全建议。
-
标准:此计划提供免费计划中的所有功能,但现在适用于混合环境。它还提供高级威胁检测,本章稍后将详细讲解,并提供高级云防御。
有关如何创建安全策略的完整教程,您可以参考docs.microsoft.com/en-us/azure/security-center/security-center-azure-policy
。请注意,编写本书时,Azure 策略仍处于预览阶段。
高级威胁检测
高级威胁检测监控所有 Azure 资源的安全信息,包括 Azure 订阅内的资源、混合环境和连接的第三方解决方案。它分析数据以检测潜在威胁,当检测到威胁时,会创建一个安全警报。此安全警报提供有关威胁的详细信息,并提供解决威胁的建议。
Azure 使用机器学习算法来帮助检测威胁。这些算法被应用于整个 Azure 云架构中,并可用于所有类型的帐户,如企业帐户、较小组织的帐户以及个人帐户。它们都可以从微软过去十年分析的所有数据中受益。
Azure 安全中心提供三种类型的威胁报告,这些报告是使用高级威胁检测生成的。根据攻击情况,这些报告的内容可能会有所不同:
-
活动组报告:这提供了关于攻击者的信息,例如身份或关联、攻击目标,以及攻击者的战术、工具和程序。
-
攻击活动报告:这提供了当前和历史攻击活动的信息。
-
威胁概述报告:这将合并所有先前提到的报告中的信息。
Azure 端点保护
Azure 端点保护是一项功能,能够为你的 Azure 虚拟机和连接到 Azure 安全中心的本地虚拟机提供防恶意软件保护。在 Azure 安全中心中,你可以监控虚拟机的防恶意软件保护状态。
要为你的虚拟机启用端点保护,你必须通过 Azure 安全中心来进行操作。
按照以下步骤从 Azure 门户创建虚拟机:
-
打开以下链接进入 Azure 门户:
portal.azure.com/
。 -
点击左侧菜单中的安全中心(Security Center)。确保打开的是概述页面。在“防护”(Prevention)标签下,点击计算(Compute):
[外链图片转存中…(img-lkPEXW5z-1751164598841)]
Azure 安全中心中的端点保护
- 当你的虚拟机未安装端点保护时,你将在报告工具中看到一个推荐。点击推荐(RECOMMENDATIONS):
[外链图片转存中…(img-HUyiImVF-1751164598841)]
Azure 安全中心中的端点保护建议
- 在下一个面板中,点击 Azure 虚拟机上未安装端点保护:
[外链图片转存中…(img-VU0eRoHE-1751164598841)]
端点保护设置
- 你现在可以选择要安装端点保护的虚拟机,并选择安装 Microsoft Antimalware 解决方案:
[外链图片转存中…(img-xsasRH5r-1751164598841)]
在虚拟机上安装端点保护
- 点击创建(Create),然后你可以设置一些附加设置,如排除文件和位置、文件和扩展名,以及进程。保持默认设置并点击“确定”(OK),然后点击“创建”(Create)以安装端点保护到虚拟机上:
[外链图片转存中…(img-FU9FQRbc-1751164598842)]
在虚拟机上安装端点保护
操作管理套件 - 安全与合规
操作管理套件(Operations Management Suite,OMS) 是微软的一款混合云和数据管理工具,托管在 Azure 中,旨在从一个地方管理本地和 Azure 基础设施。通过 OMS,你可以轻松管理大型混合环境。除了 Azure,OMS 还可以管理和保护 AWS、Windows Server、Linux、VMware 和 OpenStack 环境及机器。OMS 提供不同的管理解决方案,其中之一是安全性与合规性解决方案。
为了管理和保护虚拟机(VM)和服务器,需要安装一个代理程序,该代理程序会收集所有用于 OMS 的数据。为了从 Azure 收集数据,你需要创建一个日志分析工作区(Log Analytics Workspace)。当你将 Azure 订阅与 OMS 关联时,工作区会自动创建。
你可以从以下网址将 OMS 与 Azure 订阅关联:www.microsoft.com/en-us/cloud-platform/operations-management-suite
。
你也可以从 Azure 门户创建日志分析工作区。有关如何创建此工作区的更多信息,请参考:docs.microsoft.com/en-us/azure/log-analytics/
。
要安装代理并将 Azure 虚拟机连接到 OMS,你可以从 Azure 门户打开日志分析工作区,点击左侧菜单中的虚拟机,并将虚拟机连接到该工作区:
[外链图片转存中…(img-rW2CTODI-1751164598842)]
将虚拟机连接到 OMS
数据现在将在 OMS 门户中显示。OMS 提供一个**安全性和审计(Security and Audit)**仪表板,展示以下信息:
-
安全领域(Security Domains):这将提供关于安全记录的信息,如恶意软件评估、网络安全、身份和访问信息
-
显著问题:这将提供当前威胁和问题的信息
-
检测(预览):通过可视化警报来帮助识别攻击模式
-
威胁情报(Threat Intelligence):这可视化了具有不同威胁的服务器总数,并显示来自哪些 IP 地址的威胁
[外链图片转存中…(img-goyYjqCL-1751164598842)]
OMS 安全性和审计仪表板
总结
本章我们讨论了如何设计治理机制和政策以管理 Azure 资源,并如何使用适当的安全解决方案来管理安全风险。
本章内容结束后,我们将进入下一章,探讨使用平台服务设计解决方案的目标。第一章将讨论人工智能、物联网和 Azure 媒体服务。
问题
请回答以下问题,测试你对本章信息的理解。你可以在本书末尾的*评估(Assessments)*部分找到答案。
-
你能否通过 Azure AD 特权身份管理为用户授予符合条件的角色访问权限?
-
是的
-
无
-
-
您可以使用操作管理套件管理本地和 Azure 基础设施吗?
-
是的
-
不是
-
-
您希望检查您的 Azure 订阅中的所有虚拟机是否都使用托管磁盘。您可以使用 Azure 资源策略来实现这一点吗?
-
是的
-
不能
-
深入阅读
您可以查看以下链接,了解本章中涵盖的主题的更多信息:
-
在 Azure 门户中开始使用基于角色的访问控制:
docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-what-is
-
使用基于角色的访问控制管理 Azure 订阅资源的访问权限:
docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-configure
-
创建自定义角色以进行 Azure 基于角色的访问控制:
docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-custom-roles
-
什么是 Azure 策略?:
docs.microsoft.com/en-us/azure/azure-policy/azure-policy-introduction
-
什么是 Azure AD 特权身份管理?:
docs.microsoft.com/en-us/azure/active-directory/active-directory-privileged-identity-management-configure?toc=%2fazure%2factive-directory%2fprivileged-identity-management%2ftoc.json
-
Azure 安全中心文档:
docs.microsoft.com/en-us/azure/security-center/
-
Azure 安全中心威胁情报报告:
docs.microsoft.com/en-us/azure/security-center/security-center-threat-report
-
通过 Azure 安全中心管理端点保护问题:
docs.microsoft.com/en-us/azure/security-center/security-center-install-endpoint-protection
-
什么是操作管理套件 (OMS)?:
docs.microsoft.com/en-us/azure/operations-management-suite/operations-management-suite-overview
第十二章:人工智能、物联网和媒体服务
在上一章中,我们讨论了治理和策略,例如 Azure 中的标准和自定义角色、何时使用 Azure 基于角色的访问安全,以及 Azure 资源策略。
在本章中,你将学习 Azure 为人工智能、物联网以及流媒体内容提供的各种功能和能力。通过本章的学习,你将掌握如何使用 Azure 认知服务、Azure Bot 服务、IoT Hub、Azure 媒体服务等设计最先进的解决方案。
本章将涵盖以下主题:
-
Azure 认知服务
-
Azure Bot 服务
-
Azure 机器学习
-
IoT Hub、事件中心和 IoT Edge
-
Azure 流分析
-
Azure 时间序列洞察
-
Azure 媒体服务
技术要求
本章使用以下工具作为示例:
- Visual Studio 2017:
www.visualstudio.com/downloads/
本章的源代码可以从以下链接下载:
github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%2012
Azure 认知服务
借助 Azure 认知服务,你可以创建现代化和智能的应用程序。它提供各种人工智能和机器学习 API 和 SDK,可在应用程序中使用,使其更加智能,例如语音和面部识别、语音和语言理解等。
认知服务是 Azure 人工智能产品的一部分。它提供可直接使用的 API 以及需要训练的 API,这些 API 可以用于创建自定义的人工智能解决方案。
这些 API 被分为多个类别,如视觉、语音、语言、知识和搜索 API。这些类别以及可用的 API 在接下来的章节中将进行更详细的介绍。
认知服务还提供一组仍处于实验阶段的 API 和 SDK。这些服务被归类为实验室服务。在写作本书时,实验室部分提供手势、事件跟踪、学术知识、本地洞察、知识探索服务和实体链接服务。
可用的服务和 API
Azure 认知服务提供以下 API 和服务:
-
视觉:
-
计算机视觉 API:此 API 提供图像处理和识别。你可以使用此 API 对图像进行分类、根据内容标记图像、识别手写文本、标记成人内容、裁剪图像、检测人脸等。
-
内容审核员:内容审核员提供自动审核功能,例如检测视频中的潜在成人或不雅内容。它提供了审核工具,自动审核可以与人工参与结合使用。
-
自定义视觉服务:此 API 提供一个工具,用于构建自定义图像分类器。它可以用于识别图像,例如某些花朵或狗等。此 API 需要通过上传图像来进行训练。
-
面部 API:此 API 可以检测图像中的人脸。它可以从图像中提取信息,如姿势、面部毛发、眼镜、性别、年龄和头部姿势。您可以使用此 API 进行人脸验证、人脸分组、人脸识别以及查找相似的人脸。
-
情感 API:此 API 是面部 API 的一部分,也可以作为独立 API 使用。您可以使用它检测图像中人们的情感。
-
视频索引器:此 API 可以使用各种人工智能技术从您的视频中提取见解。此 API 也用于 Azure 媒体服务,稍后在本章中将更详细地介绍。
-
-
语音:
-
微软语音 API:此 API 提供语音功能,如语音命令控制和语音转录与听写。它提供语音转文本功能,将人类语音转换为文本,可用于通过语音控制应用程序;以及文本转语音功能,将文本转换为音频流,可在应用程序中播放。
-
自定义语音服务:此服务使您能够创建定制的语言模型和声学模型,旨在特定用户群体或特定环境中的应用程序。您可以训练 API 学习产品名称或行话。
-
语音识别 API:此 API 提供语音验证功能,可以通过语音命令进行身份验证。它还提供语音识别功能,可以通过声音在一组人群中识别某个人。
-
翻译语音 API:此 API 提供将对话语音从一种语言翻译成另一种语言文本的服务。
-
-
语言:
-
语言理解(LUIS):LUIS 可以从文本中提取含义。它使用机器学习训练 API。
-
必应拼写检查 API:提供拼写检查和上下文语法工具。它基于必应的所有网页搜索,并使用机器学习动态训练 API。
-
语言分析 API:此 API 提供三种自然语言处理工具,例如句子分割与标记化、词性标注和句法分析。
-
文本分析 API:此 API 提供对原始文本的自然语言处理,并包括此处提到的功能。其中一个功能是语言检测,支持最多 120 种语言。它返回一个语言代码以及一个表示分析强度的得分。它还提供关键词提取功能,通过提取关键短语来识别句子的要点,同时提供情感分析,可以用来分析人们对某些事物的看法。
-
翻译文本 API:此 API 可用于提供超过 60 种不同语言的文本翻译。
-
Web 语言模型 API:此 API 提供多种标准自然语言处理任务。模型是使用 Bing 数据在 Web 规模上训练的。
-
-
知识:
-
自定义决策服务:你可以使用此 API 为用户创建个性化体验。它可以个性化网站或门户上的内容或视频。你可以用它来进行广告投放和商店中的商品排名。
-
QnA Maker:它提供了一个 Web API,可以训练 AI 模型以更自然、对话的方式回答用户的问题。可以通过常见问题、URL/文档等进行训练。
-
-
搜索:
-
Bing 搜索 API:此 API 包含多个 API 和功能。它包括所有 Bing 搜索 API,例如 Bing 网页搜索 API、Bing 图像搜索 API、Bing 视频搜索 API 和 Bing 新闻搜索 API。
-
Bing 自动建议 API:此 API 在你输入一个单词的前几个字符时提供建议。你可以用它来填充搜索框下拉列表。
-
Bing 自定义搜索 API:此 API 提供量身定制的搜索体验。你可以根据兴趣定制结果。因此,不需要让用户通过页面来搜索相关内容,你可以在提供给用户之前先过滤掉不相关的内容。
-
Bing 实体搜索 API:此 API 提供的搜索结果包括可以用于旅游景点等实体和地点。
-
要查看所有认知服务 API 的完整概述,请参考:docs.microsoft.com/en-us/azure/#pivot=products&panel=ai
。想要开始使用认知服务?你可以参考以下页面获取不同 API 的免费试用密钥:azure.microsoft.com/en-us/try/cognitive-services/
。这些试用计划有速率限制。Azure 门户有付费服务,你也可以在其中创建认知服务 API。
使用计算机视觉 API
在本示例中,我们将创建一个使用计算机视觉 API 分析图片的应用程序。
首先,你需要从 docs.microsoft.com/en-us/azure/cognitive-services/Computer-vision/Vision-API-How-to-Topics/HowToSubscribe
获取一个 API 订阅密钥。
接下来,你需要打开 Visual Studio 2017。
- 点击 文件 | 新建 | 项目,在新建项目窗口中,选择 控制台应用程序。为项目命名并点击 确定:
[外链图片转存中…(img-vGLmZ3kb-1751164598842)]
创建控制台应用程序
- 创建一个新的类,命名为
Extensions.cs
,并将代码替换为以下内容:
using System;using System.Collections.Generic;namespace PacktCustomerVisionAPI{ static class Extensions { public static void ForEach(this IEnumerable ie, Action action) { foreach (var i in ie) { action(i); } } }}
- 将以下命名空间添加到
Main.cs
中:
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;using System.Text;
- 向
Main.cs
添加以下变量。将subscriptionKey
的值替换为有效的订阅密钥:
// Fill in the subscription Key const string subscriptionKey = \"7c98f3e0aa3a4a729f69b20583a0bc18\"; //API Url in West Central US Region const string uriBase = \"https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/models/celebrities/analyze\";
- 使用以下代码替换
Main
方法:
static void Main(string[] args) { Console.Write(\"Enter the path to an celebrity image: \"); string imageFilePath = Console.ReadLine(); MakeAnalysisRequest(imageFilePath); Console.WriteLine(\"\\nPlease wait a moment for the results to appear. Then, press Enter to exit ...\\n\"); Console.ReadLine(); }
- 添加以下方法以创建请求,并将其发送到该类的客服 API:
static async void MakeAnalysisRequest(string imageFilePath){ HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add(\"Ocp-Apim-Subscription-Key\", subscriptionKey); string requestParameters = \"model=celebrities\"; string uri = uriBase + \"?\" + requestParameters; HttpResponseMessage response; byte[] byteData = GetImageAsByteArray(imageFilePath); using (ByteArrayContent content = new ByteArrayContent(byteData)) { content.Headers.ContentType = new MediaTypeHeaderValue(\"application/octet-stream\"); response = await client.PostAsync(uri, content); string contentString = await response.Content.ReadAsStringAsync(); Console.WriteLine(\"\\nResponse:\\n\"); Console.WriteLine(JsonPrettyPrint(contentString)); }}
- 在之前的方法下方添加以下方法以导入名人图像:
static byte[] GetImageAsByteArray(string imageFilePath){ FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read); BinaryReader binaryReader = new BinaryReader(fileStream); return binaryReader.ReadBytes((int)fileStream.Length);}
- 添加最后一个方法,以便在之前的方法下方显示 JSON 结果:
static string JsonPrettyPrint(string json) { if (string.IsNullOrEmpty(json)) return string.Empty; json = json.Replace(Environment.NewLine, \"\").Replace(\"\\t\", \"\"); string INDENT_STRING = \" \"; var indent = 0; var quoted = false; var sb = new StringBuilder(); for (var i = 0; i sb.Append(INDENT_STRING)); } break; case \'}\': case \']\': if (!quoted) { sb.AppendLine(); Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING)); } sb.Append(ch); break; case \'\"\': sb.Append(ch); bool escaped = false; var index = i; while (index > 0 && json[--index] == \'\\\\\') escaped = !escaped; if (!escaped) quoted = !quoted; break; case \',\': sb.Append(ch); if (!quoted) { sb.AppendLine(); Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING)); } break; case \':\': sb.Append(ch); if (!quoted) sb.Append(\" \"); break; default: sb.Append(ch); break; } } return sb.ToString(); }
- 现在,下载一个名人图像,运行应用程序,并提供完整的图像路径。
如需详细了解计算机视觉 API 的所有功能,可以参考:docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/home#Categorizing
。
Azure Bot 服务
Azure Bot 服务提供了一个完整的环境来构建和部署 Bots。Bot 是一种可以与用户进行对话互动的应用程序。它可以通过语音、文本和卡片与用户进行沟通。你可以创建能够通过自由形式的方式与用户沟通的 Bots,例如用户在聊天框中提问,Bot 给出回答,或者你也可以使用更为引导的方式,在这种方式下,你向用户提供选择项,并根据他们做出的选择采取相应的行动。
你可以在各种类型的应用程序中集成 Bots,例如自定义 Web 应用程序和 Azure Functions。你还可以创建集成到 Azure SaaS 应用程序中的 Bots。Azure Bot 服务提供多种渠道,可以将你的 Bot 连接到 Skype、Facebook、Teams、Slack、SMS 等。Bots 可以通过 .NET 或 Node.js 创建,并且提供了五种不同的模板来帮助你快速入门开发。你可以选择基本 Bot、收集用户输入的表单 Bot、利用 LUIS 的语言理解 Bot、用于常见问题的 Bot,以及能够提醒用户事件的 Bot。
Azure Bot 服务提供以下两种不同的定价方案:
-
免费:此方案提供标准通道的无限消息数量,以及每月 10,000 条消息在高级通道上(例如 Microsoft Teams 和 Skype)。
-
标准 S1:此方案提供标准通道的无限消息数量,并且你为每次发送 1,000 条消息的高级通道付费。此定价方案还提供 SLA。
你可以通过 Azure 门户或 Visual Studio 2017 使用 Bots。Microsoft 提供了一个完整的构建和部署 Bots 的解决方案,这个解决方案包含在 .NET 的 Bot Builder SDK 中。你需要下载可以安装在 Visual Studio Template
文件夹中的模板。该模板将成为开发 Bots 的起点。
从 Azure 门户创建一个 Bot
在本示例中,我们将创建一个可以从 Azure 门户部署到 Web 应用中的 Bot:
-
通过打开以下链接进入 Azure 门户:
portal.azure.com/
。 -
点击“新建”,并在搜索栏中键入
Web App Bot
。 -
输入以下设置:
[外链图片转存中…(img-92EEPvNo-1751164598842)]
Web 应用程序 Bot 设置
- 点击“Bot 模板”,选择“表单模板”,然后点击“选择”:
[外链图片转存中…(img-UNQmBe97-1751164598842)]
选择 Bot 模板
- 创建后,你可以在 Azure 门户中导航到 Bot。当你点击左侧菜单中的“构建”时,你可以在在线代码编辑器中对代码进行更改。在线编辑器中集成了一些工具,如 Git、Kudu 等。你也可以下载 ZIP 文件,在 Visual Studio 中进行更改,并配置持续部署:
[外链图片转存中…(img-gTOvqVEL-1751164598842)]
机器人构建设置
- 要测试机器人,请在左侧菜单中点击“Web Chat 中的测试”。这个机器人提供了一个三明治点单服务示例,采用引导式方法。所以,如果你在消息框中输入任何内容,你将看到一组可以选择的三明治选项。选择一个后,你可以选择三明治的长度:
[外链图片转存中…(img-IbKim6E9-1751164598842)]
机器人示例
- 要进行渠道注册,可以点击左侧菜单中的“渠道”。在这里,你可以注册你希望你的 Bot 连接的不同渠道:
[外链图片转存中…(img-XqqITk9o-1751164598843)]
不同的机器人渠道
如需了解如何使用 Visual Studio 2017 创建机器人的更多信息,可以参考docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-quickstart
。
Azure 机器学习
如今我们每个人都在产生大量数据。过去产生的数据可以为我们提供未来的宝贵洞察。
机器学习提供了一套算法,可以自动将复杂的数学计算应用于大数据,并最终从这些数据中进行学习。这是一种数据科学技术,可以通过预测结果和趋势来预测未来。使用该技术的应用程序可以从数据和经验中学习,而无需显式编程。机器学习模型可以利用大量历史数据进行训练,应用程序可以基于这些数据采取行动。
欺诈检测、自动驾驶汽车和网站上的个人推荐都是使用机器学习的应用实例。人工智能和机器学习的可能性是无限的,并且在不久的将来将对我们的日常生活产生巨大影响。
Azure 机器学习为数据科学家和开发人员提供了一套工具和能力,帮助他们在应用程序中利用机器学习。提供以下工具和功能:
-
机器学习工作室:机器学习工作室是一个拖放工具,你可以用它来创建预测模型。你还可以用它来部署和测试你的解决方案。你可以创建实验,并将数据集和数据分析活动(称为模块)拖放到其中。你可以用数据集中的部分数据来训练实验,当模型训练好后,你可以将其转化为预测性实验,并将其发布为 Web 服务。
-
Azure 机器学习工作台:在写本书时,这个工具仍处于预览阶段。它为数据科学家提供了一个集成的端到端数据科学解决方案,帮助数据科学家准备数据、开发体验并将模型部署到 Azure 上。
-
Azure AI 画廊:AI 画廊提供了各种社区驱动的解决方案,这些解决方案利用了 Azure 的不同 AI 功能。你可以将这些解决方案用于学习目的,或作为开发自定义解决方案的资源。
-
机器学习模块:你可以在实验中使用现成的机器学习模型来分析数据。包括机器学习算法、数据输入输出模块、数据转换模块、文本分析模块以及微软特有的模块,后者包含来自 Bing 和 Xbox 的算法。
-
数据科学虚拟机:Azure 提供了配置用于数据科学工作负载的虚拟机。有 Windows 和 Linux 数据科学虚拟机以及深度学习虚拟机。你还可以为数据科学工作负载部署容器:
[外链图片转存中…(img-xqN9EsiC-1751164598843)]
机器学习工作室
数据科学是一项专业技能;然而,微软提供了一系列视频,可以帮助你对数据科学有一些基本的了解。对于这些视频系列,你可以参考:docs.microsoft.com/en-us/azure/machine-learning/studio/data-science-for-beginners-the-5-questions-data-science-answers#other-videos-in-this-series
。
Azure IoT 中心
在物联网(IoT)解决方案中,设备将大量数据发送到 Azure 进行进一步处理。IoT 中心用于安全连接这些设备,并将来自设备的消息路由到 Azure 中的不同资源,以便进一步处理。
IoT 中心提供以下功能:
-
双向通信:它提供设备与 Azure 之间的双向通信功能,如单向消息传递、文件传输和请求-回复消息传递。设备可以将数据发送到 Azure IoT 中心,反之,IoT 中心也可以将数据发送到设备。它支持多种通信协议,如 HTTPS、AMQP 和 MQTT,并提供内置的声明性消息路由功能,将消息路由到其他 Azure 服务。
-
安全连接:设备与 IoT Hub 之间的通信可以通过每个设备的安全密钥或 X.509 证书进行加密。Azure IoT Hub 不会主动开启任何连接,所有连接均由已连接的设备发起。IoT Hub 会将消息存储在每个设备的队列中 2 天,等待设备连接。它使用 Azure AD 进行用户身份验证和授权。
-
扩展性:IoT Hub 提供了巨大的扩展性,因为它可以扩展到数百万个同时连接的设备和每秒数百万个事件。
-
监控:它在 Azure 中提供监控解决方案。IoT Hub 与 Azure Monitor 集成,为你提供关于设备管理操作和连接事件的详细信息。
Azure IoT Hub 提供 Azure IoT SDK,其中包括设备 SDK,可用于创建在 IoT 设备上运行并向 IoT Hub 发送数据的应用程序。该 SDK 还提供了服务 SDK,可用于管理 IoT Hub,并提供 Azure IoT Edge,后者将在本章稍后详细讨论。
IoT Hub 提供以下定价层级:
-
免费:此方案每天提供最多 8000 条消息。此层级最适合测试场景。
-
标准 S1:此方案每天提供最多 40 万条消息,适用于生成少量数据的场景。
-
标准 S2:此方案每天提供最多 600 万条消息,适用于大数据量的场景。
-
标准 S3:此方案每天提供最多 3 亿条消息,适用于大数据量的场景。
除了 IoT Hub,Azure 还提供了 Azure Event Hub。Azure Event Hub 提供类似 Azure IoT Hub 的功能,不同之处在于 IoT Hub 提供了更多的高级功能。如果你的架构需要云到设备的通信或按设备的安全性和性能管理,IoT Hub 是最佳解决方案。
Event Hub 在下一节中将详细介绍。Azure 还提供了 IoT Edge,提供额外的功能,并将在下一节中讨论:
[外链图片转存中…(img-Fy0g6qoU-1751164598843)]
IoT 架构概览
Azure Event Hub
Azure Event Hub 旨在处理由设备和服务生成的数据流的高吞吐量数据输入。它提供了一个遥测数据摄取服务,能够收集、转换并存储数百万个事件。
它提供了类似 IoT Hub 的功能,但也存在差异。选择使用哪种解决方案取决于具体场景。如果你的解决方案只要求高吞吐量的数据输入,Azure Event Hub 比 IoT Hub 更具成本效益。但是,如果你的解决方案需要双向通信,例如从云端向设备发送数据,IoT Hub 是更好的选择。
为了在 IoT 架构中做出正确的决策,你可以查看以下差异:
-
设备协议支持:Azure Event Hub 支持 HTTPS、AMQP 和 AMQP,而 IoT Hub 支持 MQTT、通过 WebSockets 的 MQTT、AMQP、通过 WebSockets 的 AMQP 和 HTTPS,IoT Hub 还支持文件上传。
-
通信模式:Event Hub 仅支持事件流入,而 IoT Hub 不仅支持设备到云的通信,还支持云到设备的通信。
-
安全性:Event Hub 支持共享访问策略,而 IoT Hub 支持每个设备身份和可撤销的访问控制。
-
监控:IoT Hub 提供完整的监控功能,而 Event Hub 仅提供汇总指标。
-
规模:IoT Hub 可以扩展到支持数百万个同时连接的设备和每秒数百万个事件,而 Event Hub 只能扩展到每命名空间 5,000 个 AMQP 连接。
-
SDK:Event Hubs 支持 .NET 和 C,而 IoT Hub 支持 .NET、C、Node.js、Java 和 Python。
关于 Event Hub 和 IoT Hub 之间差异的完整概述,可以参考:docs.microsoft.com/en-us/azure/iot-hub/iot-hub-compare-event-hubs
。
Azure Event Hub 提供以下三种不同的定价层:
-
基础:提供最多 20 个吞吐量单元,每个单元支持 1 MB/s 的流入和 2 MB/s 的流出。最大消息大小为 256 KB。消息保留期为 1 天,1 个消费者组和 100 个代理连接。
-
标准:在基本功能的基础上,标准计划提供更低的吞吐量单元和消息费用。它提供 20 个消费者组和 1,000 个代理连接。
-
专用:为客户提供专用环境。提供最大消息大小 1 MB 和 50 个吞吐量单元,保留期为 7 天,支持 25,000 个代理连接。
Azure IoT Edge
Azure IoT Edge 是 Azure IoT Hub 的附加功能,安装在本地网络的边缘、DMZ 或公司网络内。消息可以发送到 Azure IoT Edge,而不是 Azure,因为它不需要通过本地网络以外的区域,因此发送时间更短。数据也可以在设备上存储和分析。
你可以在 Azure 门户的 IoT Hub 设置页面中注册 IoT Edge。然后可以在 IoT Edge 设备上安装 IoT Edge 运行时。设备可以是 Windows 或 Linux 机器、容器,或者是 Raspberry Pi 等。这个 IoT Edge 设备可以连接到 Azure IoT Hub,从设备收集数据,并将其发送到 IoT Hub。
Azure 流分析
Azure Stream Analytics 是 Azure IoT 套件的一部分,提供一个用于事件处理和实时分析的管道,适用于来自各种来源的数据流。您可以将其用于需要实时分析的数据场景,例如股票分析、欺诈检测,或者分析来自大量传感器的数据。
数据可以来自各种来源,例如自定义应用程序、传感器、Azure IoT Hub 和 Azure Event Hubs,也可以来自 Blob 存储。Stream Analytics 可以处理每秒高达 1 GB 的数据摄取。您可以创建一个 Stream Analytics 作业,在其中配置数据源。您还可以创建一个 转换,使用类似 SQL 的语言查询数据中的模式或关系。
您可以对数据源中的数据进行过滤、排序或聚合。最后,数据会被发送到输出源,可以是 Azure Data Lake、Power BI(用于创建仪表板)、使用机器学习,或者将其存储在 SQL 数据仓库中:
[外链图片转存中…(img-wahbgseD-1751164598843)]
Azure Stream Analytics
Azure 时间序列洞察
Time Series Insights 提供一个门户,可以用于从您的物联网数据中获取有价值的洞察。它为从 IoT Hub 和 Event Hubs 发送的大量数据提供数据库存储。它可以轻松地结合不同类型的数据,如元数据和遥测数据,并对这些数据进行可视化。
Time Series Insights 提供以下功能:
-
集成:它提供与 Azure IoT Hub 和 Event Hub 的开箱即用集成。
-
数据存储:Time Series Insights 将数据存储在 SSD 和内存中,最长可保存 400 天。
-
可视化:提供一个专门的门户,使用 TSI Explorer 可视化您的数据。
-
查询服务:Time Series Insights 在 TSI Explorer 内提供查询服务,并提供可以从自定义应用程序调用的 API。通过将 Time Series Insights 集成到您的应用程序中,您可以将其作为后端来索引、存储和聚合数据。然后,您可以在其基础上构建自定义可视化工具。
[外链图片转存中…(img-JZUBFHPW-1751164598843)]
Azure 时间序列洞察 TSI Explorer
Azure Media Services
Azure Media Services 提供安全且高质量的服务,以便将内容流式传输到各种设备。它可以流式传输视频或音频文件,并提供 REST API 来上传、存储和编码包内容。音频和视频可以通过按需流媒体或直播流传输到客户端,如电视、计算机和移动设备。
Azure Media Services 支持以下流程:
-
上传:您可以通过 Azure 门户、.NET SDK、REST API 上传视频,也可以从 Blob 存储中复制文件。
-
编码:AMS 提供两种不同的编码服务级别,如媒体编码器标准版和媒体编码器高级工作流版。前者提供编码服务,用于编码视频和音频文件,适用于多种设备播放,如智能手机和个人电脑。后者则为需要更复杂工作流的视频和音频文件提供编码服务。它还提供了一个工作流设计器工具,可以用于合并多个输入文件,或使用动态值和参数创建基于决策的工作流。它还支持广播和电影所需的格式。
-
安全:您可以使用动态加密(如高级加密标准(AES-128)或其他主要数字版权管理(DRM)系统)来保护您的媒体。它还为授权客户端提供 AES 密钥和 DRM 许可证。您可以使用 IP 限制保护您的媒体服务频道,确保用户只能从允许的 IP 地址上传媒体内容,并且您可以使用 Azure AD 身份验证访问 Azure Media Services API。AMS 仍然支持使用令牌的 Azure 访问控制服务身份验证模型,但该模型将在不久的将来被弃用,因此 Azure AD 身份验证现在是首选的身份验证方法。
-
分析:AMS 提供媒体分析服务,以从媒体内容中提取洞察力。它提供了一系列来自 Azure Cognitive Services 的语音和计算机视觉 API。以下部分将更详细地描述这些内容。
Azure Media Analytics
Azure Media Analytics 使用各种认知服务 API 来分析媒体内容。它提供以下功能:
-
索引器:通过使用索引器,您可以创建闭幕字幕轨道,并使媒体文件可搜索。撰写本文时,索引器提供了两种不同版本的服务,其中 Azure Media Indexer 2(仍在预览中)具有更快的索引速度和更广泛的语言支持。
-
延时摄影:该功能提供延时摄影能力,并能够从第一人称或运动摄像机内容中创建稳定的视频。
-
运动检测器:该功能提供运动检测,可以用于静态摄像头录像,识别视频中发生运动的部分。它生成一个元数据文件,包含运动发生的时间戳。此功能对于安全摄像头录像非常有用。
-
视频总结:该功能可以通过生成来自视频不同部分的片段来为视频创建摘要。这些片段可以作为视频不同部分的概述。
-
光学字符识别:Azure Media 光学字符识别(OCR)可以将视频中的文本内容转换为可编辑和可搜索的数字文本。例如,您可以使用此功能使 PowerPoint 演示文稿视频内容在搜索引擎中可搜索。
-
可扩展的人脸遮挡:您可以使用可扩展的人脸遮挡功能,自动模糊视频内容中的人物面孔。
-
内容审核:Azure 内容审核提供自动审核功能,例如检测视频中的可能成人内容和敏感内容。它提供了审核工具,自动审核可以与人工参与结合使用。
使用 Azure 媒体分析索引器
在以下示例中,我们将使用 Azure 媒体分析媒体索引器为视频创建字幕文件。微软建议使用 Azure 媒体分析,而不是使用认知服务的视频 API,因此我们将在此处使用 Azure 媒体分析。我们将使用 Azure 媒体索引器 2 预览版媒体处理器(MP)的语音转文本功能,从控制台应用程序为视频创建字幕。
对于本示例,你需要在 Azure 门户中创建一个媒体服务账户。有关如何创建账户的完整教程,请参阅:docs.microsoft.com/en-us/azure/media-services/media-services-portal-create-account
。
创建 Azure 媒体服务账户后,可以将 PacktIndexer
文件夹从 GitHub 复制到 C:
驱动器。你可以从以下网址下载视频并将其与 JSON 文件一起放入 InputFiles
文件夹中:peach.blender.org/download/
。这些文件将用于示例。还需要在 PacktIndexer
文件夹中创建一个名为 OutputFiles
的新文件夹。
接下来,打开 Visual Studio 2017 并创建一个新项目。
- 点击 文件 | 新建 | 项目,在新建项目窗口中选择 控制台应用程序。为项目命名并点击 确定:
[外链图片转存中…(img-YsbM3pje-1751164598843)]
创建一个新的控制台应用程序
-
安装
windowsazure.mediaservices.extensions
和windowsazure.mediaservices
NuGet 包。 -
第一步是将 Azure AD 认证添加到项目中。对于本演示,我们使用 服务主体认证。你可以在 Azure 门户的 Azure 媒体服务账户设置的访问页面轻松完成此操作:
[外链图片转存中…(img-sCsVBTE0-1751164598843)]
创建一个应用服务主体
- 从 Azure 门户复制 Azure AD 租户名称、API URL、客户端 ID 和客户端密钥,并将它们添加到以下代码中:
var tokenCredentials = new AzureAdTokenCredentials(\"{YOUR Azure AD TENANT DOMAIN HERE}\", new AzureAdClientSymmetricKey(\"{YOUR CLIENT ID HERE}\", \"{YOUR CLIENT SECRET}\"), AzureEnvironments.AzureCloudEnvironment); var tokenProvider = new AzureAdTokenProvider(tokenCredentials);
- 在认证代码下方的
Main
方法中添加以下代码:
_context = new CloudMediaContext(new Uri(\"https://packtmediaservices.restv2.westeurope.media.azure.net/api/\"), tokenProvider); var video = @\"C:\\PacktIndexer\\InputFiles\\BigBuckBunny.mp4\"; var config = @\"C:\\PacktIndexer\\InputFiles\\config.json\"; var asset = RunIndexingJob(video, config); DownloadAsset(asset, @\"C:\\PacktIndexer\\OutputFiles\");
- 添加以下方法以创建和运行
Index Job
:
static IAsset RunIndexingJob(string inputMediaFilePath, string configurationFile) { IAsset asset = CreateAssetAndUploadSingleFile(inputMediaFilePath, \"Packt Indexing Input Asset\", AssetCreationOptions.None); IJob job = _context.Jobs.Create(\"Packt Indexing Job\"); string MediaProcessorName = \"Azure Media Indexer 2 Preview\"; var processor = GetLatestMediaProcessorByName(MediaProcessorName); string configuration = File.ReadAllText(configurationFile); ITask task = job.Tasks.AddNew(\"Packt Indexing Task\", processor, configuration, TaskOptions.None); task.InputAssets.Add(asset); task.OutputAssets.AddNew(\"Packt Indexing Output Asset\", AssetCreationOptions.None); job.StateChanged += new EventHandler(StateChanged); job.Submit(); Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None); progressJobTask.Wait(); if (job.State == JobState.Error) { ErrorDetail error = job.Tasks.First().ErrorDetails.First(); Console.WriteLine(string.Format(\"Error: {0}. {1}\", error.Code, error.Message)); return null; } return job.OutputMediaAssets[0]; }
- 添加以下方法以创建
Asset
:
static IAsset CreateAssetAndUploadSingleFile(string filePath, string assetName, AssetCreationOptions options) { IAsset asset = _context.Assets.Create(assetName, options); var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath)); assetFile.Upload(filePath); return asset; }
- 添加以下方法以在索引后下载
Asset
:
static void DownloadAsset(IAsset asset, string outputDirectory) { foreach (IAssetFile file in asset.AssetFiles) { file.Download(Path.Combine(outputDirectory, file.Name)); } }
- 添加以下代码以获取处理视频的
MediaProcessor
:
static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName) { var processor = _context.MediaProcessors .Where(p => p.Name == mediaProcessorName) .ToList() .OrderBy(p => new Version(p.Version)) .LastOrDefault(); if (processor == null) throw new ArgumentException(string.Format(\"Unknown media processor\", mediaProcessorName)); return processor; }
- 最后,添加以下代码以在控制台中显示进度:
static private void StateChanged(object sender, JobStateChangedEventArgs e) { Console.WriteLine(\"Job state changed event:\"); Console.WriteLine(\" Previous state: \" + e.PreviousState); Console.WriteLine(\" Current state: \" + e.CurrentState); switch (e.CurrentState) { case JobState.Finished: Console.WriteLine(); Console.WriteLine(\"Job is finished.\"); Console.WriteLine(); break; case JobState.Canceling: case JobState.Queued: case JobState.Scheduled: case JobState.Processing: Console.WriteLine(\"Please wait...\\n\"); break; case JobState.Canceled: case JobState.Error: IJob job = (IJob)sender; break; default: break; } }
- 运行应用程序,索引完成后,你应该会在
output
文件夹中根据 JSON 输入文件的值找到WebVtt
和ttml
文件。
在这个例子中,我们创建了闭字幕文件。你也可以调用其他方法来为视频创建索引。以下网站为你提供了更多关于前面描述的其他功能的示例:azuremedialabs.azurewebsites.net/demos/Analytics.html
。
小结
本章我们讲解了如何利用 Azure 提供的各种 AI 服务来设计解决方案。我们涵盖了 Azure 机器学习、物联网功能和 Azure 媒体服务。
在下一章中,我们将介绍 Azure 提供的不同消息传递功能以及如何设计有效的消息传递架构。
问题
回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案。
-
你正在使用 IoT Hub 设计一个需要处理每天 500 万个事件的 IoT 解决方案。标准 S1 级别是否符合你的需求?
-
是
-
否
-
-
Azure 媒体服务是否在底层使用了各种 Azure 认知服务 API?
-
是
-
否
-
-
在需要 Azure 与设备之间进行双向通信的场景中,是否应该使用 Azure 事件中心?
-
是
-
否
-
进一步阅读
你可以通过以下链接了解更多关于本章所涉及主题的信息:
-
认知服务目录:
azure.microsoft.com/en-us/services/cognitive-services/directory/lang/
-
关于 Bot 服务:
docs.microsoft.com/en-us/bot-framework/bot-service-overview-introduction
-
Azure 云中的机器学习简介:
docs.microsoft.com/en-us/azure/machine-learning/studio/what-is-machine-learning
-
什么是 Azure 机器学习工作室?:
docs.microsoft.com/en-us/azure/machine-learning/studio/what-is-ml-studio
-
在 Azure AI 画廊中共享和发现资源:
docs.microsoft.com/en-us/azure/machine-learning/studio/gallery-how-to-use-contribute-publish
-
Azure 机器学习工作台:
blogs.msdn.microsoft.com/uk_faculty_connection/2017/09/29/azure-machine-learning-workbench/
-
Azure 机器学习工作室算法与模块参考:
docs.microsoft.com/en-us/azure/machine-learning/studio-module-reference/index
-
Azure IoT 套件:
azure.microsoft.com/en-us/suites/iot-suite/
-
Azure IoT Hub 服务概述:
docs.microsoft.com/en-us/azure/iot-hub/iot-hub-what-is-iot-hub
-
事件中心文档:
docs.microsoft.com/en-us/azure/event-hubs/
-
Azure IoT Edge:
docs.microsoft.com/en-us/azure/iot-edge/
-
流分析文档:
docs.microsoft.com/en-us/azure/stream-analytics/
-
Azure 时间序列洞察:
docs.microsoft.com/en-us/azure/time-series-insights/
-
媒体服务文档:
docs.microsoft.com/en-us/azure/media-services/
第十三章:实现消息传递解决方案
在上一章中,我们讨论了如何使用 Azure 提供的各种人工智能服务设计解决方案。我们涵盖了 Azure 机器学习、物联网功能和 Azure 媒体服务。
在本章中,您将学习如何使用 Azure 服务总线、Azure 队列、通知中心、Azure 事件网格以及前几章中介绍的服务(如 Logic Apps 和 Event Hubs)来设计有效的消息传递架构。
以下主题将被涵盖:
-
Azure 存储队列
-
Azure 服务总线
-
Azure 事件网格
-
通知中心
-
设计有效的消息传递架构
技术要求
本章示例使用以下工具:
- Azure PowerShell:
docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-5.1.1
本章的源代码可以通过以下链接下载:
github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%2013
Azure 队列存储
我们在第七章的使用存储解决方案部分简要介绍了 Azure 队列存储。队列存储提供异步消息处理。它提供了一个可靠和持久的消息传递机制,并提供支持 GET/PUT/PEEK 操作的 REST API。消息队列可用于解耦应用程序,从而实现不同应用组件之间的独立扩展。
Azure 队列存储提供以下功能:
-
单个队列的消息最大可达 64 KB。消息在队列中的最大存留时间为 7 天。
-
当请求队列中的消息时,消息可能对其他读取者变得不可见。在此期间,消息会被锁定,其他应用程序无法处理。默认情况下,这种状态会持续 30 秒。
-
消息处理完毕后,应从队列中删除。如果消息没有从请求消息的应用程序中删除,经过 30 秒的不可见时间后,它将再次变得可见。
Azure 服务总线
Azure 服务总线是一个高可靠性、经代理的消息传递系统,适用于集成场景和物联网解决方案。它面向企业应用,提供了中间件技术,如消息队列和发布/订阅消息传递。它解耦了应用程序和服务之间的通信。
Azure 服务总线提供以下主要功能:
-
队列:此功能提供异步、解耦的消息通信,支持应用程序和服务之间的消息传递。它提供先入先出(FIFO)消息投递,每条消息只会被一个消费者接收。消息存储在队列中,因此发送方和消费者无需同时连接到队列。服务总线队列还提供会话,可以使用会话 ID 对消息进行分组。这样,消息可以被隔离并由专门的客户端处理。
-
主题和订阅:此功能与队列相同,不同之处在于可以有多个消费者。它使用发布/订阅模式,消息被发送到主题。应用程序不会直接连接到该主题,而是连接到订阅。然后,订阅连接到主题。订阅可以有过滤器,只订阅一部分消息,称为过滤表达式。
-
WCF 中继:WCF 中继提供了一个网关,使您可以将本地 WCF 服务连接到 Azure,而无需在您的网络上打开防火墙连接。Azure 中继服务已经在第六章《连接混合应用程序》中详细介绍,连接混合应用程序。
有关 Azure Service Bus 功能示例的概览,您可以参考以下 GitHub 页面:github.com/Azure/azure-service-bus/tree/master/samples
。
在不同的关键功能中,Azure Service Bus 提供事务能力。它允许所有针对消息的操作要么成功,要么失败。
Azure Service Bus 提供以下几种层级:
-
基础:此层提供队列和定时消息功能。消息大小最大可达 256 KB。
-
标准:在基础层之上,标准层提供主题和订阅;事务、会话和去重功能也包含在内。
-
高级:在标准层之上,高级层提供最大消息大小为 1 MB。
Azure Event Grid
Azure Event Grid 是 Azure 中的一项服务,支持跨不同 Azure 资源的事件管理。与其在应用程序中创建轮询机制以检查更改,不如在事件发生时,应用程序能够自动收到通知。
Azure Event Grid 提供每秒数百万个事件的吞吐量,并具备 24 小时重试机制。您可以根据发布路径过滤事件,从而仅接收与您的应用程序或资源相关的事件。事件可以通过 Azure 门户配置,无需使用代码即可创建,并被称为内置事件。您还可以创建自定义事件,这些事件可以在您的自定义应用程序、PowerShell 或 CLI 中创建。
Azure 事件网格目前提供以下内置发布者:Azure 订阅、事件中心、自定义主题、IoT Hub、Azure 资源组、Blob 存储、Service Bus 和 V2 存储帐户。对于事件处理程序,事件网格目前提供 Webhook、Azure 自动化、Azure 函数、逻辑应用、事件中心和 Microsoft Flow:
[外链图片转存中…(img-yqshnS5C-1751164598843)]
Azure 事件网格
Azure 事件网格会快速添加新的发布者和事件处理程序,因此请关注 docs.microsoft.com/en-us/azure/event-grid/overview
。
使用 Azure 事件网格路由事件
在此示例中,我们将事件从事件网格路由到 Azure 函数。
首先,我们需要在 Azure 中创建一个新的事件网格主题。要创建此主题,请按以下步骤操作:
-
打开
portal.azure.com/
,导航至 Azure 门户。 -
单击新建,在搜索栏中输入
事件网格主题
。创建一个新的事件网格主题。 -
输入以下设置,然后单击确定:
[外链图片转存中…(img-LXFAjuq1-1751164598844)]
创建事件网格主题
- 接下来,使用以下配置创建一个新的 Azure 函数:
[外链图片转存中…(img-VuT79w2X-1751164598844)]
创建 Azure 函数
- 创建 Azure 函数后,导航到设置,然后单击函数文件:
[外链图片转存中…(img-cmsMjq3I-1751164598844)]
选择 Azure 函数文件
- 单击 + 按钮并选择自定义函数:
[外链图片转存中…(img-5EUKtlgW-1751164598844)]
创建自定义函数
- 在下一个选项卡中,向下滚动并选择事件网格触发器:
[外链图片转存中…(img-0TgV725V-1751164598844)]
选择事件网格触发器模板
- 添加以下设置,然后单击创建:
[外链图片转存中…(img-n8Mh3kIx-1751164598844)]
创建触发器
- 创建触发器后,默认会打开
run.csx
文件。单击顶部菜单中的添加事件网格订阅链接:
[外链图片转存中…(img-Sp0xRunf-1751164598844)]
选择事件网格订阅
- 命名事件订阅,并选择我们之前创建的事件网格:
[外链图片转存中…(img-koEu1Ubs-1751164598844)]
创建事件订阅
-
点击创建;这将创建一个订阅事件网格主题的新事件订阅。
-
打开 PowerShell 并从您的桌面运行以下脚本。这将创建一个自定义事件。您可以查看 Azure 函数日志以获取结果:
Login-AzureRmAccountSelect-AzureRmSubscription -SubscriptionId \"********-****-****-****-***********\"$endpoint = (Get-AzureRmEventGridTopic -ResourceGroupName PacktEventGrid -Name PacktEventGridTopic).Endpoint$keys = Get-AzureRmEventGridTopicKey -ResourceGroupName PacktEventGrid -Name PacktEventGridTopic$eventID = Get-Random 99999#Date format should be SortableDateTimePattern (ISO 8601)$eventDate = Get-Date -Format s#Construct body using Hashtable$htbody = @{ id= $eventID eventType=\"recordInserted\" subject=\"myapp/packtpub/books\" eventTime= $eventDate data= @{ title=\"Architecting Microsoft Solutions\" eventtype=\"Ebook\" } dataVersion=\"1.0\"}#Use ConvertTo-Json to convert event body from Hashtable to JSON Object#Append square brackets to the converted JSON payload since they are expected in the event\'s JSON payload syntax$body = \"[\"+(ConvertTo-Json $htbody)+\"]\"Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{\"aeg-sas-key\" = $keys.Key1}
通知中心
Azure 中的通知中心提供了一种推送通知服务,用于将后端的通知发送到移动设备上。移动设备上的推送通知通常以弹出窗口或对话框的形式显示给用户。用户可以决定是否查看或关闭消息。您可以将推送通知用于各种场景,例如发送 MFA 的代码、从社交媒体发送通知以及发送新闻。
Notification Hubs 提供跨平台通知,提供适用于 iOS、Android 和 Windows 设备的一套 SDK 和 API。通常,应用程序会使用平台通知系统(PNS),这些是专用的基础设施平台。例如,Apple 提供 Apple 推送通知服务,Windows 提供 Windows 通知服务。Notification Hubs 通过提供单一的 API,消除了在应用程序中手动调用不同 PNS 的复杂性,它通过平台独立性、巨大的扩展性、多种传递模式、丰富的遥测等功能简化了这一过程。
Notification Hubs 提供以下层级:
-
Free:此层级每月提供最多 100 万条推送消息,支持 100 个命名空间,每个命名空间有 500 个活动设备,总计支持 100 个中心。
-
Basic:除了免费层外,Basic 层每月提供最多 1000 万条推送消息,支持 100 个命名空间,每个命名空间有 20 万个活动设备。此计划涵盖 SLA,并且还提供有限的遥测功能。
-
Standard:除了 Basic 层,Standard 层每月提供最多 1000 万条推送消息,支持无限个命名空间,每个命名空间有 1000 万个活动设备。它还提供丰富的遥测、定时推送功能、大规模导入和多租户功能。
设计有效的消息传递架构
Azure 提供了多种功能和能力,用于设计和实现消息传递解决方案。为了在 Azure 平台上创建成功的应用程序和解决方案架构,一个有效的消息传递架构至关重要。这将带来强大的解决方案和应用程序,能够充分利用 Azure 平台的扩展能力。同时,它还将为你的应用程序提供高性能,并且实现应用程序之间的解耦。
本书中描述了多个 Azure 资源,你现在应该知道每个资源的功能。接下来的部分将从消息传递和集成的角度再次讲解其中的一些资源。这将为你提供概览,并帮助你在 Azure 平台上设计消息传递和物联网解决方案时做出正确的决策:
-
Azure Functions 与 Logic Apps:你可以将 Logic Apps 想象成由事件触发的工作流,将 Azure Functions 想象成由事件触发的代码。因此,当你的解决方案需要自定义代码或自定义转换时,选择 Azure Functions。当你的解决方案需要连接其他 SaaS 解决方案,如 Office 365、Azure 存储和 SalesForce 时,选择 Logic Apps。它提供了大量的连接器,可以通过 HTTPS 轻松连接。此外,当需要图形化编辑器时,选择 Logic Apps。
-
Azure IoT Hub 与 Azure 事件中心的比较: Azure IoT Hub 提供设备到 Azure 和 Azure 到设备的双向通信。它可以处理每秒数百万事件,并支持多种设备协议,如 MQTT、MQTT over WebSockets、AMQP、AMQP over WebSockets 和 HTTPS,MQTT、MQTT over WebSockets、AMQP、AMQP over WebSockets 和文件上传。因此,如果您的解决方案需要大规模事件处理和双向通信,请选择 Azure IoT Hub。事件中心仅允许设备到 Azure 的单向通信。因此,当您的解决方案仅需要数据摄取时,事件中心可能是更合适和具有成本效益的解决方案。
-
Azure 服务总线与 Azure 存储队列的比较: Azure 服务总线是一个面向企业规模的经纪消息解决方案。它提供了更多的企业消息能力,如事务和会话支持。它还支持更大的消息。Azure 服务总线在高级版中支持最大 1 MB 的消息。Azure 队列存储支持最大 64 KB 的消息。
摘要
在本章中,我们介绍了 Azure 为各种类型的应用程序和解决方案提供的不同消息传递解决方案。您还学习了如何在应用程序中使用正确的消息传递解决方案。这结束了设计平台服务目标的最后一章。
接下来,我们将看一下设计运维目标,这将是本书的最后一个目标。它将从不同的应用程序监控和警报策略开始。
问题
回答以下问题,测试您对本章信息的了解。您可以在本书结尾的评估部分找到答案。
-
您正在为组织设计一个全球移动应用程序,需要每月处理约 1000 万推送消息。您的管理员有监控要求。基本层是否适合您的应用程序?
-
是的
-
不
-
-
您正在为组织设计一个无服务器解决方案,并且需要在解决方案中调用外部 SDK 进行图像处理。Azure 逻辑应用是否是适当的解决方案?
-
是的
-
不
-
-
您正在为组织设计一个消息传递解决方案,并且需要大约 1 MB 大小的消息。您应该使用 Azure 存储队列来解决这个问题吗?
-
是的
-
不
-
进一步阅读
您可以查看以下链接,获取本章涵盖的主题的更多信息:
-
通知中心文档:
docs.microsoft.com/en-us/azure/notification-hubs/
-
Azure 事件网格文档:
docs.microsoft.com/en-us/azure/event-grid/
-
Azure 逻辑应用文档:
docs.microsoft.com/en-us/azure/logic-apps/
-
使用.NET 开始 Azure 队列存储:
docs.microsoft.com/en-us/azure/storage/queues/storage-dotnet-how-to-use-queues
-
向您的 Android 应用添加推送通知:
docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-android-get-started-push
-
向您的 iOS 应用添加推送通知:
docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-ios-get-started-push
-
Azure Logic Apps 文档:
docs.microsoft.com/en-us/azure/logic-apps/
-
Azure Functions 文档:
docs.microsoft.com/en-us/azure/azure-functions
第十四章:应用程序监控和告警策略
在上一章中,我们介绍了如何设计有效的消息传递解决方案,通过涵盖 Azure 服务总线和 Azure 队列存储并结合不同的 Azure 资源,构建有效的消息传递架构。
在本章中,我们介绍了面向运营的设计目标,通过概述 Azure 提供的可用解决方案,涵盖了应用程序和平台监控及告警策略。通过本章的学习,您应该能够在 Azure 平台及您的自定义解决方案和配置中出现问题时,知道何时使用不同类型的解决方案。
以下主题将涵盖:
-
Azure 日志分析
-
Azure 监视器
-
应用程序洞察
-
Azure 服务健康
-
Azure 顾问
-
Azure 网络观察器
Azure 日志分析
Azure 日志分析是一项服务,可以收集并分析来自各种 Azure 资源和本地资源的日志文件。它可以将所有数据收集到一个工作区,并提供查询语言来查询数据。
你可以通过在 Windows 和 Linux 虚拟机上安装代理,将虚拟机中的数据集成到日志分析中,或者也可以连接到 System Center 操作管理器,从现有代理收集遥测数据。大多数 Azure 资源已在日志分析中集成。你只需从 Azure 门户创建一个工作区,即可收集这些资源的数据。然后,你可以使用查询语言直接从工作区查询数据,或者使用可以分析数据的分析工具。分析工具的一些示例包括操作管理套件、Azure 安全中心和应用程序洞察。你还可以将数据导入 Power BI,以创建数据可视化。
数据收集后,将按数据类型组织成数据表。它可以从以下资源收集数据:
-
来自 Azure 监视器的数据可以在日志分析中收集,并使用查询语言进行搜索
-
代理可以安装在 Windows 和 Linux 机器上,将数据发送到日志分析
-
可以将 System Center 操作管理器管理组连接到日志分析,以收集代理的数据
-
应用程序洞察和 Azure 安全中心默认使用日志分析存储数据
-
日志分析提供了可以从 PowerShell 使用的 cmdlet,并且可以在 Azure 自动化 Runbook 中使用
-
它提供了一个 HTTP 数据收集器 API,可以在自定义应用程序中使用,将日志数据发送到日志分析
创建日志分析工作区
创建日志分析工作区的步骤如下:
-
通过打开:
portal.azure.com/
进入 Azure 门户。 -
点击“新建”并在搜索框中输入
Log Analytics
,然后创建一个新的工作区。 -
输入以下设置并点击“确定”:
[外链图片转存中…(img-Kwb0TM6d-1751164598845)]
创建日志分析工作区
-
工作区现在已经创建。
-
现在,你可以将 Azure 资源连接到工作区。例如,选择在第一章中创建的 PacktPub 资源组,并在 Azure 门户中打开设置。点击左侧菜单中的 Activity log:
[外链图片转存中…(img-ni64N2b1-1751164598845)]
Azure 资源组概览面板
- 点击顶部菜单中的 Log Analytics,点击 Add 按钮,选择在前面步骤中创建的工作区并点击 OK:
[外链图片转存中…(img-VwriX4EX-1751164598845)]
选择工作区
-
该资源组的日志现在已发送到 Log Analytics 工作区。
-
当你返回到 Log Analytics 概览面板并点击 View Designer 时,会打开一个面板,你可以在其中创建数据视图:
[外链图片转存中…(img-qNFaDGad-1751164598845)]
Log Analytics 设计器
- 你还可以点击顶部菜单中的 Analytics 按钮,这将打开 Log Analytics 门户。在这里,你可以使用预定义查询或创建自定义查询。在那里,你可以打开一个新标签页并创建一个新查询。你可以添加以下查询来创建一个按严重性划分、按天(过去 7 天)的警报计数的条形图:
Alert | where TimeGenerated > ago(7d)| summarize count() by AlertSeverity, bin(TimeGenerated, 1d)| render barchart kind=unstacked
[外链图片转存中…(img-XREs7j9h-1751164598845)]
Log Analytics 门户中的查询结果
- 当你返回 Azure 门户中的 Log Analytics Overview 面板并点击 OMS Portal 时,Microsoft 操作管理套件应该会打开,在那里你可以查看所有日志和其他活动:
[外链图片转存中…(img-iATMeiWT-1751164598845)]
Microsoft 操作管理套件
Azure Monitor
Azure Monitor 是 Azure 门户中的一种监控解决方案,提供 Microsoft Azure 中几乎所有服务的基础设施度量和日志。在编写本书时,并非所有 Azure 资源都已添加到 Azure Monitor,但未来会有更多资源被添加。
Azure Monitor 提供以下功能:
-
Activity Log:活动日志提供关于 Azure 订阅内所有类型事件的信息。这些活动可能包括停止或启动虚拟机、维护活动等。它提供不同的事件类别,如管理、安保、服务健康、自动缩放、警报、建议、政策和资源健康事件。事件会被保存 90 天的保留期。查询可以保存并固定到 Azure 仪表板,也可以导出到存储帐户中,以便长期存储。它们还可以导出到事件中心进行实时流式传输,或发送到 Log Analytics。
-
诊断设置: 这提供了关于在 Azure 订阅中某个特定资源内部发生的事件的信息,例如从 Azure Key Vault 检索机密的事件。默认情况下,这些事件不会被收集;需要在 Azure 门户中手动为资源启用,或者在创建资源时通过 ARM 模板、PowerShell 或调用 REST API 来启用。这些事件也可以存储在存储帐户或事件中心,或发送到 Log Analytics,就像活动日志中的事件一样。
-
指标:指标提供了基于时间的度量点,就像 Windows Server 中的性能计数器一样。默认情况下,指标是可用的,并且具有 93 天的保留期。你可以检查 Azure 资源的性能并跟踪已用和可用的积分。例如,它们可以发送到事件中心、Azure 流分析,并且你可以使用 REST API 和 PowerShell 检索和查询数据。
-
警报:警报部分提供了一个地方来查看和管理所有 Azure 警报。它显示来自活动日志、指标、Application Insights 和 Log Analytics 的警报。你可以创建警报规则,这些规则可以发送电子邮件或短信、Webhook、将数据发送到第三方 IT 服务管理应用程序,或调用自动化运行书。
[外链图片转存中…(img-sGb72VEU-1751164598845)]
Azure 监控指标
Application Insights
Application Insights 为在 Azure 中托管的跨平台应用程序和本地应用程序提供了监控解决方案。它面向开发人员,可用于监控性能和检测问题,帮助提高应用程序的可用性。它可以集成到 DevOps 流程和开发工具中,例如 Visual Studio。
开发人员可以在 Azure 中设置一个 Application Insights 资源,并在他们的应用程序中安装一个包。这可以是一个 Azure 应用程序,也可以是本地应用程序,它们都可以连接到 Azure 中的资源。这个包负责将遥测数据发送到 Azure。你也可以添加性能计数器、Docker 日志和诊断日志。
它收集以下类型的应用程序事件:
-
速率数据:可以将不同类型的速率数据发送到 Application Insights,例如请求和依赖项速率、响应时间和用户会话计数。
-
异常:应用程序内部发生的异常可以发送到 Application Insights。
-
页面浏览量和性能:它可以提供有关应用程序页面浏览量和加载性能的信息。
-
诊断日志: 这会将 Docker 主机诊断信息发送到 Application Insights,并从应用程序发送追踪日志。
-
AJAX 调用:这是 AJAX 调用的性能、失败请求和响应时间。
-
自定义事件:你也可以在应用程序中创建自定义事件。
-
集成:它可以与 Visual Studio 应用中心和 HockeyApp 集成,以分析来自移动应用程序的遥测数据。
一旦数据发送到 Azure,它可以在 Azure 门户中查看。Azure 门户提供了不同的功能来展示和分析数据。它提供了应用程序映射刀片、实时指标流、指标资源管理器刀片、性能刀片等:
[外链图片转存中…(img-aIU8fMI0-1751164598845)]
Azure 门户中的应用洞察
Azure 服务健康
Azure 服务健康在 Azure 门户中提供了一个仪表板,展示了与不同 Azure 资源相关的问题。这可以帮助你了解维护计划,维护计划是可能影响 Azure 资源可用性的平台问题。
它提供以下视图来自 Azure 门户:
-
服务问题:这提供了当前所有 Azure 区域内发生的全球问题概览。它还提供了健康历史记录,你可以在此查看或下载历史事件的总结。
-
计划维护:这提供了所有已安排的维护事件的概览。
-
资源健康:概述了 Azure 订阅中不同资源的当前和历史健康状况。当遇到问题时,你也可以在此运行故障排除工具。
-
健康警报:你也可以在这里创建健康警报,以便在安排维护活动或发生服务问题时接收到通知。
[外链图片转存中…(img-TVASaBAj-1751164598846)]
Azure 门户中的 Azure 服务健康
Azure 顾问
Azure 顾问是一个帮助你遵循 Azure 部署最佳实践的工具。它分析所有 Azure 资源的当前配置,并基于此提供建议。对于大多数建议,你可以直接在 Azure 顾问门户内进行处理。
它提供以下类别:
-
高可用性:这提供了若干建议,帮助提高应用程序和其他 Azure 资源的持续性,比如启用备份和创建可用性集。
-
安全性:它提供了提高 Azure 资源安全性的建议,并与 Azure 安全中心集成。
-
性能:这提供了针对不同 Azure 资源的整体性能建议,如数据库性能和应用服务性能。
-
成本:本部分提供了提高成本效益的建议,比如调整虚拟机的大小或关闭虚拟机,或通过消除未配置的 ExpressRoute 电路来降低成本。
来自 Azure 顾问的地址建议
若要直接处理 Azure 顾问的建议,请按以下步骤操作:
-
通过打开以下链接访问 Azure 门户:
portal.azure.com/
。 -
从左侧菜单中选择 Azure 顾问。
-
你将获得所有不同推荐的概览,这些推荐被分类为四个部分:
[外链图片转存中…(img-GVAuDvig-1751164598846)]
Azure 顾问概览
- 这些推荐是基于我们为本书创建的所有不同服务。因此,如果你跟随了教程,你的推荐内容将与此相同。对于这个示例,我们选择安全性部分,然后选择“跟随安全中心推荐”。挑选一个高严重性的推荐:
[外链图片转存中…(img-lmb41POH-1751164598846)]
安全推荐
- 打开一个新窗格,你可以选择数据库。在这里,你可以直接为选定的数据库启用审计与威胁检测。
[外链图片转存中…(img-7EZisyeC-1751164598846)]
审计与威胁检测设置
Azure 网络监视器
Azure 网络监视器为所有网络通信提供了一个网络监控解决方案,覆盖 Azure 资源层级。包括虚拟网络(VNets)、ExpressRoute 电路、应用网关流量、负载均衡器等。可以通过 Azure 门户访问,并提供监控工具、诊断工具和来自网络层级的日志。
它提供以下功能:
-
拓扑:这通过提供一个图形视图,展示了虚拟网络(VNet)中所有网络资源的概览。通过 Azure 门户,它提供了所有网络部分的子集。要查看完整的资源列表,可以使用 PowerShell 或 REST API。
-
IP 流量验证:这提供了虚拟机网络接口允许或拒绝的数据包概览。它帮助管理员快速解决连接性问题。
-
下一跳:这提供了数据包目标路由的概览。它有助于确定连接性问题,并检查数据包是否到达目标,例如本地虚拟机。
-
安全组视图:这提供了一个概览,展示了所有配置的网络安全组(NSG)和与其相关的规则,从两个不同的层次进行展示,分别是网络接口层和子网层。
-
VPN 诊断:这提供了一个 VPN 网关和连接的故障排除解决方案。可以通过 Azure 门户、PowerShell、Azure CLI 或 REST API 调用连接和网关,并返回结果。
-
数据包捕获:你可以捕获网络流量数据包以诊断网络异常。它需要安装在虚拟机上的扩展来捕获数据包。数据包可以存储在虚拟机本地或 Azure Blob 存储中,以便进一步分析。
-
连接故障排除:这提供了一个故障排除解决方案,用于检查虚拟机到虚拟机、IPv4 地址、URI 以及完全限定域名(FQDN)的 TCP 连接。通过收集所有配置,它帮助检测连接性问题。它使用与数据包捕获功能相同的扩展,并且可以通过 PowerShell、CLI 和 REST API 检查连接性。
[外链图片转存中…(img-qDFq3ZaK-1751164598846)]
网络监视器概览
总结
本章中,我们介绍了 Azure 从平台和应用程序的角度提供的不同监控解决方案,如 Application Insights、Network Watcher 和 Azure Log Analytics。
下一章将是本目标的最后一章,也是本书的最终章,第十五章,探索操作自动化策略。
问题
回答以下问题以测试您对本章信息的理解。您可以在本书末尾的评估部分找到答案:
-
您正在设计一个 IoT 解决方案,并希望为管理员提供实时监控工具。您应该使用 Azure Log Analytics 吗?
-
是的
-
不是
-
-
Azure Network Watcher 是一个需要在您的计算机上安装的独立应用程序吗?
-
是的
-
不是
-
-
您希望了解 Azure 平台上所有已安排的维护事件概况。您可以从 Azure 服务健康中获取此信息吗?
-
是的
-
不是
-
进一步阅读
您可以查看以下链接以获取更多有关本章所涵盖主题的信息:
-
什么是 Azure Log Analytics?:
docs.microsoft.com/en-us/azure/log-analytics/log-analytics-overview
-
使用日志分析中的视图设计器创建自定义视图:
docs.microsoft.com/en-us/azure/log-analytics/log-analytics-view-designer
-
Azure Monitor 文档:
docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/
-
Azure Monitor 概述:
docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-azure-monitor
-
Application Insights 文档:
docs.microsoft.com/en-us/azure/application-insights/
-
Azure 服务健康文档:
docs.microsoft.com/en-us/azure/service-health/
-
Azure Advisor 简介:
docs.microsoft.com/en-us/azure/advisor/advisor-overview
-
Azure Network Watcher 文档:
docs.microsoft.com/en-us/azure/network-watcher/