【问题标题】:Azure Custom Policy: Resource Must Not Have Unknown Tag - How?Azure 自定义策略:资源不能有未知标记 - 如何?
【发布时间】:2020-10-28 21:57:46
【问题描述】:

对于这个例子,一个资源有两个允许的标签名称。

  • 环境
  • 客户

我想创建一个策略,如果给定的标签不是上述任何一种,则将资源评估为不合规。 (请注意,我想避免使用参数,希望允许的标签名称在定义中被“烧录”。)

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

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

谁能看出我哪里出错了?

【问题讨论】:

    标签: azure-policy


    【解决方案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": {}
    }
    

    【讨论】:

    • 我应该补充一点,为简单起见,问题只是提出这两个标签名称,但在应用程序中可以扩展到十个或更多标签名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多