Создание назначения политики для обнаружения несоответствующих требованиям ресурсов с помощью файла 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.
Дополнительные сведения о назначении политик, проверяющих соответствие ресурсов, см. в этом руководстве.