Condividi tramite


Guida introduttiva: Creare un'assegnazione dei 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. Al termine della creazione dell'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 comandi az rest da una shell Bash come Git Bash.

Quando si assegna un criterio predefinito o una definizione di iniziativa, è facoltativo fare riferimento a una versione. Per impostazione predefinita, le assegnazioni di criteri delle definizioni si basano sulla versione più recente ed ereditano automaticamente le modifiche della versione secondaria, se non diversamente specificato.

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 dei criteri - Create.

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à policyAssignmentId dell'assegnazione dei criteri.

L'esempio seguente mostra 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: consente di aggiungere contesto sull'assegnazione dei criteri.
  • policyDefinitionId: ID definizione dei criteri che consente di creare l'assegnazione.
  • nonComplianceMessages: imposta il messaggio da usare quando una risorsa viene valutata come non conforme. Per altre informazioni, vedere Messaggi di non conformità dell'assegnazione.

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 assegna la definizione Controlla macchine virtuali che non usano 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 dei criteri nell'ambito di un 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 applicare i caratteri di escape a at sign (@) per specificare un nome file. In una shell Bash come Git Bash omettere il backtick.

Per informazioni, vedere Assegnazioni dei criteri - Create.

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 dei criteri e l'output è in formato 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'"

filter esegue una query per individuare le risorse valutate come non conformi alla definizione dei criteri denominata audit-vm-managed-disks creata con l'assegnazione dei criteri. Anche in questo caso, si noti che il backtick viene usato applicare i caratteri di escape al simbolo del dollaro ($) nel filtro. Per un client Bash, la 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. Verrà visualizzato un messaggio nella shell.

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 - Delete e Assegnazioni di criteri - Get.

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.