Краткое руководство. Создание назначения политики для выявления несоответствуемых ресурсов с помощью шаблона 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.
- Откройте Visual Studio Code и выберите файл>"Создать текстовый файл".
- Скопируйте и вставьте шаблон ARM в Visual Studio Code.
- Выберите "Сохранить файл>" и используйте имя файла 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, перейдите к разделу "Обзор примеров кода".
- Дополнительные сведения о справочнике по шаблонам для развертываний см. в справочнике по шаблону Azure.
- Чтобы узнать, как разрабатывать шаблоны ARM, перейдите в документацию по шаблонам ARM.
- Чтобы узнать о развертываниях на уровне подписки, перейдите к развертываниям подписки с помощью шаблонов 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.
Дополнительные сведения о назначении политик, проверяющих соответствие ресурсов, см. в этом руководстве.