Создание назначения политики для обнаружения несоответствующих требованиям ресурсов с помощью файла BICEP
В этом кратком руководстве вы используете файл Bicep для создания назначения политики, которое проверяет соответствие ресурсов политике Azure. Политика назначается группе ресурсов и проверяет виртуальные машины, которые не используют управляемые диски. После создания назначения политики вы определите несоответствующие виртуальные машины.
Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".
Необходимые компоненты
- Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Bicep
- Azure PowerShell или Azure CLI.
- Visual Studio Code и расширение Bicep для Visual Studio Code.
Microsoft.PolicyInsights
необходимо зарегистрировать в подписке Azure. Чтобы зарегистрировать поставщика ресурсов, необходимо иметь разрешение на регистрацию поставщиков ресурсов. Это разрешение включается в роли участника и владельца.- Группа ресурсов с хотя бы одной виртуальной машиной, которая не использует управляемые диски.
Проверка BICEP-файла
Файл Bicep создает назначение политики для группы ресурсов область и назначает встроенные виртуальные машины аудита политики, которые не используют управляемые диски.
Создайте следующий файл Bicep в качестве policy-assignment.bicep.
- Откройте Visual Studio Code и выберите файл>"Создать текстовый файл".
- Скопируйте и вставьте Bicep-файл в Visual Studio Code.
- Выберите "Сохранить файл>" и используйте политику назначения файла.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
name: policyAssignmentName
scope: resourceGroup()
properties: {
policyDefinitionId: policyDefinitionID
description: 'Policy assignment to resource group scope created with Bicep file'
displayName: policyDisplayName
nonComplianceMessages: [
{
message: 'Virtual machines should use managed disks'
}
]
}
}
output assignmentId string = assignment.id
Тип ресурса, определенный в файле Bicep, — Microsoft.Authorization/policyAssignments.
Файл Bicep использует три параметра для развертывания назначения политики:
policyAssignmentName
создает назначение политики с именем audit-vm-managed-disks.policyDefinitionID
использует идентификатор встроенного определения политики. Для справки команды, чтобы получить идентификатор, находятся в разделе для развертывания шаблона.policyDisplayName
создает отображаемое имя, которое отображается в портал Azure.
Дополнительные сведения о файлах Bicep:
- Чтобы найти дополнительные примеры Bicep, перейдите к разделу "Обзор примеров кода".
- Дополнительные сведения о справочнике по шаблонам для развертываний см. в справочнике по шаблону Azure.
- Чтобы узнать, как разрабатывать файлы Bicep, перейдите в документацию по Bicep.
- Чтобы узнать о развертываниях уровня подписки, перейдите к развертываниям подписки с файлами Bicep.
Развертывание BICEP-файла
Вы можете развернуть Bicep-файл с помощью 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.bicep'
}
New-AzResourceGroupDeployment @deployparms
Переменная $rg
сохраняет свойства для группы ресурсов. Переменная $deployparms
использует splatting для создания значений параметров и повышения удобочитаемости. Команда New-AzResourceGroupDeployment
использует значения параметров, определенные в переменной $deployparms
.
Name
— это имя развертывания, отображаемое в выходных данных и в Azure для развертываний группы ресурсов.ResourceGroupName
$rg.ResourceGroupName
использует свойство для получения имени группы ресурсов, в которой назначена политика.TemplateFile
указывает имя и расположение файла Bicep на локальном компьютере.
Развертывание назначения политики можно проверить с помощью следующей команды:
Команда использует $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/20/2024 18:55:45
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.
Дополнительные сведения о назначении политик, проверяющих соответствие ресурсов, см. в этом руководстве.