了解Azure Policy的来宾配置功能

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

该功能可以直接按计算机使用,也可以由Azure Policy进行大规模协调。

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

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

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

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

类型 Description 示例情景
配置管理 需要服务器的完整表示形式,作为源代码管理中的代码。 部署应包括服务器的属性(大小、网络、存储)和操作系统以及应用程序设置的配置。 “此计算机应为配置为托管我的网站的 Web 服务器。”
合规性 你希望审核或将设置部署到现有计算机范围内的所有计算机,或者在部署新计算机时主动部署到新计算机。 “所有计算机应使用 TLS 1.2。 审核现有计算机,以便可以大规模释放所需的更改(以受控方式)。 对于新计算机,请在部署新计算机时强制实施设置。

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

启用来宾配置

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

资源提供者

必须先注册Microsoft.GuestConfiguration资源提供程序,然后才能使用Azure Policy的来宾配置功能。 如果通过门户分配来宾配置策略,则会自动注册资源提供程序。 可以通过门户、Azure PowerShell 或 Azure CLI 手动注册。

Azure 虚拟机的部署要求

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

Important

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

如果希望将扩展和托管标识部署到单个计算机,请遵循每个计算机的指南:

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

对扩展设置的限制

若要限制扩展不会影响计算机中运行的应用程序,不允许来宾配置代理超过 5% CPU。 对于内置和自定义的定义都存在此限制。

验证工具

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

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

操作系统 验证工具 注释
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 分发的新次要版本的符号文本。

Publisher Name 版本
亚马逊河 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 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中计算机资源的当前状态正确行为。

Availability

设计高度可用解决方案的客户应考虑对虚拟机的冗余规划要求,因为来宾分配是 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

后续步骤