Краткое руководство. Создание назначения политики для выявления несоответствуемых ресурсов с помощью Terraform
Чтобы понять, соответствуют ли ресурсы требованиям в Azure, прежде всего нужно определить их состояние. В этом кратком руководстве описано, как создать назначение политики для определения виртуальных машин, которые не используют управляемые диски.
В конце этого процесса вы определите виртуальные машины, которые не используют управляемые диски в подписке. так как не соответствуют назначению политики.
При назначении встроенной политики или определения инициативы необязательно ссылаться на версию. Назначения политик встроенных определений по умолчанию для последней версии и автоматически наследуют незначительные изменения версии, если иное не указано.
Необходимые компоненты
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Средство Terraform версии 0.12.0 или выше, настроенное в вашей среде. Инструкции см. в кратком руководстве Настройка Terraform с помощью Azure Cloud Shell.
- Для целей этого краткого руководства требуется запустить Azure CLI 2.13.0 или более поздней версии. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Создание конфигурации, переменной и выходного файла Terraform
С помощью этого краткого руководства вы создадите назначение политики и назначите определение Audit VMs that do not use managed disks (Аудит виртуальных машин, которые не используют управляемые диски). Это определение политики идентифицирует ресурсы, которые не соответствуют заданным в нем условиям.
Настройте конфигурацию Terraform, переменные и выходные файлы. Ресурсы Terraform для Политики Azure используют Поставщик Azure.
Создайте новую папку с именем
policy-assignment
и измените в ней каталоги.Создайте
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" }
Создайте
variables.tf
, используя следующий код:variable "cust_scope" { default = "{scope}" }
Она определяет, к каким ресурсам или группе ресурсов принудительно применяется назначение политики. Она может варьироваться от группы управления до отдельного ресурса. Обязательно замените
{scope}
один из следующих шаблонов на основе объявленного ресурса:- Подписка:
/subscriptions/{subscriptionId}
- группу ресурсов
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
; - Ресурс:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
.
- Подписка:
Создайте
output.tf
, используя следующий код:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Инициализация Terraform и создание плана
Инициализировать Terraform, чтобы скачать необходимые поставщики, а затем создать план.
Выполните команду terraform init. В результате этой команды будут скачаны модули Azure, необходимые для создания ресурсов Azure в конфигурации Terraform.
terraform init
Выполните проверку подлинности с помощью Azure CLI для Terraform. Дополнительные сведения см. в статье "Поставщик Azure: проверка подлинности с помощью Azure CLI".
az login
Создайте план выполнения с помощью команды terraform plan и параметра out.
terraform plan -out assignment.tfplan
Примечание.
Сведения о сохранении планов выполнения и безопасности см. в статье Terraform Plan: Security Warning.
Применение плана выполнения Terraform
Примените план выполнения.
Выполните команду terraform apply и укажите уже созданный assignment.tfplan
.
terraform apply assignment.tfplan
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.
Следующее руководство серии содержит сведения о назначении политик для проверки новых ресурсов на соответствие требованиям: