Azure自定义策略:资源一定不能具有未知标记-如何?

时间:2020-10-28 21:57:46

标签: azure-policy

在此示例中,资源有两个允许的标记名称。

  • 环境
  • 客户

我想创建一个策略,如果给定的标签不是以上两种,则将资源评估为不合规。 (请注意,我想避免使用参数,而是将允许的标记名称“烙印”到定义中。)

我尝试了以下代码,但是当它们具有除上述标记之外的其他标签时,它会将资源标记为合规。

  "mode": "Indexed",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "tags",
          "exists": "true"
        },
        {
          "field": "tags",
          "notContainsKey": "Environment"
        },
        {
          "field": "tags",
          "notContainsKey": "Client"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

有人可以看到我要去哪里吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,则可以创建以下资源:

  • 没有标签
  • 仅“客户”标签
  • 仅“环境”标签
  • 仅“客户”和“环境”标签

所有其他情况都必须被阻止。

{
  "mode": "All",
  "policyRule": {
    "if": {
      "not": {
        "value": "[if(equals(length(field('tags')),0),'noTags',if(and(equals(length(field('tags')),1),or(contains(field('tags'),'Environment'),contains(field('tags'),'Client'))),'environmentOrClientTagOnlyExists',                                if(and(equals(length(field('tags')),2),and(contains(field('tags'),'Environment'),contains(field('tags'),'Client'))),'environmentAndClientTagsExist','atLeastOneNotAllowedTagExists' )  )  )]",
        "in": [
          "noTags",
          "environmentOrClientTagOnlyExists",
          "environmentAndClientTagsExist"
        ]
      }
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}