Condividi tramite


Ottenere i dati di conformità delle risorse di Azure

Uno dei maggiori vantaggi di Criteri di Azure è rappresentato dalle informazioni dettagliate e dai controlli che offre sulle risorse in una sottoscrizione o in un gruppo di gestione di sottoscrizioni. Questo controllo può essere usato per impedire la creazione di risorse nella posizione errata, applicare l'utilizzo comune e coerente dei tag o controllare le risorse esistenti per le configurazioni e le impostazioni appropriate. In tutti i casi i dati vengono generati da Criteri di Azure per consentire di comprendere lo stato di conformità dell'ambiente in uso.

Prima di esaminare i dati di conformità, è importante comprendere gli stati di conformità in Criteri di Azure.

Esistono diversi modi per accedere alle informazioni sulla conformità generate dalle assegnazioni di criteri e iniziative:

Prima di esaminare i metodi disponibili per creare report sulla conformità, è opportuno comprendere quando vengono aggiornate le informazioni sulla conformità e la frequenza e gli eventi che attivano un ciclo di valutazione.

Trigger di valutazione

I risultati di un ciclo di valutazione completato sono disponibili nel provider di risorse Microsoft.PolicyInsights attraverso le operazioni PolicyStates e PolicyEvents. Per altre informazioni sulle operazioni dell'API REST di Azure Policy Insights, vedere Azure Policy Insights.

Le valutazioni delle iniziative e dei criteri assegnati sono il risultato di diversi eventi:

  • Un criterio o un'iniziativa è stata appena assegnata a un ambito. L'applicazione dell'assegnazione all'ambito definito richiede circa cinque minuti, quindi viene avviato il ciclo di valutazione per le risorse applicabili rispetto ai criteri o all'iniziativa appena assegnati. A seconda degli effetti usati, le risorse vengono contrassegnate come conformi, non conformi, esenti o sconosciute. Un criterio o un'iniziativa di grandi dimensioni valutato rispetto a un ampio ambito di risorse può richiedere tempo, quindi non esiste alcuna previsione predefinita di quando il ciclo di valutazione viene completato. Al termine, i risultati di conformità aggiornati sono disponibili nel portale e negli SDK.

  • Un criterio o un'iniziativa già assegnata a un ambito viene aggiornata. Il ciclo di valutazione e la tempistica per questo scenario sono gli stessi di quelli per una nuova assegnazione a un ambito.

  • Una risorsa viene distribuita o aggiornata all'interno di un ambito con un'assegnazione tramite Azure Resource Manager, API REST o un SDK supportato. In questo scenario l'evento di effetto (Append, Audit, Deny, Deploy) e le informazioni sullo stato conforme per la singola risorsa diventano disponibili nel portale e negli SDK dopo circa 15 minuti. Questo evento non causa una valutazione di altre risorse.

  • Una sottoscrizione (tipo di risorsa Microsoft.Resources/subscriptions) viene creata o spostata nella gerarchia di gruppi di gestione con una definizione di criteri assegnata che fa riferimento al tipo di risorsa della sottoscrizione. La valutazione degli effetti supportati dalla sottoscrizione (audit, auditIfNotExist, deployIfNotExists, modify), la registrazione ed eventuali azioni correttive richiedono circa 30 minuti.

  • Viene creata, aggiornata o eliminata un'esenzione dai criteri. In questo scenario l'assegnazione corrispondente viene valutata per l'ambito di esenzione definito.

  • Ciclo di valutazione della conformità standard. Le assegnazioni vengono automaticamente rivalutate ogni 24 ore. Un criterio o un'iniziativa estesa di molte risorse può richiedere tempo, pertanto non è prevedibile quando verrà completato il ciclo di valutazione. Dopo il completamento, i risultati di conformità aggiornati sono disponibili nel portale e negli SDK.

  • Il provider di risorse di configurazione macchina viene aggiornato con i dettagli relativi alla conformità da una risorsa gestita.

  • Analisi su richiesta

Nota

Per impostazione predefinita, Criteri di Azure esenta tutte le risorse nel provider di risorse (RP) Microsoft.Resources dalla valutazione dei criteri, ad eccezione delle sottoscrizioni e dei gruppi di risorse, che possono essere valutati.

Analisi di valutazione su richiesta

Un'analisi di valutazione per una sottoscrizione o un gruppo di risorse può essere avviata con l'interfaccia della riga di comando di Azure, Azure PowerShell, una chiamata all'API REST o usando l'Azione di GitHub Analisi conformità di Criteri di Azure. Questa analisi è un processo asincrono.

Nota

Non tutti i provider di risorse di Azure supportano le analisi di valutazione su richiesta. Ad esempio, Gestione rete virtuale di Azure attualmente non supporta trigger manuali o il ciclo di valutazione della conformità dei criteri standard (analisi giornaliere).

Analisi di valutazione su richiesta - Azione GitHub

Usare l'azione Analisi conformità di Criteri di Azure per attivare un'analisi di valutazione su richiesta dal flusso di lavoro di GitHub su una o più risorse, gruppi di risorse o sottoscrizioni e controllare il flusso di lavoro in base allo stato di conformità delle risorse. Si può anche configurare il flusso di lavoro per l'esecuzione a un'ora pianificata in modo da ottenere lo stato di conformità più recente in un momento appropriato. Facoltativamente, GitHub Actions può generare un report sullo stato di conformità delle risorse analizzate per un'ulteriore analisi o a scopo di archiviazione.

L'esempio seguente esegue un'analisi della conformità per una sottoscrizione.

on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Per altre informazioni ed esempi di flusso di lavoro, vedere il repository di GitHub Actions per Analisi conformità di Criteri di Azure.

Analisi di valutazione su richiesta - Interfaccia della riga di comando di Azure

L'analisi di conformità viene avviata con il comando az policy state trigger-scan.

Per impostazione predefinita, az policy state trigger-scan avvia una valutazione per tutte le risorse nella sottoscrizione corrente. Per avviare una valutazione in un gruppo di risorse specifico, usare il resource-group parametro . Nell'esempio seguente viene avviata un'analisi di conformità nella sottoscrizione corrente per il gruppo di risorse MyRG:

az policy state trigger-scan --resource-group "MyRG"

È possibile scegliere di non attendere il completamento del processo asincrono prima di continuare con il no-wait parametro .

Analisi della valutazione su richiesta - Azure PowerShell

L'analisi di conformità viene avviata con il cmdlet Start-AzPolicyComplianceScan.

Per impostazione predefinita, Start-AzPolicyComplianceScan avvia una valutazione per tutte le risorse nella sottoscrizione corrente. Per avviare una valutazione in un gruppo di risorse specifico, usare il ResourceGroupName parametro . Nell'esempio seguente viene avviata un'analisi di conformità nella sottoscrizione corrente per il gruppo di risorse MyRG:

Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'

È possibile fare in modo che PowerShell attenda il completamento della chiamata asincrona prima di fornire l'output dei risultati o che venga eseguito in background come processo. Per usare un processo di PowerShell per eseguire l'analisi di conformità in background, usare il AsJob parametro e impostare il valore su un oggetto, ad esempio $job in questo esempio:

$job = Start-AzPolicyComplianceScan -AsJob

È possibile controllare lo stato del processo controllando l'oggetto $job. Il processo è di tipo Microsoft.Azure.Commands.Common.AzureLongRunningJob. Usare Get-Member sull'oggetto $job per visualizzare le proprietà e i metodi disponibili.

Durante l'esecuzione dell'analisi di conformità, il controllo dell'oggetto $job restituisce i risultati seguenti:

$job

Id     Name              PSJobTypeName     State         HasMoreData     Location             Command
--     ----              -------------     -----         -----------     --------             -------
2      Long Running O... AzureLongRunni... Running       True            localhost            Start-AzPolicyCompliance...

Al termine dell'analisi di conformità, la State proprietà viene modificata in Completed.

Analisi di valutazione su richiesta - REST

Poiché si tratta di un processo asincrono, l'endpoint REST per avviare l'analisi non attende finché l'analisi non è stata completata per rispondere. Invece, fornisce un URI per eseguire una query dello stato della valutazione richiesta.

In ogni URI dell'API REST vengono usate variabili che è necessario sostituire con i propri valori:

  • {YourRG}: sostituire con il nome del gruppo di risorse
  • {subscriptionId}: sostituire con l'ID sottoscrizione

L'analisi supporta la valutazione delle risorse in una sottoscrizione o in un gruppo di risorse. Avviare un'analisi per ambito con un comando POST dell'API REST usando le strutture URI seguenti:

  • Subscription

    POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    
  • Gruppo di risorse

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    

La chiamata restituisce uno stato 202-Accepted. Incluso nell'intestazione della risposta è una location proprietà con il formato seguente:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01

{ResourceContainerGUID} viene generato in modo statico per l'ambito richiesto. Se un ambito sta già eseguendo un'analisi su richiesta, non viene avviata una nuova analisi. Viene invece fornito lo stesso {ResourceContainerGUID} location URI per lo stato della nuova richiesta. Un comando GET dell'API REST per l'URI location restituisce un valore 202 Accettato mentre la valutazione è in corso. Al termine dell'analisi di valutazione, viene restituito lo stato 200 OK . Il corpo di un'analisi completata è una risposta JSON con lo stato:

{
  "status": "Succeeded"
}

Analisi di valutazione su richiesta - Visual Studio Code

L'estensione Criteri di Azure per Visual Studio Code è in grado di eseguire un'analisi di valutazione per una risorsa specifica. Questa analisi è un processo sincrono, a differenza dei metodi di Azure PowerShell e REST. Per informazioni dettagliate e passaggi, vedere Valutazione su richiesta con l'estensione VS Code.

Portale

Il portale di Azure illustra un'esperienza grafica di visualizzazione e comprensione dello stato di conformità nell'ambiente in uso. Nella pagina Criteri l'opzione Panoramica fornisce i dettagli per gli ambiti disponibili sulla conformità dei criteri e delle iniziative. Oltre allo stato di conformità e al conteggio per assegnazione, contiene un grafico che mostra la conformità negli ultimi sette giorni. La pagina Conformità contiene molte di queste stesse informazioni (ad eccezione del grafico), ma offre altre opzioni di filtro e ordinamento.

Screenshot della pagina Conformità, delle opzioni di filtro e dei dettagli.

Dal momento che un criterio o un'iniziativa può essere assegnata a diversi ambiti, la tabella include l'ambito di ogni assegnazione e il tipo di definizione assegnato. È anche indicato il numero di risorse non conformi e di criteri non conformi per ogni assegnazione. Quando si seleziona un criterio o su un'iniziativa nella tabella, viene fornita un'analisi più approfondita della conformità per quella particolare assegnazione.

Screenshot della pagina Dettagli conformità, inclusi i conteggi e i dettagli di conformità delle risorse.

L'elenco delle risorse nella scheda Conformità risorsa mostra lo stato di valutazione delle risorse esistenti per l'assegnazione corrente. Il valore predefinito della scheda è Non conforme, ma è possibile applicare un filtro. Gli eventi (Append, Audit, Deny, Deploy, Modify) attivati dalla richiesta di creazione di una risorsa sono visualizzati nella scheda Eventi.

Screenshot della scheda Eventi nella pagina Dettagli conformità.

Per le risorse della Modalità provider di risorse, nella scheda Conformità risorse selezionare la risorsa o fare clic con il pulsante destro del mouse sulla riga e selezionare Visualizza dettagli conformità per aprire i dettagli di conformità dei componenti. Questa pagina include anche le schede per visualizzare i criteri assegnati a questa risorsa, eventi, eventi del componente e cronologia delle modifiche.

Screenshot della scheda Conformità del componente e dei dettagli di conformità per un'assegnazione in modalità provider di risorse.

Tornare alla pagina di conformità delle risorse, selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) la riga dell'evento per cui si vogliono raccogliere maggiori dettagli, quindi selezionare Mostra log attività. Viene aperta la pagina del log attività e viene prefiltrata nella ricerca che mostra i dettagli per l'assegnazione e gli eventi. Il log attività offre un contesto aggiuntivo e altre informazioni su tali eventi.

Screenshot del log attività per le attività e le valutazioni di Criteri di Azure.

Nota

I risultati di conformità possono essere esportati dal portale tramite query di Azure Resource Graph.

Riga di comando

Le stesse informazioni disponibili nel portale possono essere recuperate con l'API REST (anche con ARMClient), Azure PowerShell e l'interfaccia della riga di comando di Azure. Per tutti i dettagli sull'API REST, vedere le informazioni di riferimento su Criteri di Azure. Le pagine di riferimento dell'API REST hanno un pulsante verde Prova su ogni operazione che consente di provarlo direttamente nel browser.

Usare ARMClient o uno strumento simile per gestire l'autenticazione in Azure per gli esempi di API REST.

Riepilogare i risultati

L'API REST consente di eseguire il riepilogo per contenitore, definizione o assegnazione. Di seguito è riportato un esempio di riepilogo a livello di sottoscrizione tramite il riepilogo per sottoscrizione di Azure Policy Insights:

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01

L'output riepiloga la sottoscrizione. Nell'output di esempio seguente la conformità riepilogata è in value.results.nonCompliantResources e value.results.nonCompliantPolicies. La richiesta fornisce maggiori dettagli, tra cui ogni assegnazione che ha costituito i numeri non conformi e le informazioni sulla definizione per ogni assegnazione. Ogni oggetto criteri nella gerarchia fornisce un queryResultsUri oggetto che può essere usato per ottenere maggiori dettagli a tale livello.

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
  "@odata.count": 1,
  "value": [
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
      "results": {
        "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
        "nonCompliantResources": 15,
        "nonCompliantPolicies": 1
      },
      "policyAssignments": [
        {
          "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
          "policySetDefinitionId": "",
          "results": {
            "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
            "nonCompliantResources": 15,
            "nonCompliantPolicies": 1
          },
          "policyDefinitions": [
            {
              "policyDefinitionReferenceId": "",
              "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
              "effect": "deny",
              "results": {
                "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
                "nonCompliantResources": 15
              }
            }
          ]
        }
      ]
    }
  ]
}

Eseguire query per le risorse

Nell'esempio precedente viene value.policyAssignments.policyDefinitions.results.queryResultsUri fornito un URI di esempio per tutte le risorse non conformi per una definizione di criteri specifica. $filter Nel valore ComplianceState è uguale (eq) a NonCompliant, PolicyAssignmentId viene specificato per la definizione dei criteri e quindi policyDefinitionId stesso. Il motivo dell'inclusione PolicyAssignmentId di nel filtro è dovuto al fatto che PolicyDefinitionId potrebbe esistere in diverse assegnazioni di criteri o iniziative con ambiti diversi. Specificando sia e PolicyAssignmentId PolicyDefinitionId, è possibile essere espliciti nei risultati cercati. In precedenza, per PolicyStates è stato usato latest, che imposta automaticamente un from intervallo di tempo e to delle ultime 24 ore.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'

La risposta di esempio seguente è stata tagliata a una singola risorsa non conforme per brevità. La risposta dettagliata contiene diversi dati che riguardano la risorsa, il criterio (o l'iniziativa) e l'assegnazione. Si noti che è anche possibile visualizzare quali parametri di assegnazione sono stati passati alla definizione dei criteri.

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 15,
  "value": [
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "timestamp": "2018-05-19T04:41:09Z",
      "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
      "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
      "effectiveParameters": "",
      "ComplianceState": "NonCompliant",
      "subscriptionId": "{subscriptionId}",
      "resourceType": "/Microsoft.Compute/virtualMachines",
      "resourceLocation": "westus2",
      "resourceGroup": "RG-Tags",
      "resourceTags": "tbd",
      "policyAssignmentName": "37ce239ae4304622914f0c77",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
      "policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
      "policyDefinitionAction": "deny",
      "policyDefinitionCategory": "tbd",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionCategory": "",
      "policySetDefinitionParameters": "",
      "managementGroupIds": "",
      "policyDefinitionReferenceId": ""
    }
  ]
}

Visualizza eventi

Quando si crea o si aggiorna una risorsa, viene generato un risultato di valutazione dei criteri. I risultati sono chiamati eventi criteri. Usare l'URI seguente per visualizzare gli eventi criteri recenti associati alla sottoscrizione.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01

I risultati saranno simili all'esempio seguente:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
  "@odata.count": 1,
  "value": [
    {
      "@odata.id": null,
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
      "NumAuditEvents": 16
    }
  ]
}

Per altre informazioni sull'esecuzione di query sugli eventi dei criteri, vedere l'articolo di riferimento Azure Policy Events (Eventi di Criteri di Azure).

Interfaccia della riga di comando di Azure

Il gruppo di comandi dell'interfaccia della riga di comando di Azure per Criteri di Azure copre la maggior parte delle operazioni disponibili in REST o Azure PowerShell. Per l'elenco completo dei comandi disponibili, vedere Interfaccia della riga di comando di Azure - Panoramica di Criteri di Azure.

Esempio: ottenere il riepilogo dello stato per i criteri più assegnati con il maggior numero di risorse non conformi.

az policy state summarize --top 1

La parte superiore della risposta è simile all'esempio seguente:

{
  "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
  "odataid": null,
  "policyAssignments": [
    {
      "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
      "policyDefinitions": [
        {
          "effect": "audit",
          "policyDefinitionGroupNames": [
            ""
          ],
          "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
          "policyDefinitionReferenceId": "",
          "results": {
            "nonCompliantPolicies": null,
            "nonCompliantResources": 398,
            "policyDetails": [
              {
                "complianceState": "noncompliant",
                "count": 1
              }
            ],
            "policyGroupDetails": [
              {
                "complianceState": "noncompliant",
                "count": 1
              }
            ],
            "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
            "resourceDetails": [
              {
                "complianceState": "noncompliant",
                "count": 398
              },
              {
                "complianceState": "compliant",
                "count": 4
              }
            ]
          }
        }
      ],
  ...

Esempio: ottenere il record di stato per la risorsa valutata più di recente (l'impostazione predefinita è per timestamp in ordine decrescente).

az policy state list --top 1
[
  {
    "complianceReasonCode": "",
    "complianceState": "Compliant",
    "effectiveParameters": "",
    "isCompliant": true,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
    "policyAssignmentName": "SecurityCenterBuiltIn",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "auditifnotexists",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "security center",
    "policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "",
    "resourceId": "/subscriptions/{subscriptionId}",
    "resourceLocation": "",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Resources/subscriptions",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.903433+00:00"
  }
]

Esempio: ottenere i dettagli per tutte le risorse di rete virtuale non conformi.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Esempio: ottenere gli eventi correlati alle risorse di rete virtuale non conformi che si sono verificati dopo una data specifica.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Azure PowerShell

Il modulo Azure PowerShell per Criteri di Azure è disponibile in PowerShell Gallery come Az.PolicyInsights. Grazie all'uso di PowerShellGet, è possibile installare il modulo usando Install-Module -Name Az.PolicyInsights (assicurarsi di avere la versione più recente di Azure PowerShell installata):

# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights

# Import the downloaded module
Import-Module Az.PolicyInsights

# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount

Il modulo include i cmdlet seguenti:

  • Get-AzPolicyStateSummary
  • Get-AzPolicyState
  • Get-AzPolicyEvent
  • Get-AzPolicyRemediation
  • Remove-AzPolicyRemediation
  • Start-AzPolicyRemediation
  • Stop-AzPolicyRemediation

Esempio: ottenere il riepilogo dello stato per i criteri più assegnati con il maggior numero di risorse non conformi.

PS> Get-AzPolicyStateSummary -Top 1

NonCompliantResources : 15
NonCompliantPolicies  : 1
PolicyAssignments     : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
                        oft.authorization/policyassignments/37ce239ae4304622914f0c77}

Esempio: ottenere il record di stato per la risorsa valutata più di recente (l'impostazione predefinita è per timestamp in ordine decrescente).

PS> Get-AzPolicyState -Top 1

Timestamp                  : 5/22/2018 3:47:34 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/networkInterfaces
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Esempio: ottenere i dettagli per tutte le risorse di rete virtuale non conformi.

PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"

Timestamp                  : 5/22/2018 4:02:20 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Esempio: recupero di eventi correlati a risorse di rete virtuale non conformi che si sono verificati dopo una data specifica, la conversione in un oggetto CSV e l'esportazione in un file.

$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'

L'output dell'oggetto $policyEvents è simile all'output seguente:

Timestamp                  : 9/19/2020 5:18:53 AM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : eastus
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd
TenantId                   : {tenantId}
PrincipalOid               : {principalOid}

Il PrincipalOid campo può essere usato per ottenere un utente specifico con il cmdlet Get-AzADUserdi Azure PowerShell . Sostituire {principalOid} con la risposta ottenuta dall'esempio precedente.

PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker

Log di Monitoraggio di Azure

Se si ha un'area di lavoro Log Analytics con AzureActivity dalla soluzione di Analisi log attività collegata alla sottoscrizione in uso, è anche possibile visualizzare i risultati di non conformità dalla valutazione di risorse nuove e aggiornate usando semplici query Kusto e la tabella AzureActivity. Con i dettagli dei log di Monitoraggio di Azure è possibile configurare gli avvisi in modo da individuare le risorse non conformi.

Screenshot dei log di Monitoraggio di Azure che mostra le azioni di Criteri di Azure nella tabella AzureActivity.

Azure Resource Graph

I record di conformità vengono archiviati in Azure Resource Graph (ARG). I dati possono essere esportati da query di Azure Resource Graph per formare dashboard personalizzati in base agli ambiti e ai criteri di interesse. Esaminare le query di esempio per esportare i dati di conformità tramite Azure Resource Graph.

Passaggi successivi