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. Zie Voorbeelden van Azure Policy voor een lijst met beschikbare ingebouwde beleidsregels.

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'

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: 'audit-vm-managed-disks'
    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 maakt een beleidstoewijzing met de naam audit-vm-managed-disks.

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'

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

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, ]}

Resources opschonen

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

Afmelden bij uw Azure PowerShell-sessie:

Disconnect-AzAccount

Volgende stappen

In deze quickstart hebt u een ingebouwde beleidsdefinitie toegewezen aan een bereik van een resourcegroep en de nalevingsstatus gecontroleerd. De beleidsdefinitie controleert of de virtuele machines in de resourcegroep compatibel zijn en identificeert resources die niet compatibel zijn.

Voor meer informatie over het toewijzen van beleidsregels om te controleren of nieuwe resources compatibel zijn, gaat u verder met de zelfstudie.