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

В этом кратком руководстве вы используете шаблон Azure Resource Manager (шаблон ARM), чтобы создать назначение политики, которое проверяет соответствие ресурсов политике Azure. Политика назначается группе ресурсов и проверяет виртуальные машины, которые не используют управляемые диски. После создания назначения политики вы определите несоответствующие виртуальные машины.

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Если среда соответствует предварительным требованиям и вы знакомы с использованием шаблонов ARM, нажмите кнопку Развертывание в Azure. На портале Azure откроется шаблон.

Снимок экрана: кнопка

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

  • Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
  • Azure PowerShell или Azure CLI.
  • Visual Studio Code и средства Azure Resource Manager (ARM).
  • Microsoft.PolicyInsightsнеобходимо зарегистрировать в подписке Azure. Чтобы зарегистрировать поставщика ресурсов, необходимо иметь разрешение на регистрацию поставщиков ресурсов. Это разрешение включается в роли участника и владельца.
  • Группа ресурсов с хотя бы одной виртуальной машиной, которая не использует управляемые диски.

Изучение шаблона

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

Создайте следующий шаблон ARM как policy-assignment.json.

  1. Откройте Visual Studio Code и выберите файл>"Создать текстовый файл".
  2. Скопируйте и вставьте шаблон ARM в Visual Studio Code.
  3. Выберите "Сохранить файл>" и используйте имя файла policy-assignment.json.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

Тип ресурса, определенный в шаблоне ARM, — Microsoft.Authorization/policyAssignments.

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

  • policyAssignmentName создает назначение политики с именем audit-vm-managed-disks.
  • policyDefinitionID использует идентификатор встроенного определения политики. Для справки команды, чтобы получить идентификатор, находятся в разделе для развертывания шаблона.
  • policyDisplayNameсоздает отображаемое имя, которое отображается в портал Azure.

Дополнительные сведения о файлах шаблонов ARM:

Развертывание шаблона ARM

Шаблон ARM можно развернуть с помощью Azure PowerShell или Azure CLI.

Из сеанса терминала Visual Studio Code подключитесь к Azure. Если у вас несколько подписок, выполните команды, чтобы задать контекст для подписки. Замените <subscriptionID> идентификатором своей подписки Azure.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Можно проверить, зарегистрировано ли Microsoft.PolicyInsights оно. Если это не так, можно выполнить команду, чтобы зарегистрировать поставщика ресурсов.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Дополнительные сведения см. в раздел Get-AzResourceProvider и Register-AzResourceProvider.

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

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Следующие команды развертывают определение политики в группе ресурсов. Замените <resourceGroupName> именем группы ресурсов:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

Переменная $rg сохраняет свойства для группы ресурсов. Переменная $deployparms использует splatting для создания значений параметров и повышения удобочитаемости. Команда New-AzResourceGroupDeployment использует значения параметров, определенные в переменной $deployparms .

  • Name — это имя развертывания, отображаемое в выходных данных и в Azure для развертываний группы ресурсов.
  • ResourceGroupName$rg.ResourceGroupName использует свойство для получения имени группы ресурсов, в которой назначена политика.
  • TemplateFile указывает имя и расположение шаблона ARM на локальном компьютере.

Развертывание назначения политики можно проверить с помощью следующей команды:

Команда использует $rg.ResourceId свойство для получения идентификатора группы ресурсов.

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Дополнительные сведения см. в статье Get-AzPolicyAssignment.

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

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

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

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

Переменная $complianceparms создает значения параметров, используемые в команде Get-AzPolicyState .

  • ResourceGroupName возвращает имя группы ресурсов из $rg.ResourceGroupName свойства.
  • PolicyAssignmentName указывает имя, используемое при создании назначения политики.
  • Filter использует выражение для поиска ресурсов, которые не соответствуют назначению политики.

Результаты похожи на следующий пример и ComplianceState показаны NonCompliant:

Timestamp                : 2/26/2024 19:02:56
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Дополнительные сведения см. в статье Get-AzPolicyState.

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

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Чтобы выйти из сеанса Azure PowerShell, выполните следующие действия.

Disconnect-AzAccount

Следующие шаги

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

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