Краткое руководство. Создание назначения политики для идентификации ресурсов, не соответствующих требованиям, с помощью 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
. Поставщик ресурсов содержит несколько типов ресурсов. Если результат выполняется NotRegistered
Register-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 { $_.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.
Дополнительные сведения о назначении политик, проверяющих соответствие ресурсов, см. в этом руководстве.