You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Azure Runbook触发Azure Policy?含预算触发场景测试需求

从Azure Runbook触发Azure Policy的实现方案

核心思路

要临时停止订阅内的资源预配,本质是通过Runbook启用限制资源创建的Azure Policy(比如禁止特定资源类型或全量资源部署的策略),或是启用对应的政策计划(如内置的Deny all resource creation类计划)。完整流程为:预算阈值触发动作组 → 动作组调用Runbook Webhook → Runbook执行命令启用目标Policy。

具体步骤

1. 准备目标Azure Policy

  • 提前创建或选定要触发的Policy:可以自定义规则为拒绝所有资源部署,也可直接使用Azure内置的“拒绝资源创建”类Policy。
  • 记录Policy的资源ID/名称、目标订阅ID,后续Runbook脚本需要用到这些信息。

2. 编写Runbook脚本(PowerShell示例)

Runbook需完成的核心操作:创建Policy分配(若未分配),或更新现有分配的启用状态。示例脚本如下:

# 通过系统托管身份登录Azure
Connect-AzAccount -Identity

# 定义关键参数
$subscriptionId = "你的订阅ID"
$policyDefinitionName = "Deny-All-Resource-Creation" # 替换为你的Policy名称
$policyAssignmentName = "临时停止资源预配"

# 切换至目标订阅
Set-AzContext -Subscription $subscriptionId

# 检查Policy分配是否存在,不存在则创建,存在则启用
$existingAssignment = Get-AzPolicyAssignment -Name $policyAssignmentName -Scope "/subscriptions/$subscriptionId" -ErrorAction SilentlyContinue

if (-not $existingAssignment) {
    # 创建新的Policy分配
    New-AzPolicyAssignment -Name $policyAssignmentName -PolicyDefinitionName $policyDefinitionName -Scope "/subscriptions/$subscriptionId"
} else {
    # 启用已存在的Policy分配(将执行模式设为Default)
    $existingAssignment.Properties.EnforcementMode = "Default"
    Set-AzPolicyAssignment -InputObject $existingAssignment
}

注意:需给Runbook的系统托管身份分配订阅级别的Policy Contributor角色,确保其具备管理Policy分配的权限。

3. 测试触发流程

手动测试Runbook

  • 在Azure自动化账户中直接启动Runbook,检查作业日志确认执行成功,再尝试在订阅内创建资源,验证Policy是否生效(创建操作被拒绝)。

模拟预算触发动作组

  • 在Azure门户的动作组页面,点击“测试动作组”,选择关联的Webhook动作触发Runbook。
  • 验证结果:查看Runbook作业日志确认执行状态,再测试资源创建操作,确认Policy已生效。

4. 恢复资源预配的反向操作

若需恢复资源预配,可编写另一个Runbook,将Policy分配的EnforcementMode改为DoNotEnforce,或直接删除Policy分配,同样通过动作组触发执行。


内容的提问来源于stack exchange,提问作者Sahil Wadehra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:05:30