Требовать несколько имен тегов для группы ресурсов Azure

У меня есть следующий вариант использования: я хотел бы иметь политику Azure, требующую наличия двух обязательных тегов: Environment и Project для групп ресурсов. Не должно быть возможности создать новую группу ресурсов без этих двух тегов, а уже созданные группы ресурсов, не имеющие этих двух тегов, должны отображаться как несоответствующие. Пока это звучит как прямой сценарий, но я не получаю ожидаемого результата, и мне становится все труднее и труднее сохранять рассудок, поэтому, пожалуйста, посоветуйте.

Я просмотрел несколько тем в Stack Overflow, а также эту статью Microsoft: Как создать политику Azure аудита с несколькими параметрами. .

Я использую следующий код:

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
          "field": "tags['Environment']",
          "exists": "false"
        },
        {
          "field": "tags['Project']",
          "exists": "false"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

Примечание. Я удалил параметры в процессе устранения неполадок и заменил их значениями для упрощения. Результат был таким же при использовании параметров вместо явных значений.

Насколько я понимаю, allOf должен действовать как логическое И и должен требовать выполнения всех условий: быть группой ресурсов, иметь тег Environment и иметь тег Project.

Итак, каков результат? При создании новой группы ресурсов проверка не позволяет продолжить без указания тегов для среды и проекта:

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

Дело в том, что это позволяет мне продолжать дальше только с одним предоставленным тегом:

  • Только окружающая среда

  • Только проект

Если мы посмотрим на статус соответствия, вы можете увидеть, что группа ресурсов помечена как соответствующая политике:

но он имеет только один тег - Project, без тега Environment... и все же помечен как совместимый.

Итак, после этого долгого обхода, мой вопрос: как сделать обязательным наличие этих двух тегов - Environment и Project. Могут быть и другие теги, но эти два должны быть обязательными и не позволять создавать новые группы ресурсов без их предоставления, а старые группы ресурсов должны быть помечены как несоответствующие, если оба отсутствуют.

Что мне не хватает, что он не работает, как ожидалось?

Я также использовал код из статьи ... 1: 1 ... копировать-вставить, снова я смог продолжить только с одним тегом.

Пожалуйста Поддержи.

Я следил за другими примерами из переполнения стека в официальной статье Microsoft. Даже предложенный пример из статьи Microsoft не работал должным образом или, по крайней мере, не соответствовал моим ожиданиям.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

  1. В настоящее время вы сканируете RG
  2. Текущая RG не имеет тега Environment
  3. Текущий RG не имеет тега Project

Мы можем сформулировать это так: «Мой элемент не соответствует требованиям, если это RG, у которого нет среды И нет проекта тегов».

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

Вы хотите добавить сюда условие AnyOf, чтобы убедиться, что оно прерывается, если тот или иной тег не существует. Сформулируем это следующим образом: «Мой элемент несовместим, если это RG, у которого нет среды ИЛИ нет проекта тегов».

Код:

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
          "anyOf": [
            {
              "field": "tags['Environment']",
              "exists": "false"
            },
            {
              "field": "tags['Project']",
              "exists": "false"
            }
          ]
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

О, чувак, это так очевидно, что это просто невозможно не заметить. :D Спасибо за поддержку!

Ivan Mirchev 15.02.2023 08:53

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