Guida introduttiva: Creare un'assegnazione di criteri per identificare le risorse non conformi usando il modello di Resource Manager

In questa guida introduttiva si usa un modello di Azure Resource Manager per creare un'assegnazione di criteri che convalida la conformità della risorsa con un criterio di Azure. I criteri vengono assegnati a un gruppo di risorse e controllano le macchine virtuali che non usano dischi gestiti. Dopo aver creato l'assegnazione dei criteri, si identificano le macchine virtuali non conformi.

Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione per il progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione per creare la distribuzione.

Se l'ambiente soddisfa i prerequisiti e si ha familiarità con l'uso dei modelli di Resource Manager, selezionare il pulsante Distribuisci in Azure. Il modello viene visualizzato nel portale di Azure.

Screenshot del pulsante Distribuisci in Azure per assegnare un criterio con un modello di Azure Resource Manager.

Prerequisiti

  • Se non si ha un account Azure, creare un account gratuito prima di iniziare.
  • Azure PowerShell o interfaccia della riga di comando di Azure.
  • Visual Studio Code e gli strumenti di Azure Resource Manager (ARM).
  • Microsoft.PolicyInsights deve essere registrato nella sottoscrizione di Azure. Per registrare un provider di risorse, è necessario disporre dell'autorizzazione per registrare i provider di risorse. Tale autorizzazione è inclusa nei ruoli Collaboratore e Proprietario.
  • Gruppo di risorse con almeno una macchina virtuale che non usa dischi gestiti.

Rivedere il modello

Il modello di Resource Manager crea un'assegnazione di criteri per un ambito di gruppo di risorse e assegna la definizione predefinita dei criteri Controlla le macchine virtuali che non usano dischi gestiti.

Creare il modello di Resource Manager seguente come policy-assignment.json.

  1. Aprire Visual Studio Code e selezionare File>nuovo file di testo.
  2. Copiare e incollare il modello di Resource Manager in Visual Studio Code.
  3. Selezionare Salva file>e usare il nome file 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'))]"
    }
  }
}

Il tipo di risorsa definito nel modello di Resource Manager è Microsoft.Authorization/policyAssignments.

Il modello usa tre parametri per distribuire l'assegnazione dei criteri:

  • policyAssignmentName crea l'assegnazione di criteri denominata audit-vm-managed-disks.
  • policyDefinitionID usa l'ID della definizione di criteri predefinita. Per riferimento, i comandi per ottenere l'ID sono nella sezione per distribuire il modello.
  • policyDisplayNamecrea un nome visualizzato visibile in portale di Azure.

Per altre informazioni sui file di modello di Resource Manager:

  • Per trovare altri esempi di modelli di Resource Manager, vedere Esplorare gli esempi di codice.
  • Per altre informazioni sulle informazioni di riferimento sui modelli per le distribuzioni, vedere Informazioni di riferimento sui modelli di Azure.
  • Per informazioni su come sviluppare modelli di Resource Manager, vedere la documentazione del modello di Resource Manager.
  • Per informazioni sulle distribuzioni a livello di sottoscrizione, passare a Distribuzioni di sottoscrizioni con i modelli di Resource Manager.

Distribuire il modello di Resource Manager

È possibile distribuire il modello di Resource Manager con Azure PowerShell o l'interfaccia della riga di comando di Azure.

Da una sessione del terminale di Visual Studio Code connettersi ad Azure. Se si dispone di più sottoscrizioni, eseguire i comandi per impostare il contesto sulla sottoscrizione. Sostituire <subscriptionID> con l'ID della sottoscrizione di Azure.

Connect-AzAccount

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

È possibile verificare se Microsoft.PolicyInsights è registrato. In caso contrario, è possibile eseguire un comando per registrare il provider di risorse.

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

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Per altre informazioni, vedere Get-AzResourceProvider e Register-AzResourceProvider.

I comandi seguenti visualizzano il policyDefinitionID valore del parametro:

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

I comandi seguenti distribuiscono la definizione dei criteri nel gruppo di risorse. Sostituire <resourceGroupName> con il nome del gruppo di risorse:

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

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

New-AzResourceGroupDeployment @deployparms

La $rg variabile archivia le proprietà per il gruppo di risorse. La $deployparms variabile usa splattingper creare valori di parametro e migliorare la leggibilità. Il New-AzResourceGroupDeployment comando usa i valori dei parametri definiti nella $deployparms variabile .

  • Name è il nome della distribuzione visualizzato nell'output e in Azure per le distribuzioni del gruppo di risorse.
  • ResourceGroupName usa la $rg.ResourceGroupName proprietà per ottenere il nome del gruppo di risorse in cui sono assegnati i criteri.
  • TemplateFile specifica il nome e il percorso del modello di Resource Manager nel computer locale.

È possibile verificare la distribuzione dell'assegnazione dei criteri con il comando seguente:

Il comando usa la $rg.ResourceId proprietà per ottenere l'ID del gruppo di risorse.

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

Per altre informazioni, vedere Get-AzPolicyAssignment.

Identificare risorse non conformi

Dopo aver distribuito l'assegnazione dei criteri, le macchine virtuali distribuite nel gruppo di risorse vengono controllate per la conformità ai criteri del disco gestito.

Lo stato di conformità per una nuova assegnazione di criteri richiede alcuni minuti per diventare attivo e fornire risultati sullo stato del criterio.

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

Get-AzPolicyState @complianceparms

La $complianceparms variabile crea i valori dei parametri usati nel Get-AzPolicyState comando .

  • ResourceGroupName ottiene il nome del gruppo di risorse dalla $rg.ResourceGroupName proprietà .
  • PolicyAssignmentName specifica il nome utilizzato quando è stata creata l'assegnazione dei criteri.
  • Filter usa un'espressione per trovare risorse non conformi all'assegnazione dei criteri.

I risultati sono simili all'esempio seguente e ComplianceState mostrano 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, ]}

Per altre informazioni, vedere Get-AzPolicyState.

Pulire le risorse

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

Per disconnettersi dalla sessione di Azure PowerShell:

Disconnect-AzAccount

Passaggi successivi

In questa Guida introduttiva è stata assegnata una definizione dei criteri per identificare le risorse non conformi nell'ambiente Azure.

Per altre informazioni su come assegnare criteri che convalidano la conformità delle risorse, continuare con l'esercitazione.