你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
采用策略驱动的规范措施
在使用策略之前,需要了解它们在 Azure 登陆区域参考实现中使用的位置以及原因。 本文将帮助你了解是否要阻止 DeployIfNotExists (DINE) 或修改策略在 Azure 环境中进行更改。
为何使用 DINE 和修改策略?
DINE 和 Modify 策略是 Azure 登陆区域参考实现的一部分。 它们可帮助你和组织确保登陆区域(也称为订阅)及其中的资源合规。 随着 Azure 环境的扩展,这些策略还消除了平台和着陆区团队的操作负担。
例如,假设预配了新的登陆区域订阅,并放置在“corp”管理组中。 然后,DINE 和修改策略会针对登陆区域订阅执行以下操作:
- 启用 Microsoft Defender for Cloud。 配置 Defender for Cloud 导出到管理订阅中的中央 Log Analytics 工作区。
- 根据策略分配上配置的策略参数,为不同的受支持产品启用 Defender for Cloud。
- 将 Azure 活动日志配置为发送到管理订阅中的中心 Log Analytics 工作区。
- 配置所有资源的诊断设置,以便将其发送到管理订阅中的中央 Log Analytics 工作区。
- 为虚拟机和 Azure 虚拟机规模集(包括 Azure Arc 连接的服务器)部署所需的 Azure Monitor 代理。 连接管理订阅中的中央 Log Analytics 工作区。
注意
可以随时或在部署 Azure 登陆区域参考实现期间禁用上述选项。
前面的列表显示了作为 Azure 登陆区域加速器的一部分分配的所有策略的子集。 有关可由 Azure 登陆区域引用实现分配的策略的完整列表,请参阅 azure 登陆区域引用实现中包含的
Azure 登陆区域 Bicep 仓库是模块化的。 可以使用 ALZ 默认策略分配模块部署上述默认策略。
所有分配的策略都有助于你和登陆区域所有者保持合规。 不会通过 DINE 或 Modify 策略部署实际的工作负荷资源。 我们也不推荐这样做。 有关详细信息,请参阅 是否应使用 Azure Policy 部署工作负荷?。 这些 DINE 策略仅部署或配置辅助或支持资源或设置。
Azure 登陆区域参考实现使用 DINE Azure 策略来帮助你在 Azure 环境中实现策略驱动的治理。 但是,你可能无法使用 DINE 或修改策略,或者由于以下原因而无法启用这种类型的 Azure 策略 效果:
- 法规合规性策略、标准或法律限制。
- 严格的变更控制流程,要求人工批准 Azure 环境中的每项操作。
- 缺乏专业知识、经验和了解如何管理和使用 DINE 策略。
- 工作负载应用程序团队在基础架构即代码 (IaC) 中定义所有工作负载资源配置(包括辅助资源、支持资源和设置)的组织要求。
如果您符合上述示例或类似情境,本文将帮助您了解如何采用 Azure 登陆区概念架构 并遵循其 设计原则。 虽然最初不会使用某些策略,但你可以选择在未来逐步启用它们。 目标是帮助你实现 策略驱动的治理。
重要
在整篇文章中,你将看到用于强制模式术语的两个可能值:
- Disabled 或 DoNotEnforce
- Enabled 或 Default
此 Azure 门户为强制模式使用 Disabled 和 Enabled。 Azure 资源管理器 (ARM) 模板和其他 API 接口对相同的选项使用 DoNotEnforce 和 Default。
有关详细信息,请参阅 强制模式。
如果仍确定组织无法使用 DINE 或修改策略,本文介绍如何阻止策略(也称为禁用)对 Azure 环境进行自动更改。
对 资源选择器 的支持也适用于策略驱动的治理,以确保遵守安全部署做法(SDP)。 资源选择器提供了基于资源位置、资源类型或资源是否具有位置等因素,逐步推出策略分配的功能。 更多内容请参见本文档。
方法概述
下图总结了建议的分阶段方法:
显示 DINE 阶段概述的图形
- 在策略分配上将强制模式设置为
DoNotEnforce
:- 通过使用此功能,可以修改分配的行为,以有效地成为仅审核策略,而无需修改基础策略定义。
- 此方法还允许您在需要时使用 修正任务 手动处理不合规资源。
- 在策略分配上将强制模式设置为
Default
,以精简范围重启 DINE 策略分配的自动修正:- 可以选择使用整个环境,例如沙盒管理组。
- 或者,可以使用非关键工作负荷订阅。
- 将强制模式设置为
Default
,以在整个 Azure 环境中对剩余的 DINE 策略进行策略分配。
由于法规合规性限制,某些客户永远无法超过第 1 阶段。 如有必要,这不是问题,且可以支持维持这种状态。 其他客户可以进入第 2 阶段和第 3 阶段,以完全采用 DINE 和 Modify 策略,以协助其 Azure 环境的策略驱动治理。
注意
本文中概述的方案和方法不适用于或推荐大多数客户。 查看 为何使用 DINE 和修改策略的部分?,然后确定这些策略是否适合你的环境并且是必需的。
阶段 1:禁用 DINE 和修改策略自动操作
分配策略时,默认情况下,策略定义中定义的 效果 将适用。 建议按原样保留策略定义。 例如,将策略分配效果保留为 DeployIfNotExists
。
与其更改策略定义或其效果,不如通过使用策略分配中的功能,以最小的努力来影响此行为。
使用 Azure 门户将强制模式设置为“已禁用”
此屏幕截图展示了如何在策略分配上使用 Azure 门户将强制模式设置为 禁用。 Disabled 也称为 DoNotEnforce。
使用 ARM 模板将强制模式设置为 DoNotEnforce
此代码示例演示如何使用 ARM 模板在策略分配中将 enforcementMode
指派为 DoNotEnforce
。 DoNotEnforce
也称为 Disabled
。
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2019-09-01",
"name": "PolicyAssignmentName",
"location": "[deployment().location]",
"properties": {
"description": "PolicyAssignmentDescription",
"policyDefinitionId": "[parameters('policyDefinitionId')]",
"enforcementMode": "DoNotEnforce"
… // other properties removed for display purposes
}
}
通过使用 强制模式,可以在不启动策略或触发 Azure 活动日志中的条目的情况下查看策略对现有资源的影响。 此方案通常称为“What If”,与安全部署做法保持一致。
即使 强制模式 设置为 DoNotEnforce
,也可以手动触发 修正任务。 可以修正特定的不相容资源。 还可以查看当强制模式设置为 Default
时,DINE 或修改策略将执行哪些操作。
重要
当强制模式设置为 DoNotEnforce
时,不会生成 Azure 活动日志中的条目。 如果要在创建不符合资源时收到通知,请考虑此因素。
永久停留在第 1 阶段状态
如 方法概述 部分所述,某些客户可能需要长期停留在 阶段 1,甚至因需求永久停留在该阶段。 此状态有效,客户可以在该状态中停留任意时长。
也许你需要永久或长期地保持这种状态,比如几年。 如果是这样,最好采用 AuditIfNotExists
(AINE) 策略效果和关联的定义,并将强制模式设置回 Default
。
注意
通过更改为使用 AINE 策略并将强制模式设置为 Default
,仍可实现禁用 DINE 的相同目标。
从 DINE 更改为 AINE,并将强制模式设置回 Default
作为阶段 1 的长期或永久方法时,将获取策略符合性状态的 Azure 活动日志条目。 可以从整个平台管理操作中的这些日志条目生成自动化工作流。
你将失去执行手动修正任务的功能。 与 DINE 策略不同,AINE 策略不会执行任何部署,无论是自动部署还是手动部署。
请记住更新策略定义以接受并允许 AuditIfNotExists
策略分配效果。
下表总结了不同类型的策略效果和强制模式组合的选项和含义:
策略效果 | 强制模式 | 活动日志条目 | 修正操作 |
---|---|---|---|
吃饭 | Enabled 或 Default | 是的 | 创建或资源更新后由平台触发的大规模修正。 如果在策略分配之前修改或预先存在依赖资源,则需要手动创建修正任务。 |
吃饭 | Disabled 或 DoNotEnforce | 不 | 需要手动创建修正任务。 |
修改 | Enabled 或 Default | 是的 | 在创建或更新期间自动修正。 |
修改 | Disabled 或 DoNotEnforce | 不 | 需要手动创建修正任务。 |
拒绝 | Enabled 或 Default | 是的 | 创建或更新被拒绝。 |
拒绝 | Disabled 或 DoNotEnforce | 不 | 允许创建或更新。 需要手动修正。 |
Audit/AINE | Enabled 或 Default | 是的 | 需要手动修正。 |
Audit/AINE | Disabled 或 DoNotEnforce | 不 | 需要手动修正。 |
注意
查看 响应 Azure Policy 状态更改事件 中的指南,以了解在计划基于策略状态事件生成自己的自动化时,是否使用 Azure 事件网格与 Azure Policy 集成提供了合适的方法。
阶段 2:在特定策略上启用 DINE 和修改策略或缩小范围
在此阶段中,你将了解如何在策略分配上将强制模式设置为 Default
。
完成 阶段 1后,确定你想要在特定策略或缩减作用域上测试并试用 DINE 和修改策略的完全自动化功能。 需要使用沙盒管理组或非生产工作负载订阅。
若要执行此过程,首先需要确定将用于测试和试用 DINE 和修改策略的完整自动化功能的策略或缩减范围。
下表显示了一些建议的范围和策略示例:
需要执行以下操作时: | 从以下范围中进行选择 | 要使用的策略示例 |
---|---|---|
- 测试 DINE/修改自动修正功能。 - 验证完整的部署过程和 CI/CD 管道(包括测试)是否受到影响。 - 验证工作负载可能如何受到影响。 |
- 沙盒订阅 - 沙盒管理组 -非生产工作负荷登陆区域订阅 - 企业级“canary”环境 |
- 将 Azure 活动日志配置为流式传输到指定的 Log Analytics 工作区。 - 部署 Defender for Cloud。 - 启用 Azure Monitor 以监控虚拟机或虚拟机规模集。 - 将诊断设置部署到 Azure 服务。 - 可能仅对计划内的特定服务启用。 |
你可能还决定对有限的范围或一组资源使用手动修正任务来测试这些策略如何影响你的环境。 有关如何创建修正任务的详细信息,请参阅 Azure Policy 文档 创建修正任务。
确定策略或策略以及分配策略的缩减范围后,下一步是分配策略并将强制模式设置为 Default
。 保留策略效果(例如 DeployIfNotExists
或 Modify
),就像所选的精简范围一样。
使用 Azure 门户将强制模式设置为“已启用”
此屏幕截图显示如何使用策略分配上的 Azure 门户将强制模式设置为“Enabled”。 Enabled 也称为 Default。
使用 ARM 模板将强制模式设置为“默认”
此代码示例展示如何在策略分配中使用 ARM 模板将 enforcementMode
设置为 Default
。 Default
也称为 Enabled
。
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2019-09-01",
"name": "PolicyAssignmentName",
"location": "[deployment().location]",
"properties": {
"description": "PolicyAssignmentDescription",
"policyDefinitionId": "[parameters('policyDefinitionId')]",
"enforcementMode": "Default"
… // other properties removed for display purposes
}
}
测试
此阶段的最后一步是执行所需的测试。 你希望验证 DINE 或修改政策是否以及如何影响并改变了你的工作负载、代码、工具和流程。
执行多个测试以捕获工作负荷的整个生命周期。 你需要确保完全了解 DINE 或修改策略进行的更改。
测试的一些示例包括:
- 工作负荷的初始部署。
- 将代码/应用程序部署到工作负载。
- 第 2 天操作和管理工作负载。
- 取消工作负载。
阶段 3:在任何地方启用 DINE 和修改策略
在此阶段中,你将了解如何在策略分配上将强制模式设置为 Default
。
我们假设在阶段 2 结束时进行的测试已成功通过。 或者,你可能对现在了解 DINE 或修改策略与工作负荷的交互方式感到满意。 现在,您可以在 Azure 环境的其余部分中推广使用 DINE 和修改策略。
若要继续,请遵循与 阶段 2中的步骤类似的步骤。 这一次,将所有 DINE 和 Modify 策略分配的强制模式设置为 Default
,适用于整个 Azure 环境。
下面是在此阶段中执行的步骤的高级概述:
- 删除专门用于 阶段 2 期间测试的分配。
- 在 Azure 环境中,浏览每个 DINE 和修改策略分配,并将强制模式设置为
Default
。 此过程显示在第 2 阶段的示例中。 - 按照创建修正任务中的指南,为不符合的现有资源创建修正任务。 如果新资源与策略规则和存在条件匹配,则会自动对其进行修正。
尽管在第 3 阶段,我们建议将强制模式设置为 Default
Azure 环境中的所有 DINE 和 Modify 策略,但此选项仍然是可选的。 你可以根据策略做出此选择,以满足你的需求和要求。
高级策略管理
对于大规模的 Azure 策略高级管理,请考虑实施企业策略作为代码 (EPAC) 来管理策略。 EPAC 提供使用 IaC 的有状态管理体验。 它通常适用于要求复杂的大型策略管理方案。