Настраиваемая политика Azure: у ресурса не должно быть неизвестного тега - как?

В этом примере есть два допустимых имени тега для ресурса.

  • Среда
  • Клиент

Я хочу создать политику, которая оценивает ресурс как несовместимый, если ему присвоен тег, который не соответствует ни одному из вышеперечисленных. (Обратите внимание, что я хочу избегать использования параметров, предпочитая, чтобы допустимые имена тегов были «встроены» в определение.)

Я пробовал следующий код, однако он отмечает ресурсы как соответствующие, если у них есть тег, отличный от указанного выше.

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

Может ли кто-нибудь увидеть, где я ошибаюсь?


person Paul Holmes    schedule 28.10.2020    source источник


Ответы (1)


Если я правильно понимаю, можно создать ресурс с:

  • нет тегов
  • только тег "Клиент"
  • только тег "Environment"
  • Только теги "Клиент" и "Среда"

Все остальные случаи необходимо заблокировать.

{
  "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": {}
}
person Kamil Wiecek    schedule 31.10.2020
comment
Я должен был добавить, что для простоты вопрос задается только этими двумя именами тегов, но в приложении можно масштабировать до десяти или более имен тегов. - person Paul Holmes; 01.11.2020