Быстрый старт: Создание назначения политики для выявления несоответствующих ресурсов с использованием файла Bicep

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

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".

При назначении встроенной политики или определения инициативы необязательно ссылаться на версию. Назначения политик для встроенных определений по умолчанию применяются к последней версии и автоматически наследуют незначительные изменения версии, если не указано иное.

Предварительные условия

Проверьте файл Bicep

Файл Bicep создает назначение политики для области группы ресурсов и назначает встроенное определение политики Аудитирующие виртуальные машины, которые не используют управляемые диски.

Создайте следующий файл Bicep под именем policy-assignment.bicep.

  1. Откройте Visual Studio Code и выберите файл>"Создать текстовый файл".
  2. Скопируйте и вставьте Bicep-файл в Visual Studio Code.
  3. Выберите Файл>Сохранить и используйте имя файла policy-assignment.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 PowerShell или Azure CLI, вы можете развернуть файл Bicep.

Из сеанса терминала 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.

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