本文介绍如何在不影响 DevOps 做法的情况下管理虚拟机合规性。 使用 Azure VM 映像生成器和 Azure Compute Gallery 最大程度地降低系统映像的风险。
体系结构
解决方案由两个过程组成:
- 黄金映像发布过程
- 跟踪虚拟机 (VM) 合规性的过程
下载此体系结构的 Visio 文件。
数据流
黄金映像发布过程每月运行一次,其中包含以下步骤:
- 该过程从 Azure 市场捕获基础映像。
- VM 映像生成器自定义该映像。
- 映像纹身过程跟踪映像版本信息,如源和发布日期。
- 自动测试会验证该映像。
- 如果映像未通过任何测试,它将返回到自定义步骤进行修复。
- 该过程将发布最终的映像。
- Compute Gallery 使映像可供 DevOps 团队使用。
下载此体系结构的 Visio 文件。
跟踪 VM 合规性的过程包含以下步骤:
- Azure Policy 将策略定义分配给 VM,并评估 VM 的合规性。
- Azure Policy 将 VM 和其他 Azure 资源的合规性数据发布到 Azure Policy 仪表板。
组件
VM 映像生成器是一项托管服务,用于自定义系统映像。 此服务生产并分发映像供 DevOps 团队使用。
Compute Gallery 可帮助构建和组织自定义映像。 此服务通过将映像存储在存储库中,提供对映像的受控访问权限。 用户可以在组织内部,也可以在组织外部。
Azure Policy 提供策略定义。 可使用这些定义来强制实施组织的标准并大规模评估合规性。 Azure Policy 仪表板显示 Azure Policy 评估的结果。 此数据可让你了解资源的合规性状态。
使用 Azure Policy 的 Azure Automanage 机器配置功能,可通过代码动态审核配置或将配置分配给计算机。 配置通常包括环境或操作系统设置。
备选方法
可使用第三方工具管理合规性。 但在使用此类工具时,通常需要在目标 VM 上安装代理。 可能还需要支付许可费用。
可使用自定义脚本扩展在 VM 上安装软件或在部署后配置 VM。 但是,每个 VM 或虚拟机规模集只能有一个自定义脚本扩展。 如果使用自定义脚本扩展,可防止 DevOps 团队自定义其应用程序。
方案详细信息
每个企业都有自己的合规性法规和标准。 在安全性方面,每个公司都有自己的风险胃纳。 不同组织和不同地区的安全标准可能有所不同。
在动态缩放云环境中遵循不同的标准可能比在本地系统中更具挑战性。 当团队使用 DevOps 做法时,对于谁可以创建 Azure 资源(如 VM)的限制通常较少。 这一事实使合规性难题变得复杂。
通过使用 Azure Policy 和基于角色的访问控制分配,企业可以对 Azure 资源强制实施标准。 但对于 VM,这些机制仅影响控制平面或 VM 的路由。 在 VM 上运行的系统映像仍会构成安全威胁。 某些公司阻止开发人员访问 VM。 这种方法会降低敏捷性,使得遵循 DevOps 实践变得困难。
本文介绍一个解决方案来管理 Azure 上运行的 VM 的合规性。 除了跟踪合规性,该解决方案还可以最大程度地降低 VM 上运行的系统映像的风险。 同时,该解决方案与 DevOps 实践兼容。 核心组件包括 Azure VM 映像生成器、Azure Compute Gallery 和 Azure Policy。
可能的用例
此解决方案适用于具有完成以下任务的 Azure 登陆区域的组织:
- 为 DevOps 团队提供黄金映像。 黄金映像是市场映像的已发布版本。
- 先对映像进行测试和验证,然后再将其提供给 DevOps 团队。
- 跟踪每个 DevOps 团队使用的映像。
- 在不降低工作效率的情况下强制实施公司标准。
- 确保 DevOps 团队使用最新的映像版本。
- 管理宠物服务器和家畜服务器的合规性,前一类服务器是维护密集型服务器,后一类服务器可以轻松替换。
方法
以下部分详细说明了解决方案的方法。
辨别宠物和家畜
DevOps 团队使用宠物和家畜的类比来定义服务模型。 要跟踪 VM 的合规性,请首先确定它是宠物服务器还是家畜服务器:
宠物服务器需要大量关注。 它们不易分配。 恢复宠物服务器需要投入大量时间和财力。 例如,运行 SAP 的服务器可能是宠物服务器。 除了服务器上运行的软件之外,其他注意事项也可以确定服务模型。 如果容错性较低,实时和准实时系统中的生产服务器可能也是宠物服务器。
家畜服务器属于同一组。 可以轻松替换它们。 例如,虚拟机规模集内运行的 VM 是家畜服务器。 如果集内有足够的 VM,系统会一直运行,你无需知道每个 VM 的名称。 满足以下条件的测试环境服务器是另一个家畜服务器示例:
- 使用自动过程从头开始创建服务器。
- 运行完测试后,解除服务器授权。
环境可能只包含宠物服务器,也可能只包含家畜服务器。 相反的情况是,环境中的一组 VM 可能是宠物服务器。 同一环境中的另一组 VM 可能是家畜服务器。
管理合规性:
- 跟踪宠物服务器合规性可能比跟踪家畜服务器合规性更具挑战性。 通常,只有 DevOps 团队才能跟踪和维护宠物环境和服务器的合规性。 但本文的解决方案提高了每个宠物服务器状态的可见性,使组织中的每个人都可以更轻松地跟踪合规性。
- 对于家畜环境,请刷新 VM 并定期从头开始重新生成它们。 这些步骤应该充分满足了合规性要求。 可以使此刷新周期与 DevOps 团队的定期发布节奏保持一致。
限制映像
请勿允许 DevOps 团队使用 Azure 市场 VM 映像。 仅允许 Compute Gallery 发布的 VM 映像。 此限制对于确保 VM 合规性至关重要。 可在 Azure Policy 中使用自定义策略来强制实施此限制。 有关示例,请参阅允许映像发布服务器。
在此解决方案中,VM 映像生成器应使用 Azure 市场映像。 必须使用 Azure 市场中提供的最新映像。 应用基于该映像的任何自定义项。 Azure 市场映像经常刷新,并且每个映像都有某些预设配置,从而确保映像在默认情况下是安全的。
自定义映像
黄金映像是发布到 Compute Gallery 的市场映像的版本。 黄金映像可供 DevOps 团队使用。 需要在发布映像之前进行自定义。 每个企业的自定义活动都是不同的。 常见活动如下:
- 操作系统强化。
- 部署第三方软件的自定义代理。
- 安装企业证书颁发机构 (CA) 根证书。
可通过调整操作系统设置并运行自定义脚本和命令,使用 VM 映像生成器自定义映像。 VM 映像生成器支持 Windows 和 Linux 映像。 有关自定义映像的详细信息,请参阅 Azure 虚拟机的 Azure Policy 法规遵从性控制措施。
跟踪映像纹身
映像纹身是跟踪 VM 使用的所有映像版本信息的过程。 此信息在故障排除过程中非常有用,其中可能包括:
- 映像的原始来源,如发布服务器的名称和版本。
- 操作系统版本字符串,如果要进行就地升级,则需要该字符串。
- 自定义映像的版本。
- 发布日期。
跟踪的信息的数量和类型取决于组织的合规性级别。
对于 Windows VM 上的映像纹身,请设置自定义注册表。 将所有必需的信息以键值对形式添加到此注册表路径。 在 Linux VM 上,将映像纹身数据输入环境变量或文件中。 将该文件放入 /etc/
文件夹中,如果在该文件夹中,它不会与开发人员工作或应用程序产生冲突。 如果要使用 Azure Policy 跟踪或报告纹身数据,请将每段数据存储为唯一的键值对。 有关确定市场映像版本的信息,请参阅如何查找市场映像版本。
使用自动测试验证黄金映像
通常,应每月刷新黄金映像,及时了解 Azure 市场映像的最新更新和更改。 为此,请使用循环测试过程。 在映像创建过程中,请使用 Azure 管道或其他自动化工作流进行测试。 设置管道,以在每月开始之前部署用于运行测试的新 VM。 测试应先确认裁剪的映像,然后再将其发布以供使用。 通过使用测试自动化解决方案或通过在 VM 上运行命令或批处理,自动执行测试。
常见测试方案包括:
- 验证 VM 启动时间。
- 确认映像的任何自定义,如操作系统配置设置或代理部署。
如果测试失败,应中断进程。 解决问题的根本原因后,重复此测试。 如果测试运行没有问题,则自动执行测试过程可减少维持长绿状态的工作量。
发布黄金映像
将最终映像作为托管映像或虚拟硬盘 (VHD) 发布到 Compute Gallery 上,供 DevOps 团队使用。 将任何早期映像标记为已过时。 如果你尚未在 Compute Gallery 中设置映像版本的生命周期结束日期,建议终止最早的映像。 此决定取决于公司的政策。
有关使用 Compute Gallery 时应用的限制的信息,请参阅在 Azure Compute Gallery 中存储和共享映像。
另一种良好做法是在不同区域发布最新的映像。 借助 Compute Gallery,可跨不同的 Azure 区域管理映像的生命周期和复制。
有关 Compute Gallery 的详细信息,请参阅在 Azure Compute Gallery 中存储和共享图像。
刷新黄金映像
当映像用于应用程序时,可能很难使用最新的合规性更改来更新基础操作系统映像。 严格的业务要求可能会使刷新底层 VM 的过程变得复杂。 当 VM 对业务至关重要时,刷新也很复杂。
由于家畜服务器是可分配的,因此你可与 DevOps 团队协调,以在计划内维护时段中以常规的活动方式刷新这些服务器。
刷新宠物服务器更具挑战性。 终止映像可能会使应用程序面临风险。 在横向扩展场景中,Azure 找不到相应的映像,从而导致失败。
刷新宠物服务器时,请考虑以下准则:
有关最佳做法,请参阅 Azure 架构良好的框架中的可靠性支柱概述。
要简化此过程,请参阅以下文档讨论的原则:
将每个宠物服务器标记为宠物。 在 Azure Policy 中配置策略,以在刷新过程中考虑此标记。
提高可见性
通常,应使用 Azure Policy 管理任何控制平面合规性活动。 还可使用 Azure Policy 执行以下操作:
- 跟踪 VM 合规性。
- 安装 Azure 代理。
- 捕获诊断日志。
- 提高 VM 合规性的可见性。
使用 Azure Policy 的 Azure Automanage 机器配置功能审核你在映像自定义过程中所做的配置更改。 发生偏移时,Azure Policy 仪表板会将受影响的 VM 列为不合规。 Azure Policy 可使用映像纹身信息来跟踪你何时使用过时映像或操作系统。
审核每个应用程序的宠物服务器。 借助具有审核效果的 Azure Policy,可提高这些服务器的可见性。 根据公司的风险胃纳和内部风险管理过程调整审核过程。
每个 DevOps 团队都可以在 Azure Policy 仪表板中跟踪其应用程序的合规性级别,并采取适当的纠正措施。 将这些策略分配到管理组或订阅时,请为分配描述提供一个指向公司范围 Wiki 的 URL。 还可使用类似 aka.ms/policy-21
的短 URL。 在 Wiki 中,列出 DevOps 团队为使其 VM 合规而应采取的步骤。
IT 风险管理人员和安全管理人员还可以根据公司的风险胃纳,使用 Azure Policy 仪表板来管理公司风险。
借助具有修正选项的 Azure Policy 的 Azure Automanage 机器配置功能,可自动应用纠正措施。 但是,频繁询问 VM 或对用于业务关键应用程序的 VM 进行更改可能会降低性能。 仔细计划生产工作负载的修正操作。 向 DevOps 团队授予所有环境中应用程序合规性的所有权。 此方法对于宠物服务器和环境至关重要,它们通常是长期的 Azure 组件。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
可伸缩性
你可配置 Compute Gallery 存储的每个映像的副本数。 同时预配多个 VM 时,副本数量越多,限制风险就越小。 有关缩放和配置适当副本数的一般指南,请参阅 Azure Compute Gallery 缩放。
复原
此解决方案使用在区域级别自动复原的托管组件。 若需可复原解决方案的通用设计指南,请参阅设计适用于 Azure 的可复原应用程序。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
除非使用第三方服务(如 Ansible 或 Terraform),否则此方法几乎是免费的。 可能会产生存储和出口费用。 其他潜在费用涉及以下组件:
对于 Azure 资源,Azure Policy 和 Azure Automanage 机器配置配置完全免费。 如果公司使用混合方法,则 Azure Arc 资源会产生额外费用。
在公共预览期间,VM 映像生成器使用具有 1 个 vCPU 和 3.5 GB RAM 的单一计算实例类型。 数据存储和传输可能需要付费。
Compute Gallery 不收取除以下费用外的任何费用:
- 副本存储费用。
- 复制映像的网络出口费用。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
首席作者:
- Yunus Emre Alpozen | 程序架构师
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
- Azure 登陆区域
- 使用 Azure Policy 控制和审核资源
- Azure VM 映像生成器
- Azure Compute Gallery
- Azure Policy 和策略仪表板
- Azure Automanage 计算机配置