导读:本期聚焦于吴凌云创作的《Azure Policy 来宾配置审核怎么做?虚拟机内部合规检查实战详解》,敬请观看详情。Azure Policy 的常规评估只读取资源在管理平面暴露的属性,可虚拟机内部的注册表键值、服务状态、本地安全策略该如何审核?来宾配置功能正是为解决这个难题而生。它通过在虚拟机内部安装来宾配置代理与 DSC 扩展,把操作系统内部的真实状态采集回来,再与策略定义的期望配置进行比对,生成合规或不合规的评估结果。本文从来宾配置的运行原理讲起,介绍系统托管标识、前置条件部署计划、内置审核定义的使用方法,并给出自定义来宾配置包的完整制作流程,同时覆盖 Windows 与 Linux 双平台以及 Azure Arc 混合服务器的接入方式,帮助你把合规边界从资源层延伸到操作系统层。

Azure Policy 的常规评估机制只读取资源在 Azure Resource Manager 层面暴露的属性,例如虚拟机的 SKU、磁盘加密状态、网络接口配置。一旦审核目标深入到操作系统内部,比如某个注册表键值是否符合基线、Telnet 服务是否被禁用、SSH 是否关闭了密码登录,传统的策略定义就无能为力了。来宾配置正是为填补这个空白而设计的机制,它把 Azure Policy 的合规评估能力从资源平面延伸到操作系统内部,让管理员用同一套策略框架同时管理云端虚拟机与本地混合服务器的内部配置。

Azure Policy 来宾配置审核怎么做?虚拟机内部合规检查实战详解

一、来宾配置审核的运行原理

来宾配置的核心思路是在目标机器内部安装一个轻量代理,由代理执行实际的检查动作。当你在管理平面分配一条来宾配置类型的策略后,Azure Policy 首先通过 DeployIfNotExists 效果向虚拟机推送两个组件:来宾配置扩展和系统分配的托管标识。扩展落地之后,代理会定期从策略服务拉取配置包,配置包本质上是一个经过签名的 zip 压缩文件,里面封装了 DSC 期望状态配置文档以及执行检查所需的全部依赖资源。

代理在机器内部执行检查后,把结果写入本地状态文件,并通过来宾配置服务上报到 Azure Policy 的评估管道。整个链路对网络有一定要求,虚拟机必须能够访问来宾配置服务的区域终结点,否则状态无法回传,合规记录会停留在未就绪状态。评估周期默认为二十四小时一次,机器重启或代理服务重启时也会触发一次即时评估,这个特性在排查问题时非常实用。另外,新版本服务目录中该功能已经演进为机器配置服务,但策略定义里的类别名称仍然叫来宾配置,两者指的是同一套机制。

需要特别说明的是,来宾配置审核默认只读不写,也就是只报告不合规项而不修改机器内部设置。如果希望策略自动修复问题,需要使用带有 Set 参数的配置包,并配合同时包含部署与审核两条定义的完整计划,这种模式对应来宾配置的 ApplyAndMonitor 机制,适合对配置漂移零容忍的环境。

二、启用来宾配置的前置条件与部署计划

直接分配一条来宾配置审核策略,往往会发现机器状态显示为未就绪,原因在于前置组件尚未安装。正确做法是先分配名为部署来宾配置策略前置条件的内置计划,它会为作用域内的虚拟机批量完成三件事:安装来宾配置扩展、启用系统托管标识、赋予托管标识读取配置包所需的权限。计划内部包含针对 Windows 与 Linux 的多个定义,分配一次即可覆盖两类平台。

托管标识是整个机制的安全基石。来宾配置代理需要用它访问存储配置包的存储账户、向策略服务上报状态,全程不需要在虚拟机内部保存任何长期凭证。因此在网络层面,除了放行来宾配置服务的终结点,还要确保托管标识的认证流量没有被防火墙拦截。对于启用了 Azure Arc 的本地服务器,接入方式完全一致,Arc 代理会把来宾配置扩展桥接到非 Azure 机器上,让本地机房的服务器也纳入同一套合规体系。

下面的示例演示了如何用 Azure PowerShell 为资源组分配前置计划并指定系统托管标识:

# 获取内置的前置条件部署计划
$SetDef = Get-AzPolicySetDefinition | Where-Object {
  $_.Properties.DisplayName -like 'Deploy prerequisites to enable Guest Configuration*'
}

# 为资源组分配计划,并创建系统托管标识
$Assignment = New-AzPolicyAssignment -Name 'deploy-gc-prereqs' `
  -DisplayName '部署来宾配置前置条件' `
  -PolicySetDefinition $SetDef `
  -Scope '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/audit-rg' `
  -IdentityType 'SystemAssigned'

# 为托管标识分配角色,使其具备推送扩展的权限
New-AzRoleAssignment -ObjectId $Assignment.Identity.PrincipalId `
  -RoleDefinitionName 'Contributor' `
  -Scope '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/audit-rg'

分配完成后,可以在目标虚拟机的扩展页面看到 ConfigurationforWindows 或 ConfigurationforLinux 扩展出现在已安装列表中,这标志着前置条件部署成功,机器已经准备好接收具体的审核策略。

三、使用内置来宾配置策略进行审核

前置条件就绪后,就可以挑选具体的审核定义了。在门户的策略定义页面搜索来宾配置关键词,会出现上百条内置定义,覆盖操作系统基线、安全设置、应用程序配置等多个类别。常见的例子包括审核未设置密码过期时间的 Windows 机器、审核允许空密码登录的 Linux 机器、审核未安装指定监视代理的机器等。这些定义的效果都是 AuditIfNotExists,也就是在机器内部状态与期望不符时标记为不合规。

分配内置定义时要注意作用域与排除项的搭配。来宾配置的评估发生在单机层面,把策略分配到管理组可以一次性覆盖大量虚拟机,而对不适用该操作系统的机器,策略会自动跳过,不会产生误报。评估结果通常在三十分钟内开始陆续回传,完整覆盖一个大规模环境可能需要等待一个完整周期。

如果希望立即查看某台机器的合规状态而不等待周期触发,可以调用 REST 接口发起按需评估:

# 触发单台虚拟机的来宾配置按需评估
az rest --method POST \
  --url "https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/audit-rg/providers/Microsoft.Compute/virtualMachines/webvm01/providers/Microsoft.GuestConfiguration/guestConfigurationAssignments/AuditWindowsPasswordExpiry?api-version=2020-06-25"

返回结果中的 complianceStatus 字段会给出 Compliant 或 NonCompliant 的结论,配合 resources 数组还能看到具体哪一项检查失败,便于把问题定位到确切的配置偏差。

四、自定义来宾配置包的制作流程

内置定义虽然丰富,但企业内部往往有个性化的基线要求,例如要求所有业务虚拟机安装自研监控客户端、禁止特定端口的服务运行。这时就需要制作自定义来宾配置包。整个流程分为四步:编写 DSC 配置文档、打包、签名、上传存储并创建自定义策略定义。

打包使用 PowerShell 库中的 GuestConfiguration 模块,下面的示例演示了从配置文档生成审核包并完成签名的完整过程:

# 安装来宾配置打包模块
Install-Module GuestConfiguration -Force

# 编译生成 MOF 配置文档
. ./AuditServiceBaseline.ps1
AuditServiceBaseline -OutputPath ./Output

# 将 MOF 与依赖打包为来宾配置包
$Package = New-GuestConfigurationPackage `
  -Name 'AuditTelnetService' `
  -Configuration './Output/AuditServiceBaseline.mof' `
  -Type 'Audit'

# 使用代码签名证书对包进行签名
$Cert = Get-ChildItem -Path Cert:\CurrentUser\My |
  Where-Object { $_.Subject -eq 'CN=GuestConfigCodeSigning' }

Protect-GuestConfigurationPackage -Path $Package.Path -Certificate $Cert

签名是强制的安全要求,未签名的包会被代理拒绝执行,目的是防止配置包在传输或存储过程中被篡改。签名证书的公钥需要导出并写入策略定义的配置参数,代理在解压执行前会用公钥校验签名。打包完成后把 zip 文件上传到虚拟机可访问的存储账户,记录文件的哈希值,再基于内置的来宾配置模板创建策略定义,把存储地址与哈希填入参数即可生效。

值得注意的是,自定义包中的 DSC 资源必须兼容期望状态配置的执行环境,Windows 机器使用 PowerShell DSC,Linux 机器则通过 PowerShell 的跨平台实现执行,编写配置时要留意两个平台在资源名称与参数上的差异,必要时分别为两类平台制作独立的配置包。

五、常见问题与排查思路

来宾配置链路涉及管理平面与机器内部两个层面,排障时建议先分层定位。第一步检查虚拟机扩展状态,如果 ConfigurationforWindows 或 ConfigurationforLinux 扩展显示创建失败,问题多半出在托管标识缺失或权限不足,重新分配前置计划通常可以解决。第二步查看代理日志,Windows 机器的日志位于 C:\ProgramData\GuestConfig 目录,Linux 机器位于 /var/lib/GuestConfig 目录,日志中记录了配置包下载、签名校验、执行结果的完整过程。

下表汇总了几个高频故障及其处理方式,可以作为快速排查的索引:

故障现象常见原因处理方式
扩展创建失败托管标识缺失或角色未授予重新分配前置条件部署计划
合规状态长期未就绪网络拦截服务终结点或存储账户防火墙限制放行来宾配置终结点与存储访问
配置包执行被拒绝签名校验失败或哈希不匹配重新签名并更新策略定义中的哈希值
结果回传延迟评估周期尚未到达调用按需评估接口或重启代理服务

合规数据时效性也是容易踩坑的点。来宾配置的评估周期为二十四小时,机器内部配置被人为改动后,管理平面最长需要一天才能反映出来。对时效敏感的场景可以结合 Azure Monitor 的资源日志监控来宾配置状态变更事件,做到分钟级的偏差告警,把静态审核升级为动态监控,进一步压实操作系统的合规底线。

Azure Policy来宾配置合规审核修改时间:2026-10-03 15:34:56

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1003/65159.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。