如何以编程方式触发Azure Policy修正任务?
编程触发Azure Policy修正作业的解决方案
方法1:Azure CLI
- 先查询目标策略分配的ID:
az policy assignment list --query "[].{name:name, id:id, displayName:displayName}" -o table - 若策略包含多个修正任务,先列出可用的修正任务:
az policy remediation list --policy-assignment "<policy-assignment-id>" - 创建并触发修正作业:
资源组级修正
az policy remediation create --name "<自定义修正名称>" --policy-assignment "<policy-assignment-id>" --resource-group "<资源组名称>"订阅级修正az policy remediation create --name "<自定义修正名称>" --policy-assignment "<policy-assignment-id>" --scope "/subscriptions/<订阅ID>"
方法2:Azure PowerShell
- 先安装PolicyInsights模块:
Install-Module -Name Az.PolicyInsights -Force - 查询策略分配信息:
Get-AzPolicyAssignment | Select-Object Name, Id, DisplayName - 触发修正作业:
$remediationConfig = @{ Name = "MyAutoRemediation" PolicyAssignmentId = "/subscriptions/<订阅ID>/providers/Microsoft.Authorization/policyAssignments/<策略分配名称>" ResourceGroupName = "<资源组名称>" # 订阅级修正可省略此参数 } Start-AzPolicyRemediation @remediationConfig
方法3:Azure REST API
- 发送POST请求创建修正作业,以订阅级为例:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}?api-version=2021-10-01 - 请求体示例:
{ "properties": { "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{assignmentName}" } } - 需通过Azure AD服务主体获取授权令牌,在请求头中携带
Authorization: Bearer <token>。
方法4:自动化流程编排
- Azure Logic Apps:添加「Azure Policy - 创建修正」动作,配置策略分配ID、修正名称等参数,设置定时触发(如每日执行)或事件触发(如资源合规状态变更)。
- Azure Automation Runbook:编写PowerShell/Python脚本封装触发逻辑,绑定自动化账户的计划任务,实现定期自动触发。
注意事项
- 执行操作的身份(服务主体/用户)需具备
Microsoft.PolicyInsights/remediations/write权限,以及策略修正涉及的资源修改权限(如虚拟机、存储账户的编辑权限)。 - 可通过
az policy remediation show或Get-AzPolicyRemediation命令查询修正作业的执行状态和结果。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

