You need to enable JavaScript to run this app. 如何在Azure中创建并应用强制标签策略 拦截无标签资源部署
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure中创建并应用强制标签策略 拦截无标签资源部署

强制要求资源带标签、拒绝无标签部署的Azure CLI操作指南

前提条件

  • 已安装Azure CLI并通过az login登录到目标订阅
  • 当前账号拥有订阅级别的所有者或策略参与者权限

步骤1:创建自定义策略定义

运行以下命令直接创建符合要求的策略定义,仅作用于可索引资源,未携带标签的部署会被直接拦截:

az policy definition create --name "deny-untagged-indexed-resources" \
  --display-name "Deny creation of indexable resources without tags" \
  --description "Enforce all indexable resources to have at least one tag assigned for resource management and troubleshooting" \
  --rules '{
    "if": {
      "allOf": [
        {
          "field": "tags",
          "exists": false
        },
        {
          "field": "type",
          "notEquals": "Microsoft.Resources/subscriptions/resourceGroups"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  }' \
  --mode Indexed

参数说明:

  • --mode Indexed 限定策略仅作用于支持标签和位置的可索引资源,完全匹配需求
  • 上述规则默认排除了资源组的标签校验,如果你需要连资源组也强制加标签,直接删除"field": "type", "notEquals": "Microsoft.Resources/subscriptions/resourceGroups"这一行即可

如果你需要强制指定必须存在的固定标签(比如CostCenter、Owner等),可以把rules参数内的if块替换为以下内容,仅当资源缺少任意一个指定标签时才会拦截部署:

"if": {
  "anyOf": [
    { "field": "tags['CostCenter']", "exists": false },
    { "field": "tags['Owner']", "exists": false }
  ]
}

步骤2:将策略分配到目标订阅

策略定义创建完成后需要分配到对应范围才能生效,先获取当前订阅ID:

# 如果要操作非当前订阅,先执行az account set --subscription <订阅名称/ID>切换
subscription_id=$(az account show --query id --output tsv)

执行策略分配命令:

az policy assignment create --name "enforce-tags-subscription-assignment" \
  --display-name "Enforce tag requirement for all resources in subscription" \
  --policy "deny-untagged-indexed-resources" \
  --scope "/subscriptions/$subscription_id" \
  --enforcement-mode Default

参数说明:

  • --enforcement-mode Default 表示策略直接生效,会真实拦截不符合要求的部署;如果需要先验证合规情况不拦截,可改为DoNotEnforce,此时只会生成合规性报告不会拒绝部署
  • 如果需要排除部分资源组不受该策略约束,可添加--not-scopes "/subscriptions/$subscription_id/resourceGroups/<要排除的资源组名>"参数,多个排除项用空格分隔

步骤3:验证策略效果

你可以尝试部署一个不带标签的测试资源,部署请求会直接被策略拒绝,即代表配置生效。
如果需要查看当前订阅的合规性统计,可运行以下命令:

az policy state summarize --scope "/subscriptions/$subscription_id" --policy-definition-name "deny-untagged-indexed-resources"

注意事项

  • 该策略仅拦截新的部署请求,不会处理已存在的无标签存量资源,如需批量给存量资源加标签可使用Azure资源管理器的批量操作功能
  • 如有特殊资源类型不需要强制加标签,可在策略规则的if块中添加对应资源类型的排除规则即可

内容的提问来源于stack exchange,提问作者Sam Bayo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:54:04