Azure策略拒绝:如果资源组名称中不存在标签之一

时间:2019-01-10 21:23:38

标签: azure azure-resource-manager azure-resource-group

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

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

据我了解,天蓝色策略中的“ 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"
  }
}

根据克里斯的建议,我已经在标签名称和值上进行了研究,但这给了我政策上的错误,并且没有采用“不接受”

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

1 个答案:

答案 0 :(得分:1)

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

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

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