Quickstart: Een beleidstoewijzing maken om niet-compatibele resources te identificeren met behulp van een Bicep-bestand

In deze quickstart gebruikt u een Bicep-bestand om een beleidstoewijzing te maken waarmee de naleving van resources met een Azure-beleid wordt gevalideerd. Het beleid wordt toegewezen aan een resourcegroep en controleert virtuele machines die geen beheerde schijven gebruiken. Nadat u de beleidstoewijzing hebt gemaakt, identificeert u niet-compatibele virtuele machines.

Bicep is een domeinspecifieke taal (DSL) die declaratieve syntaxis gebruikt om Azure-resources te implementeren. Deze taal voorziet in een beknopte syntaxis, betrouwbare typeveiligheid en ondersteuning voor hergebruik van code. Bicep biedt de beste ontwerpervaring voor uw infrastructuur als code-oplossingen in Azure.

Vereisten

Het Bicep-bestand controleren

Het Bicep-bestand maakt een beleidstoewijzing voor een resourcegroepsbereik en wijst de ingebouwde beleidsdefinitie Virtuele machines toe die geen beheerde schijven gebruiken.

Maak het volgende Bicep-bestand als policy-assignment.bicep.

  1. Open Visual Studio Code en selecteer Bestand>nieuw tekstbestand.
  2. Kopieer en plak het Bicep-bestand in Visual Studio Code.
  3. Selecteer Bestand>opslaan en gebruik de bestandsnaam 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

Het resourcetype dat in het Bicep-bestand is gedefinieerd, is Microsoft.Authorization/policyAssignments.

Het Bicep-bestand gebruikt drie parameters om de beleidstoewijzing te implementeren:

  • policyAssignmentName maakt de beleidstoewijzing met de naam audit-vm-managed-disks.
  • policyDefinitionID gebruikt de id van de ingebouwde beleidsdefinitie. Ter referentie bevinden de opdrachten om de id op te halen zich in de sectie voor het implementeren van de sjabloon.
  • policyDisplayName hiermee maakt u een weergavenaam die zichtbaar is in Azure Portal.

Voor meer informatie over Bicep-bestanden:

Het Bicep-bestand implementeren

U kunt het Bicep-bestand implementeren met Azure PowerShell of Azure CLI.

Maak vanuit een Visual Studio Code-terminalsessie verbinding met Azure. Als u meer dan één abonnement hebt, voert u de opdrachten uit om context in te stellen op uw abonnement. Vervang <subscriptionID> door de id van uw Azure-abonnement.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

U kunt controleren of Microsoft.PolicyInsights deze is geregistreerd. Als dat niet het is, kunt u een opdracht uitvoeren om de resourceprovider te registreren.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Ga voor meer informatie naar Get-AzResourceProvider en Register-AzResourceProvider.

Met de volgende opdrachten wordt de waarde van de policyDefinitionID parameter weergegeven:

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Met de volgende opdrachten wordt de beleidsdefinitie geïmplementeerd in uw resourcegroep. Vervang door <resourceGroupName> de naam van de resourcegroep:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}

New-AzResourceGroupDeployment @deployparms

In $rg de variabele worden eigenschappen voor de resourcegroep opgeslagen. De $deployparms variabele maakt gebruik van splatting om parameterwaarden te maken en de leesbaarheid te verbeteren. De New-AzResourceGroupDeployment opdracht gebruikt de parameterwaarden die zijn gedefinieerd in de $deployparms variabele.

  • Name is de implementatienaam die wordt weergegeven in de uitvoer en in Azure voor de implementaties van de resourcegroep.
  • ResourceGroupName gebruikt de $rg.ResourceGroupName eigenschap om de naam op te halen van uw resourcegroep waaraan het beleid is toegewezen.
  • TemplateFile hiermee geeft u de naam en locatie van het Bicep-bestand op uw lokale computer.

U kunt de implementatie van de beleidstoewijzing controleren met de volgende opdracht:

De opdracht gebruikt de $rg.ResourceId eigenschap om de id van de resourcegroep op te halen.

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

Ga voor meer informatie naar Get-AzPolicyAssignment.

Niet-compatibele resources identificeren

Nadat de beleidstoewijzing is geïmplementeerd, worden virtuele machines die zijn geïmplementeerd in de resourcegroep gecontroleerd op naleving van het beleid voor beheerde schijven.

Het duurt enkele minuten voordat de nalevingsstatus voor een nieuwe beleidstoewijzing actief wordt en resultaten geeft over de status van het beleid.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

De $complianceparms variabele maakt parameterwaarden die in de Get-AzPolicyState opdracht worden gebruikt.

  • ResourceGroupName haalt de naam van de resourcegroep op uit de $rg.ResourceGroupName eigenschap.
  • PolicyAssignmentName hiermee geeft u de naam op die wordt gebruikt bij het maken van de beleidstoewijzing.
  • Filter gebruikt een expressie om resources te vinden die niet compatibel zijn met de beleidstoewijzing.

Uw resultaten lijken op het volgende voorbeeld en ComplianceState tonen 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, ]}

Ga naar Get-AzPolicyState voor meer informatie.

Resources opschonen

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Afmelden bij uw Azure PowerShell-sessie:

Disconnect-AzAccount

Volgende stappen

In deze Quick Start hebt u een beleidsdefinitie toegewezen om niet-compatibele resources in uw Azure-omgeving te identificeren.

Ga verder met de zelfstudie voor meer informatie over het toewijzen van beleidsregels voor het valideren van resourcenaleving.