Azure Policy 拒绝:如果资源组名称中不存在标记之一

Azure Policy Deny :if one of the tag not present in the resource group name

我已经创建了一个 Azure Policy,如果用户没有使用键 "Env" 或 "use"

指定标签,我想拒绝创建资源组

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

根据我的理解 "anyof" 在 Azure 策略中用作 "OR" 但我的代码表现不一样 wa

{
  "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": {}
}

现在,正如您提到的,政策正在评估 "tags.Env doesn't exist OR tags.use doesn't exist"。如果任何一个标签都不存在,您将被拒绝。

你想要的是否认"tags.Env doesn't exist AND tags.use doesn't exist"。这意味着它们都丢失了,而这正是您要避免的。

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