了解 Azure Policy 的来宾配置功能

Azure Policy 的来宾配置功能提供了本机功能,可以将操作系统设置作为 Azure 中运行的计算机的代码进行审核或配置。

该功能可以直接在每台计算机上使用,也可以由 Azure Policy 进行大规模编排。

Azure 中的配置资源被设计为扩展资源。 可以将每个配置想象为计算机的一组附加属性。 配置可以包含如下设置:

  • 操作系统设置
  • 应用程序配置或状态
  • 环境设置

配置不同于策略定义。 来宾配置利用 Azure Policy 将配置动态分配给计算机。 还可以手动为计算机分配配置。

下表中提供了每个场景的示例。

类型 描述 示例情景
配置管理 你需要服务器的完整表示形式,作为源代码管理中的代码。 部署应包括服务器的属性(大小、网络、存储)和操作系统以及应用程序设置的配置。 “此计算机应为配置为托管我的网站的 Web 服务器。”
遵从性 你想审核作用域中的所有计算机或将设置部署到所有这些计算机,被动部署到现有计算机或主动在新计算机创建时部署到这些新计算机。 “所有计算机应使用 TLS 1.2。 审核现有计算机,使我能够根据需要以可控的方式大规模发布更改。 对于新计算机,在它们部署时强制实施设置。”

可以在来宾分配页面中查看配置中每个设置的结果,或者如果配置是由 Azure Policy 分配编排的,则单击“合规性详细信息”页上的“上次评估的资源”链接。

启用来宾配置

若要管理环境中的计算机(包括 Azure 中的计算机)的状态,请查看以下详细信息。

资源提供程序

在使用 Azure Policy 的来宾配置功能之前,必须先注册 Microsoft.GuestConfiguration 资源提供程序。 如果来宾配置策略的分配是通过门户完成的,或者如果订阅已在 Microsoft Defender for Cloud 内注册,则会自动注册该资源提供程序。 可以通过门户Azure PowerShellAzure CLI 手动注册。

部署 Azure 虚拟机的要求

若要管理计算机内部的设置,需要启用虚拟机扩展,并且该计算机必须具有系统托管标识。 该扩展下载适用的来宾配置分配和相应的依赖项。 该标识用于在计算机读取和写入来宾配置服务时对计算机进行身份验证。

重要

需要使用来宾配置扩展和托管标识来管理 Azure 虚拟机。

如果你希望将该扩展和托管标识部署到单个计算机,请按照该扩展和托管标识的指南进行操作:

若要使用来宾配置包以应用配置,需要安装 Azure VM 来宾配置扩展版本 1.29.24 或更高版本。

对扩展设置的限制

为了限制该扩展对计算机内运行的应用程序造成影响,来宾配置代理的 CPU 消耗不得超过 CPU 总容量的 5%。 对于内置和自定义的定义都存在此限制。

验证工具

在计算机内,来宾配置代理使用本地工具执行任务。

下表列出了每个受支持的操作系统上使用的本地工具。 对于内置内容,来宾配置会自动处理这些工具的加载。

操作系统 验证工具 说明
Windows PowerShell Desired State Configuration v3 侧加载到仅由 Azure Policy 使用的文件夹。 不会与 Windows PowerShell DSC 冲突。 PowerShell Core 不会添加到系统路径。
Linux PowerShell Desired State Configuration v3 侧加载到仅由 Azure Policy 使用的文件夹。 PowerShell Core 不会添加到系统路径。
Linux Chef InSpec 在默认位置安装 Chef InSpec 版本 2.2.61,并将其添加到系统路径。 还会安装 InSpec 包的依赖项,包括 Ruby 和 Python。

验证频率

来宾配置代理每 5 分钟检查一次新的或更改的来宾分配。 在收到来宾分配后,将按 15 分钟的时间间隔重新检查该配置的设置。 如果分配了多个配置,将按顺序评估每个配置。 长时间运行的配置会影响所有配置的间隔,因为只有在前一个配置完成之后,才会运行下一个配置。

审核完成后,结果将发送到来宾配置服务。 当策略评估触发器执行时,会将计算机状态写入到来宾配置资源提供程序。 此更新会使 Azure Policy 评估 Azure 资源管理器属性。 按需 Azure Policy 评估从来宾配置资源提供程序检索最新值。 但是,它不会在计算机中触发新活动。 然后,状态将写入 Azure Resource Graph。

支持的客户端类型

来宾配置策略定义包含新版本。 如果来宾配置客户端不兼容,则会排除 Azure 市场中提供的旧版操作系统。 下表显示了 Azure 映像上支持的操作系统列表。 “.x”文本是表示 Linux 分发的新次要版本的符号。

发布者 名称 版本
Amazon Linux 2
Canonical Ubuntu Server 14.04 - 20.x
Credativ Debian 8 - 10.x
Microsoft Windows Server 2012 - 2022
Microsoft Windows 客户端 Windows 10
Oracle Oracle-Linux 7.x-8.x
OpenLogic CentOS 7.3 -8.x
Red Hat Red Hat Enterprise Linux* 7.4 - 8.x
SUSE SLES 12 SP3-SP5、15.x

* 不支持 Red Hat CoreOS。

来宾配置策略定义支持自定义虚拟机映像,只要它们是上表中的操作系统之一。

网络要求

Azure 中的虚拟机可以使用其本地网络适配器或专用链接与来宾配置服务通信。

通过 Azure 中的虚拟网络进行通信

若要与 Azure 中的来宾配置资源提供程序通信,计算机需要对端口 443 上的 Azure 数据中心进行出站访问。 如果 Azure 中的网络不允许出站流量,请使用网络安全组规则配置异常。 可使用服务标记“GuestAndHybridManagement”和“Storage”来引用来宾配置和存储服务,不必手动维护 Azure 数据中心的 IP 范围列表。 这两个标记都是必需的,因为来宾配置内容包由 Azure 存储托管。

虚拟机可以使用专用链接与来宾配置服务通信。 应用名称为 EnablePrivateNetworkGC 且值为 TRUE 的标签以启用此功能。 在将来宾配置策略定义应用到计算机之前或之后,可以应用该标记。

流量使用 Azure 虚拟公共 IP 地址进行路由,以便使用 Azure 平台资源建立经过身份验证的安全通道。

托管标识要求

“部署必备组件以在虚拟机上启用来宾配置策略”计划中的策略定义会启用系统分配的托管标识(如果不存在)。 计划中有两个管理标识创建的策略定义。 策略定义中的 IF 条件基于 Azure 中计算机资源的当前状态确保行为正确。

可用性

设计高度可用解决方案的客户应考虑虚拟机的冗余计划要求,因为来宾分配是 Azure 中计算机资源的扩展。 将来宾分配资源预配到配对的 Azure 区域时,只要该对中至少有一个区域可用,来宾分配报告就可用。 如果 Azure 区域未配对并且变得不可用,则在还原区域之前,无法访问来宾分配的报告。

考虑高可用性应用程序的体系结构时,尤其是在负载均衡器解决方案后面的可用性集中预配虚拟机以提供高可用性时,最佳做法是将具有相同参数的相同策略定义分配到解决方案中的所有计算机。 如果可能,跨所有计算机的单个策略分配将提供最少的管理开销。

对于受 Azure Site Recovery 保护的计算机,请确保辅助站点中的计算机与主站点中的计算处于使用相同参数值的相同定义的 Azure Policy 分配范围内。

数据驻留

来宾配置会存储/处理客户数据。 客户数据默认复制到配对区域。对于单个驻留区域,所有客户数据都将在该区域中进行存储和处理。

来宾配置故障排除

有关对来宾配置进行故障排除的详细信息,请参阅 Azure Policy 故障排除

多个分配

当策略分配使用不同的参数时,来宾配置策略定义目前仅支持为每台计算机分配一次相同的来宾分配。

到 Azure 管理组的分配

仅当效果为“AuditIfNotExists”时,才能将“来宾配置”类别中的 Azure Policy 定义分配到管理组。 不支持将效果为“DeployIfNotExists”的策略定义用作到管理组的分配。

客户端日志文件

来宾配置扩展将日志文件写入以下位置:

Windows: C:\ProgramData\GuestConfig\gc_agent_logs\gc_agent.log

Linux

  • Azure VM:/var/lib/GuestConfig/gc_agent_logs/gc_agent.log

远程收集日志

对来宾配置相关配置或模块进行故障排除的第一步应该是按照如何测试来宾配置包项目中的步骤使用 cmdlet。 如果未成功,则收集客户端日志有助于诊断问题。

Windows

使用 Azure VM 运行命令从日志文件中捕获信息,下面的示例 PowerShell 脚本可能会很有帮助。

$linesToIncludeBeforeMatch = 0
$linesToIncludeAfterMatch = 10
$logPath = 'C:\ProgramData\GuestConfig\gc_agent_logs\gc_agent.log'
Select-String -Path $logPath -pattern 'DSCEngine','DSCManagedEngine' -CaseSensitive -Context $linesToIncludeBeforeMatch,$linesToIncludeAfterMatch | Select-Object -Last 10

Linux

使用 Azure VM 运行命令从日志文件中捕获信息,下面的示例 Bash 脚本可能会很有帮助。

linesToIncludeBeforeMatch=0
linesToIncludeAfterMatch=10
logPath=/var/lib/GuestConfig/gc_agent_logs/gc_agent.log
egrep -B $linesToIncludeBeforeMatch -A $linesToIncludeAfterMatch 'DSCEngine|DSCManagedEngine' $logPath | tail

代理文件

来宾配置代理将内容包下载到计算机中并提取其内容。 若要验证已下载和存储的内容,请查看下面给出的文件夹位置。

Windows: c:\programdata\guestconfig\configuration

Linux:/var/lib/GuestConfig/Configuration

后续步骤