如何配置Azure生产订阅仅允许ARM模板或Terraform部署、禁用门户手动部署
仅允许ARM/Terraform部署、拦截Azure门户手动部署的配置方案
你之前配置的策略没有区分部署请求的来源,所以会同时拦截合法的IaC部署,可通过以下规则调整实现需求:
核心判断依据
所有Azure门户发起的部署请求,在请求的声明字段中都会携带user_impersonation scope标识,而使用服务主体执行的ARM模板部署、Terraform部署不会包含该标识,可通过该特征区分两种部署类型。
自定义Azure Policy配置规则
创建自定义策略并绑定到你的production订阅或者上层管理组即可,策略的核心规则逻辑如下:
{ "mode": "All", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Resources/deployments" }, { "value": "[contains(request().claims['http://schemas.microsoft.com/identity/claims/scope'], 'user_impersonation')]", "equals": true } ] }, "then": { "effect": "deny" } } }
配套规则优化建议
- 所有IaC部署统一使用专用AAD服务主体执行,禁止使用个人用户账号运行ARM/Terraform部署脚本,避免个人账号的
user_impersonation标识触发拦截规则 - 如需开放应急门户操作权限,可在策略的排除项中添加指定的AAD用户/服务主体对象ID,无需调整策略核心逻辑
- 规则上线前先在测试订阅完成验证:分别用门户创建测试资源(应触发拦截)、用IaC工具部署相同资源(应正常通过),确认规则符合预期再推送到生产环境
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

