首页 > 解决方案 > Azure Policy Deny:如果资源组名称中不存在标记之一

问题描述

我创建了一个 Azure 策略,如果用户没有使用键“Env”或“use”指定标签,我想拒绝创建资源组

但是,当我使用 Env 标签创建资源组时,它会阻止我,它只允许我同时添加 env 和 use 的标签。

根据我的理解,azure 策略中的“anyof”被用作“OR”,但我的代码表现不一样

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
      },
      {
        "anyof": [
          {
            "field": "tags.Env",
            "exists": false
          },
          {
            "field": "tags.use",
            "exists": false
          }
        ]
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

根据 Chris 的建议,我已经处理了标签名称和值,但它在政策中给了我一个错误,并且它没有采用“NOT”

{
  "mode": "all",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
          "not":{
        {
          "field": "tags.Env",
          "equals" : "Prod"
        },
        {
          "field": "tags.OS",
          "equals" : "windows"
        }
                  }
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

标签: azureazure-resource-managerazure-resource-group

解决方案


现在,就像您提到的那样,该政策正在评估“tags.Env 不存在或 tags.use 不存在”。如果任一标签不存在,您将被拒绝。

如果“tags.Env 不存在且 tags.use 不存在”,您想要拒绝。这意味着它们都丢失了,这是您要防止的。

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
      },
      {
         "field": "tags.Env",
         "exists": false
       },
       {
         "field": "tags.use",
         "exists": false
       }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

推荐阅读