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

In deze quickstart gebruikt u een Azure Resource Manager-sjabloon (ARM-sjabloon) 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.

Een Azure Resource Manager-sjabloon is een JSON-bestand (JavaScript Object Notation) dat de infrastructuur en configuratie voor uw project definieert. Voor de sjabloon is declaratieve syntaxis vereist. U beschrijft de beoogde implementatie zonder de reeks programmeeropdrachten te schrijven om de implementatie te maken.

Als uw omgeving voldoet aan de vereisten en u benkend bent met het gebruik van ARM-sjablonen, selecteert u de knop Implementeren naar Azure. De sjabloon wordt in Azure Portal geopend.

Schermopname van de knop Implementeren in Azure om een beleid toe te wijzen met een Azure Resource Manager-sjabloon.

Vereisten

  • Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.
  • Azure PowerShell of Azure CLI.
  • Visual Studio Code en de ARM-hulpprogramma's (Azure Resource Manager).
  • Microsoft.PolicyInsights moet zijn geregistreerd in uw Azure-abonnement. Als u een resourceprovider wilt registreren, moet u gemachtigd zijn om resourceproviders te registreren. Deze machtiging is opgenomen in de rollen Inzender en Eigenaar.
  • Een resourcegroep met ten minste één virtuele machine die geen beheerde schijven gebruikt.

De sjabloon controleren

Met de ARM-sjabloon maakt u een beleidstoewijzing voor een resourcegroepsbereik en wijst u de ingebouwde beleidsdefinitie Vm's toe die geen beheerde schijven gebruiken.

Maak de volgende ARM-sjabloon als policy-assignment.json.

  1. Open Visual Studio Code en selecteer Bestand>nieuw tekstbestand.
  2. Kopieer en plak de ARM-sjabloon in Visual Studio Code.
  3. Selecteer Bestand>opslaan en gebruik de bestandsnaam 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'))]"
    }
  }
}

Het resourcetype dat is gedefinieerd in de ARM-sjabloon is Microsoft.Authorization/policyAssignments.

De sjabloon 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 ARM-sjabloonbestanden:

De ARM-sjabloon implementeren

U kunt de ARM-sjabloon 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.json'
}

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 de ARM-sjabloon 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/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, ]}

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.