Необычное поведение политики Azure при создании группы ресурсов без тега

Я применил политику Azure, которая заставляет пользователя назначать тег при создании группы ресурсов.

Когда я создаю новую виртуальную машину, а затем заполняю все поля, я создаю новую группу ресурсов в том же мастере, а затем нажимаю кнопку обзора и создания. На этот раз политика лазури срабатывает правильно и блокирует меня, так как вновь созданная RG не создается с тегом.

Но когда я захожу в групповую политику ресурсов и нажимаю кнопку Добавить, чтобы создать новую RG. тогда я не заполняю теги, тогда и политика не получает триггер. Я не удивлен, почему в первый раз эта политика работает, но не во второй раз.

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

2 ответа

Решение

Похоже, это понятно, это не связано с политикой Azure, ваша политика должна работать нормально, это может быть ошибкой лезвия создания группы ресурсов на портале.

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

Моя тестовая политика:

Если это необходимо, вы можете открыть вопрос в Github.

Выявленное несоответствие вызвано различиями в представлении JSON группы ресурсов.

В зависимости от того, что вы нажимаете на портале, группа ресурсов JSON может не иметь свойства тегов, например:

{
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
    "name": "foo",
    "location": "eastus",
    "properties": {
        "provisioningState": "Succeeded"
    }
}

В других случаях он может быть создан с помощью свойства пустых тегов, например:

{
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
    "name": "foo",
    "location": "eastus",
    "properties": {
        "provisioningState": "Succeeded"
    },
    "tags": {}
}

"exists": "false" условие в вашем правиле политики будет срабатывать только в том случае, если свойство "tags" отсутствует или имеет значение null, поэтому группа ресурсов с "tags": {} будет обходить вашу политику, даже если у нее нет тегов.

Другие вопросы по тегам