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
- Se non si ha un account Azure, creare un account gratuito prima di iniziare.
- Versione più recente di PowerShell o di una shell Bash come Git Bash.
- Versione più recente dell'interfaccia della riga di comando di Azure.
- Visual Studio Code.
- Gruppo di risorse con almeno una macchina virtuale che non usa dischi gestiti.
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}
- Gruppo di gestione:
policyAssignmentName
: crea il nome dell'assegnazione dei criteri per l'assegnazione. Il nome è incluso nella proprietà dell'assegnazione deipolicyAssignmentId
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.