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

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

В конце этого процесса вы успешно определите виртуальные машины, которые не используют управляемые диски в подписке. так как не соответствуют назначению политики.

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

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
  • Средство Terraform версии 0.12.0 или выше, настроенное в вашей среде. Инструкции см. в кратком руководстве Настройка Terraform с помощью Azure Cloud Shell.
  • Для целей этого краткого руководства требуется запустить Azure CLI 2.13.0 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Создание конфигурации, переменной и выходного файла Terraform

С помощью этого краткого руководства вы создадите назначение политики и назначите определение Аудит виртуальных машин, которые не используют управляемые диски (06a78e20-9358-41c9-923c-fb736d382a4d). Это определение политики идентифицирует ресурсы, которые не соответствуют заданным в нем условиям.

Сначала настройте конфигурацию Terraform, переменную и выходные файлы. Ресурсы Terraform для Политики Azure используют Поставщик Azure.

  1. Создайте новую папку с именем policy-assignment и измените в ней каталоги.

  2. Создайте main.tf, используя следующий код:

    Примечание

    Чтобы создать назначение политики в группе управления, используйте ресурс azurerm_management_group_policy_assignment , для группы ресурсов — azurerm_resource_group_policy_assignment , а для подписки — ресурс azurerm_subscription_policy_assignment .

      provider "azurerm" {
        features {}
      }
    
      terraform {
      required_providers {
          azurerm = {
              source = "hashicorp/azurerm"
              version = ">= 2.96.0"
          }
      }
      }
    
      resource "azurerm_subscription_policy_assignment" "auditvms" {
      name = "audit-vm-manageddisks"
      subscription_id = var.cust_scope
      policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d"
      description = "Shows all virtual machines not using managed disks"
      display_name = "Audit VMs without managed disks assignment"
      }
    
  3. Создайте variables.tf, используя следующий код:

    variable "cust_scope" {
        default = "{scope}"
    }
    

    Она определяет, к каким ресурсам или группе ресурсов принудительно применяется назначение политики. Она может варьироваться от группы управления до отдельного ресурса. Обязательно замените {scope} одним из следующих шаблонов на основе объявленного ресурса:

    • Подписка: /subscriptions/{subscriptionId}
    • группу ресурсов /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName};
    • Ресурс: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/].
  4. Создайте output.tf, используя следующий код:

    output "assignment_id" {
        value = azurerm_subscription_policy_assignment.auditvms.id
    }
    

Инициализация Terraform и создание плана

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

  1. Выполните команду terraform init. В результате этой команды будут скачаны модули Azure, необходимые для создания ресурсов Azure в конфигурации Terraform.

    terraform init
    

    Снимок экрана: выполнение команды terraform init, загрузка модуля azurerm и сообщение об успешном выполнении.

  2. Выполните проверку подлинности с помощью Azure CLI для Terraform. Дополнительные сведения см. в документации Поставщик Azure. Проверка подлинности с помощью Azure CLI.

    az login
    
  3. Создайте план выполнения с помощью команды terraform plan и параметра out.

    terraform plan -out assignment.tfplan
    

    Снимок экрана: выполнение команды terraform plan и параметра out для отображения ресурса Azure, который будет создан.

    Примечание

    Сведения о сохранении планов выполнения и безопасности см. в разделе План Terraform. Предупреждение системы безопасности.

Применение плана выполнения Terraform

Наконец, примените план выполнения.

Выполните команду terraform apply и укажите уже созданный assignment.tfplan.

terraform apply assignment.tfplan

Снимок экрана: выполнение команды terraform apply и создание результирующего ресурса.

Если вы получили сообщение "Применено! Ресурсы: 1 добавлено, 0 изменено, 0 уничтожено. "сообщение, назначение политики создано. Поскольку мы определили файл outputs.tf, также возвращается значение assignment_id.

Выявление несоответствующих ресурсов

Чтобы просмотреть ресурсы, которые не соответствуют новому назначению, используйте значение assignment_id, возвращенное командой terraform apply. Теперь выполните следующую команду, чтобы вывести идентификаторы несоответствующих ресурсов в JSON-файле:

armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>

Результаты должны выглядеть примерно так:

{
    "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 3,
    "value": [{
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
        }

    ]
}

Результаты похожи на содержимое списка несовместимых ресурсов в представлении портала Azure.

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

Чтобы удалить созданное назначение, используйте Azure CLI или отмените план выполнения Terraform с помощью команды terraform destroy.

  • Azure CLI

    az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
    
  • Terraform

    terraform destroy
    

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

В этом кратком руководстве вы назначили определение политики для идентификации ресурсов, не соответствующих требованиям, в среде Azure.

Следующее руководство серии содержит сведения о назначении политик для проверки новых ресурсов на соответствие требованиям: