Azure Policy
编写并分配 Azure Policy 定义,在订阅或资源组范围内自动强制执行命名约定、允许的资源类型和位置限制。
Azure Policy 是 CoddyKit 上的免费 Azure Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Azure Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Azure Fundamentals 课程共包含 4 节课。
什么是 Azure Policy
Azure Policy 是一项治理服务,允许您定义、分配和管理称为策略定义的规则,用于控制或审核 Azure 资源的配置。RBAC 控制的是谁可以执行操作,而 Azure Policy 控制的是最终资源配置允许是什么样。您可以使用它来强制执行命名约定、已批准的资源类型和必需的安全配置等组织标准。
策略定义
策略定义是一份 JSON 文档,用于定义要针对资源评估的条件,以及条件满足时要应用的效果。Azure 提供数百个涵盖常见场景的内置策略定义。如果内置策略不符合您的要求,您也可以创建自定义策略定义。策略定义是可重复使用的对象,必须先分配到某个范围,才能生效。
// Example built-in policy: require a specific tag on all resources
// Policy definition logic (simplified):
{
'if': {
'field': 'tags[Environment]',
'exists': 'false'
},
'then': {
'effect': 'deny'
}
}策略效果
策略定义中的效果决定策略条件触发时会发生什么。主要效果包括:Deny——阻止违反策略的资源创建或更新;Audit——允许操作,但在合规性报告中记录警告;Append——在创建资源前为其添加必需字段(例如标记);Modify——更改现有资源或新资源的某个属性;DeployIfNotExists——当条件不满足时部署相关资源(例如为每个 VM 部署诊断扩展)。
策略分配
策略分配会将策略定义应用到特定范围:管理组、订阅或资源组。该范围内的所有资源(以及子范围中的资源)都会根据所分配的策略进行评估。分配可以包含参数——例如,限制允许使用的 Azure 区域的策略可以进行参数化,从而在不同管理组中使用不同的区域列表分配同一个定义。
# Assign a built-in policy to restrict allowed locations
az policy assignment create \
--name 'allowed-locations' \
--policy 'e56962a6-4747-49cd-b67b-bf8b01975c4c' \
--scope /subscriptions/<sub-id> \
--params '{"listOfAllowedLocations": {"value": ["eastus", "westeurope"]}}'
# List all policy assignments in a subscription
az policy assignment list \
--scope /subscriptions/<sub-id> \
--output table计划定义(策略集)
计划定义(也称为策略集)会将多个相关策略定义组合成一个可分配的软件包。您无需分配 20 个独立策略,而只需分配一个计划。Azure 为 ISO 27001、NIST SP 800-53、Azure Security Benchmark 和 PCI DSS 等合规性框架提供内置计划。例如,分配 CIS Microsoft Azure Foundations Benchmark 计划后,系统可以同时根据 180 多项安全控制措施评估您的订阅。
# Assign the Azure Security Benchmark initiative
az policy assignment create \
--name 'azure-security-benchmark' \
--policy-set-definition '1f3afdf9-d0c9-4c3d-847f-89da613e70a8' \
--scope /subscriptions/<sub-id>合规性报告
分配策略后,Azure 会评估范围内的所有现有资源,并生成合规性报告。报告会显示总体合规率(合规资源数 / 资源总数)、每个资源的合规状态,以及具体失败的策略条件。您可以按策略计划、范围或资源类型进行筛选。报告会列出不合规资源违反的确切策略规则,为修正问题提供指导。
# Get policy compliance summary
az policy state summarize \
--subscription <sub-id> \
--output json
# List all non-compliant resources
az policy state list \
--filter 'complianceState eq NonCompliant' \
--output table修正任务
对于效果为 DeployIfNotExists 或 Modify 的策略,Azure 可以创建修正任务,使现有不合规资源达到合规状态。例如,某个将 Log Analytics 代理部署到每个 VM 的 DeployIfNotExists 策略可以触发修正任务,为所有当前缺少该代理的现有 VM 安装代理。新资源会在创建时自动修正;现有资源则需要显式创建修正任务。
# Create a remediation task for existing non-compliant resources
az policy remediation create \
--name 'remediate-vm-logs' \
--policy-assignment 'deploy-vm-log-analytics' \
--resource-group myRG策略豁免
有时,某些特定资源确实需要排除在策略之外——例如无法修改的旧资源,或在变更请求中记录的已批准例外。策略豁免允许您将特定资源或资源组排除在策略分配之外,而不必全局移除策略。豁免可以选择设置到期日期和类别(Waiver 或 Mitigated),以记录例外原因。
# Create a policy exemption for a specific resource group
az policy exemption create \
--name 'legacy-rg-exemption' \
--policy-assignment 'allowed-locations' \
--scope /subscriptions/<sub-id>/resourceGroups/legacyRG \
--exemption-category Waiver \
--expires-on '2027-01-01T00:00:00Z' \
--description 'Legacy workload pending migration'DeployIfNotExists:大规模配置
DeployIfNotExists 是最强大的策略效果之一。当资源创建时缺少必需的相关资源(例如没有诊断扩展的 VM),该策略会自动触发 ARM 模板部署,以添加缺失的组件。这使 Azure Policy 能够成为自动配置管理工具——确保每个 VM 始终配有监视代理、每个存储账户始终启用高级威胁防护,并确保每个 SQL Database 始终启用审核。
常见策略使用场景
组织会在许多治理场景中使用 Azure Policy。位置限制——出于数据主权考虑,仅允许在已批准的 Azure 区域中创建资源。允许的资源类型——阻止部署成本高昂或未经批准的服务。标记强制——要求所有资源都具有 CostCentre 和 Environment 标记。SKU 限制——在 Non-Production 订阅中,将 VM 大小限制在符合成本要求的层级。安全基线——强制最低使用 TLS 1.2、禁用存储账户的公共网络访问,并要求使用专用终结点。
Azure Policy 与 RBAC 的比较
了解 RBAC 和 Azure Policy 的不同作用非常重要。RBAC 控制谁可以执行操作——根据身份授予或拒绝操作。Azure Policy 控制资源配置必须是什么样——无论由谁执行操作,它都会评估并强制执行资源属性。在治理完善的环境中,两者缺一不可:RBAC 确保只有获得授权的人员才能部署资源,而 Azure Policy 确保这些资源符合配置标准。
快速检查
请检验您对本课中 Microsoft Azure Fundamentals (AZ-900) 概念的理解。
课程回顾
本课您学到了:Azure Policy 可以在任意范围定义条件和效果,以控制资源配置,计划定义可以将多个策略组合成一个可分配的合规性软件包,以及DeployIfNotExists 可以大规模自动强制配置缺失的组件。接下来我们将探讨资源标记和资源锁,以保护 Azure 资源。
常见问题解答
「Azure Policy」课时是免费的吗?
是的 — 「Azure Policy」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Azure Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Azure Fundamentals 课程共包含 4 节课。
「Azure Policy」这节课中我会学到什么?
编写并分配 Azure Policy 定义,在订阅或资源组范围内自动强制执行命名约定、允许的资源类型和位置限制。 你通过在浏览器中直接运行的动手代码来练习 Azure Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Azure Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Azure Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Azure Policy」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Azure Fundamentals 课中编写并运行代码吗?
能。每节 Azure Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 管理组和订阅
- Azure Policy
- 资源标记和资源锁
- Azure 蓝图和合规性