Поделиться через


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

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

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

При назначении встроенной политики или определения инициативы необязательно ссылаться на версию. Назначения политик встроенных определений по умолчанию для последней версии и автоматически наследуют незначительные изменения версии, если иное не указано.

Необходимые компоненты

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

С помощью этого краткого руководства вы создадите назначение политики и назначите определение Audit VMs that do not use managed disks (Аудит виртуальных машин, которые не используют управляемые диски). Это определение политики идентифицирует ресурсы, которые не соответствуют заданным в нем условиям.

Настройте конфигурацию 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 Plan: Security Warning.

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

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

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

terraform apply assignment.tfplan

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

Apply complete! Resources: 1 added, 0 changed, 0 destroyed. После сообщения теперь создается назначение политики. Поскольку мы определили файл 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.

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