Guida introduttiva: Creare un'assegnazione di criteri per identificare le risorse non conformi con l'API REST

Il primo passaggio per comprendere la conformità in Azure consiste nell'identificare lo stato delle risorse. In questa guida introduttiva si crea un'assegnazione di criteri per identificare le risorse non conformi usando l'API REST. 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.

Questa guida usa un'API REST per creare un'assegnazione di criteri per identificare le risorse non conformi nell'ambiente Azure. Gli esempi in questo articolo usano PowerShell e i comandi dell'interfaccia della riga di comando di Azure az rest . È anche possibile eseguire i az rest comandi da una shell Bash come Git Bash.

Prerequisiti

Esaminare la sintassi dell'API REST

Esistono due elementi per eseguire i comandi dell'API REST: l'URI dell'API REST e il corpo della richiesta. Per informazioni, vedere Assegnazioni di criteri - Crea.

L'esempio seguente illustra la sintassi dell'URI dell'API REST per creare una definizione di criteri.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: un ambito determina le risorse o il gruppo di risorse a cui viene applicata l'assegnazione dei criteri. Può spaziare da un gruppo di gestione a una singola risorsa. Sostituire {scope} con uno dei modelli seguenti:
    • Gruppo di gestione: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Sottoscrizione: /subscriptions/{subscriptionId}
    • Gruppo di risorse: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Risorsa: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName: crea il nome dell'assegnazione dei criteri per l'assegnazione. Il nome è incluso nella proprietà dell'assegnazione dei policyAssignmentId criteri.

L'esempio seguente è il codice JSON per creare un file del corpo della richiesta.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: nome visualizzato per l'assegnazione dei criteri.
  • description: può essere usato per aggiungere contesto sull'assegnazione dei criteri.
  • policyDefinitionId: ID definizione dei criteri che consente di creare l'assegnazione.
  • nonComplianceMessages: impostare il messaggio da usare quando una risorsa viene valutata come non conforme. Per altre informazioni, vedere Assegnazione di messaggi di non conformità.

Connect to 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.

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

Usare az login anche se si usa PowerShell perché gli esempi usano i comandi az rest dell'interfaccia della riga di comando di Azure.

Creare un'assegnazione di criteri

In questo esempio si crea un'assegnazione di criteri e si assegnano le macchine virtuali di controllo che non usano la definizione dei dischi gestiti.

Per creare l'assegnazione è necessario un corpo della richiesta. Salvare il codice JSON seguente in un file denominato request-body.json.

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

Per creare l'assegnazione di criteri in un ambito di gruppo di risorse esistente, usare l'URI dell'API REST seguente con un file per il corpo della richiesta. Sostituire {subscriptionId} e {resourceGroupName} con i propri valori. Il comando visualizza l'output JSON nella shell.

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

In PowerShell è necessario il backtick (`) per eseguire l'escape di at sign (@) per specificare un nome file. In una shell Bash come Git Bash omettere il backtick.

Per informazioni, vedere Assegnazioni di criteri - Crea.

Identificare risorse non conformi

Lo stato di conformità per una nuova assegnazione di criteri richiede alcuni minuti per diventare attivo e fornire risultati sullo stato del criterio. L'API REST viene usata per visualizzare le risorse non conformi per questa assegnazione di criteri e l'output è in JSON.

Per identificare le risorse non conformi, eseguire il comando seguente. Sostituire {subscriptionId} e {resourceGroupName} con i valori usati durante la creazione dell'assegnazione dei criteri.

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

Le filter query per le risorse valutate come non conformi alla definizione di criteri denominata audit-vm-managed-disks creata con l'assegnazione dei criteri. Anche in questo caso, si noti che il backtick viene usato per sfuggire al segno di dollaro ($) nel filtro. Per un client Bash, una barra rovesciata (\) è un carattere di escape comune.

I risultati saranno simili all'esempio seguente:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

Per altre informazioni, vedere Stati dei criteri - Elencare i risultati della query per il gruppo di risorse.

Pulire le risorse

Per rimuovere l'assegnazione dei criteri, usare il comando seguente. Sostituire {subscriptionId} e {resourceGroupName} con i valori usati durante la creazione dell'assegnazione dei criteri. Il comando visualizza l'output JSON nella shell.

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

È possibile verificare che l'assegnazione dei criteri sia stata eliminata con il comando seguente. Nella shell viene visualizzato un messaggio.

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

Per altre informazioni, vedere Assegnazioni di criteri - Elimina e Assegnazioni di criteri - Ottieni.

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.