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

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

Модули Azure PowerShell можно использовать для управления ресурсами Azure из командной строки или скриптов. В этой статье объясняется, как использовать Azure PowerShell для создания назначения политики.

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

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

Подключение к Azure

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

Connect-AzAccount

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

Регистрация поставщика ресурсов

Когда поставщик ресурсов зарегистрирован, он доступен для использования в подписке Azure.

Чтобы проверить, зарегистрировано ли Microsoft.PolicyInsights оно, выполните команду Get-AzResourceProvider. Поставщик ресурсов содержит несколько типов ресурсов. Если результат выполняется NotRegisteredRegister-AzResourceProvider:

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

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

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

Создание назначения политики

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

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

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

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

Переменная $rg сохраняет свойства для группы ресурсов и $definition переменная сохраняет свойства определения политики. Свойства используются в последующих командах.

Выполните следующую команду, чтобы создать назначение политики:

$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

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

  • Name создает имя назначения политики, используемое в назначении ResourceId.
  • DisplayName— имя назначения политики и отображается в портал Azure.
  • Scope$rg.ResourceId использует свойство для назначения политики группе ресурсов.
  • PolicyDefinition назначает определение политики, хранящееся в переменной $definition .
  • Description можно использовать для добавления контекста о назначении политики.

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

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

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

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

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

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

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

Используйте следующую команду, чтобы определить ресурсы, которые не соответствуют созданному назначению политики:

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

Get-AzPolicyState @complianceparms

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

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

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

Timestamp                : 2/14/2024 18:25:37
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.

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