关于 azure-policy
面向负责 Azure 治理与安全基线的团队,指导使用 Azure Policy 在订阅和管理组范围内审计、阻止或修复不合规配置。重点包括策略效果选择、分阶段部署和合规监控。
主要功能
- 01选择 Audit、Deny 和修复效果
- 02使用内置策略与倡议
- 03在管理组范围分配策略
- 04按审计到拒绝的步骤推广
- 05通过修复任务处理现有资源
- 06监控合规状态并关联 Defender for Cloud
适用场景
- 01分阶段部署组织安全基线
- 02在管理组范围实施资源护栏
- 03自动补齐诊断设置等关联资源
- 04修复存量资源的策略不合规项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vinayaklatthe/ microsoft-security-skills --skill azure-policy安装后在 Claude Code 中输入/azure-policy确认已加载。
详细介绍
Azure Policy
Azure Policy 可强制执行组织标准,并大规模评估合规性,通过审核或阻止不合规的资源配置,并自动修复偏差。它是 Azure 环境的预防性控制平面,也是 Defender for Cloud 法规合规功能背后的引擎。
何时使用
在订阅和管理组中实施预防性和侦测性治理/安全防护措施。使用此技能选择效果、设计计划并安全地推出。
请勿将此技能用于选择 RBAC 角色(azure-role-selector)、Defender 安全状况(defender-for-cloud-hardening)或 Bicep/IaC 模板。
根据目标选择策略效果
| 目标 | 效果 | 说明 |
|---|---|---|
| 显示不合规资源,但不阻止 | Audit | 仅用于报告;默认起点 |
| 阻止创建/更新不合规资源 | Deny | 预防性;先在 Audit 模式下测试 |
| 自动添加必需的标记/属性 | Modify(或 Append) | 修改请求 |
| 部署缺失的相关资源(例如诊断设置) | DeployIfNotExists(DINE) | 需要托管标识 |
| 显示缺失的相关资源 | AuditIfNotExists(AINE) | 仅用于报告 |
| 跨多个资源执行条件逻辑 | Initiative | 将多个策略分组 |
| 阻止创建来宾用户/特定 SKU | Deny + 参数 | 将允许的 SKU 参数化 |
| 强制执行 Defender for Cloud 基准 | 内置 MCSB initiative | 不要自行编写 |
**经验法则:**每个新策略都先以 Audit 模式运行 14-30 天。查看合规性。将关键控制切换为 Deny。对于“理应始终存在”的资源(诊断设置、Defender 代理),使用 DeployIfNotExists。切勿一开始就在整个租户范围内使用 Deny。
方法
-
有内置计划时优先使用——Microsoft Cloud Security Benchmark (MCSB) 是默认选项。根据合规范围添加法规计划(CIS、ISO 27001、NIST 800-53、PCI DSS、HIPAA)。 验证:在根管理组分配了 MCSB 计划;可在 Defender for Cloud 中查看合规状态。
-
仅在没有内置定义时编写自定义定义——使用 ARM JSON 编写自定义策略:
policyRule(条件 + 效果)、parameters(可重用输入)、metadata(类别)。每项策略只承担单一用途;通过计划将策略分组。 -
计划 = 分组后的策略——将相关策略打包到一起(例如,包含 30 项策略的“企业安全 基线”计划)。为便于管理,应分配计划,而非单独分配策略。
-
在管理组范围内设置范围——在管理组中分配,以便在子订阅间继承。谨慎使用排除项,并记录理由。 验证:策略合规性中可查看分配范围;子订阅会继承策略。
-
逐步推出:Audit → 查看 → Deny——先以 Audit 模式分配。等待 14-30 天,提取 不合规列表,与工作负载所有者合作进行修复或记录例外情况。然后将分配切换为 Deny。 验证:切换为 Deny 前,不合规数量已降至可接受的基线;已通知工作负载所有者。
-
使用修复任务修复现有资源——
DeployIfNotExists和Modify策略仅对新资源/已更新资源生效。使用修复任务使 现有资源达到合规要求。策略分配的托管标识负责执行更改。 验证:分配策略后已创建修复任务;成功率 > 95%;已对失败项进行分类处理。 -
监控并与 Defender for Cloud 集成——合规状态是日常仪表板。 Defender for Cloud 使用策略提供建议;建议未通过即表示策略未通过。
防护措施
- 先在审计模式下测试 Deny 策略——范围过大的 Deny 可能会阻止合法部署和流水线。 午夜时首次启用 Deny = 09:00 的生产部署被阻止。
- 使用参数让策略可在不同环境间复用。 将区域 / SKU / 标记值硬编码 = 每个环境都需要一条策略,必然产生配置偏差。
- 不要过度排除;每项排除都会削弱防护措施,必须有合理依据。 排除项是一份例外清单——记录原因,并设置到期时间。
- DeployIfNotExists 需要具备正确角色的托管标识。 如果分配项的标识没有相应的 RBAC 权限,修正操作会悄无声息地失败。
- 不要编写已有的内置策略。 MCSB / 法规计划由 Microsoft 维护;自定义副本会偏离 Microsoft 指引。
- 策略 ≠ RBAC。 策略控制资源配置;RBAC 控制谁可以执行操作。两层都不可或缺。
常见反模式
- “第一天就在整个租户范围内部署 Deny”——首次生产部署就会失败。先使用审计模式。
- “每个环境一条策略,直接复制粘贴”——参数硬编码,维护工作苦不堪言。参数化 + 每个环境分配一条策略。
- “跳过 MCSB 计划——我们有自己的”——自有方案会偏离;MCSB 由 Microsoft 维护。
- “排除不符合合规要求的订阅”——这会掩盖问题。修复问题,或正式接受风险。
- “不创建修正任务就部署 DeployIfNotExists”——现有资源将永远不合规;只有新资源会应用配置。
- “不经测试就使用自定义 JSON”——首次分配语法错误的策略 = 不会生效,也没有警告。先在沙盒订阅中测试。
示例提示词
Create an Azure Policy initiative to enforce a security baseline at the management group scope.How do I deny non-compliant resources and auto-remediate with DeployIfNotExists?Apply governance guardrails at the management group scope with inheritance.Audit resource configuration before switching policies to Deny.Parameterise an allowed-locations policy for reuse across dev / test / prod.Build a remediation task to bring existing resources into compliance.
Microsoft Learn
- Azure Policy 概述:https://learn.microsoft.com/azure/governance/policy/overview
- 策略效果:https://learn.microsoft.com/azure/governance/policy/concepts/effects
- 计划(策略集):https://learn.microsoft.com/azure/governance/policy/concepts/initiative-definition-structure
- 修正任务:https://learn.microsoft.com/azure/governance/policy/how-to/remediate-resources
- 管理组范围:https://learn.microsoft.com/azure/governance/management-groups/overview
- Microsoft Cloud Security Benchmark:https://learn.microsoft.com/security/benchmark/azure/overview
- DeployIfNotExists 模式:https://learn.microsoft.com/azure/governance/policy/how-to/programmatically-create
- 策略合规性:https://learn.microsoft.com/azure/governance/policy/how-to/get-compliance-data