Руководство по системе управления тегами с помощью Политики Azure

Теги являются важной частью организации ресурсов Azure в таксономию. Если следовать рекомендациям по управлению тегами, с помощью тегов можно применять бизнес-политики с использованием службы "Политика Azure" или отслеживать затраты с помощью службы "Управление затратами". Независимо от метода и причины применения тегов, важно иметь возможность быстро добавлять, изменять и удалять эти теги в ресурсах Azure. Чтобы узнать, поддерживает ли ваш ресурс Azure теги, см. статью Поддержка тегов.

Действие изменения Политики Azure призвано помочь в управлении тегами, независимо от этапа управления ресурсами. Действие изменения помогает в следующих случаях:

  • Если вы только начинаете знакомство с облаком и у вас нет системы управления тегами.
  • У вас уже есть множество ресурсов без системы управления тегами.
  • У вас уже есть таксономия, которую требуется изменить.

В этом учебнике вы выполните следующие задачи.

  • определение бизнес-требований;
  • сопоставление каждого требования с определением политики;
  • группировка политик тегов в инициативу.

Предварительные требования

Для работы с этим руководством вам потребуется подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начать работу.

Определение требований

Как и в случае с любой хорошей реализацией элементов системы управления, требования должны проистекать из бизнес-потребностей. Прежде чем создавать технические элементы управления, необходимо осознать требования. В рамках этого сценария мы предлагаем следующие бизнес-требования:

  • Два обязательных тега для всех ресурсов: CostCenter и Env.
  • Тег CostCenter должен присутствовать во всех контейнерах и отдельных ресурсах.
    • Ресурсы наследуются от контейнера, в котором они находятся, но их можно переопределять по отдельности.
  • Тег Env должен присутствовать во всех контейнерах и отдельных ресурсах.
    • Ресурсы определяют среду по схеме именования контейнеров и не переопределяются.
    • Все ресурсы в контейнере являются частью одной среды.

Настройка тега CostCenter

Что касается непосредственно среды Azure, управляемой с помощью Политики Azure, требования к тегу CostCenter следующие:

  • Запрет групп ресурсов, в которых отсутствует тег CostCenter.
  • Изменение ресурсов, чтобы добавить тег CostCenter из родительской группы ресурсов при его отсутствии.

Запрет групп ресурсов, в которых отсутствует тег CostCenter

Так как тег CostCenter для группы ресурсов нельзя определить по имени группы ресурсов, для создания группы ресурсов следует задать тег в запросе. Следующее правило политики с действием запрета предотвращает создание или обновление групп ресурсов, у которых нет тега CostCenter:

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

Примечание

Так как это правило политики предназначено для группы ресурсов, для режима в определении политики следует задать значение "Все" вместо "Индексировано".

Изменение ресурсов для наследования тега CostCenter при его отсутствии

Второе требование, связанное с тегом CostCenter, — если этот тег отсутствует, ресурсы должны наследовать его от родительской группы ресурсов. Если тег уже определен для ресурса, даже если он отличается от родительской группы ресурсов, он должен остаться без изменения. Следующее правило политики использует действие изменения:

"policyRule": {
    "if": {
        "field": "tags['CostCenter']",
        "exists": "false"
    },
    "then": {
        "effect": "modify",
        "details": {
            "roleDefinitionIds": [
                "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ],
            "operations": [{
                "operation": "add",
                "field": "tags['CostCenter']",
                "value": "[resourcegroup().tags['CostCenter']]"
            }]
        }
    }
}

Это правило политики использует операцию add вместо addOrReplace, так как при исправлении имеющихся ресурсов не нужно изменять значение тега, если оно имеется. Кроме того, используется функция шаблона [resourcegroup()] для получения значения тега из родительской группы ресурсов.

Примечание

Так как это правило политики предназначено для ресурсов, поддерживающих теги, для режима в определении политики следует задать значение "Индексировано". Эта конфигурация позволяет политике пропускать группы ресурсов.

Настройка тега Env

Что касается непосредственно среды Azure, управляемой с помощью Политики Azure, требования к тегу Env следующие:

  • Изменение тега Env в группе ресурсов на основе схемы именования групп ресурсов.
  • Изменение тега Env для всех ресурсов в группе ресурсов, чтобы они совпадали с родительской группой ресурсов.

Изменение тега Env группы ресурсов на основе имени

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

"policyRule": {
    "if": {
        "allOf": [{
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
            "field": "name",
            "like": "prd-*"
        },
        {
            "field": "tags['Env']",
            "notEquals": "Production"
        }

    ]
    },
    "then": {
        "effect": "modify",
        "details": {
            "roleDefinitionIds": [
                "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ],
            "operations": [{
                "operation": "addOrReplace",
                "field": "tags['Env']",
                "value": "Production"
            }]
        }
    }
}

Примечание

Так как это правило политики предназначено для группы ресурсов, для режима в определении политики следует задать значение "Все" вместо "Индексировано".

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

Изменение ресурсов для наследования тега Env

Бизнес-требования таковы, чтобы у всех ресурсов присутствовал тег Env, который есть в их родительской группе ресурсов. Этот тег нельзя переопределить, поэтому мы будем использовать операцию addOrReplace с действием изменения. Пример политики изменения выглядит следующим образом:

"policyRule": {
    "if": {
        "anyOf": [{
            "field": "tags['Env']",
            "notEquals": "[resourcegroup().tags['Env']]"
        },
        {
            "field": "tags['Env']",
            "exists": false
        }
    ]
    },
    "then": {
        "effect": "modify",
        "details": {
            "roleDefinitionIds": [
                "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ],
            "operations": [{
                "operation": "addOrReplace",
                "field": "tags['Env']",
                "value": "[resourcegroup().tags['Env']]"
            }]
        }
    }
}

Примечание

Так как это правило политики предназначено для ресурсов, поддерживающих теги, для режима в определении политики следует задать значение "Индексировано". Эта конфигурация позволяет политике пропускать группы ресурсов.

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

Назначение инициативы и оптимизация ресурсов

После создания указанных выше политик тегов объедините их в единую инициативу для системы управления тегами и назначьте группе управления или подписке. Эта инициатива и включаемые политики оценивают соответствие существующих ресурсов и изменяют запросы новых или обновленных ресурсов, соответствующих свойству if в правиле политики. Однако политика не изменяет теги имеющихся ресурсов, которые не соответствуют требованиям.

Как и политики deployIfNotExists, с помощью задач исправления политика изменения изменяет имеющиеся ресурсы, которые не соответствуют требованиям. Следуйте указаниям в этой статье, чтобы определить несоответствующие требованиям ресурсы для изменения и исправить теги для определенной таксономии.

Очистка ресурсов

Если вы завершили работу с ресурсами по этому руководству, следуйте инструкциям ниже, чтобы удалить все созданные назначения или определения:

  1. Выберите Определения (или Назначения, если вы пытаетесь удалить назначение) в разделе Разработка в левой части страницы службы Политика Azure.

  2. Найдите новую инициативу либо определение политики (или назначение), которые вы хотите удалить.

  3. Щелкните строку правой кнопкой мыши или выберите многоточие в конце определения (или назначения), а затем выберите Удалить определение (или Удаление назначения).

Просмотр

При работе с этим учебником вы выполнили такие задачи:

  • определили бизнес-требования;
  • сопоставили каждое требование с определением политики;
  • сгруппировали политики тегов в инициативу.

Дальнейшие действия

Дополнительные сведения о структурах определения политик см. в статье: