Condividi tramite


Creare criteri a livello di programmazione

Questo articolo illustra la creazione a livello di codice e la gestione dei criteri. Le definizioni di Criteri di Azure applicano regole ed effetti diversi in relazione alle risorse. L'applicazione assicura che le risorse rimangano conformi agli standard aziendali e ai contratti a livello di servizio.

Per informazioni sulla conformità, vedere Ottenere dati sulla conformità.

Prerequisiti

Prima di iniziare, verificare che i prerequisiti seguenti siano soddisfatti:

  1. Se non è già stato fatto, installare ARMClient. È uno strumento che invia richieste HTTP alle API basate su Azure Resource Manager.

  2. Aggiornare il modulo Azure di PowerShell all'ultima versione. Per informazioni dettagliate, vedere Installare il modulo di Azure PowerShell. Per altre informazioni sulla versione più recente, vedere Azure PowerShell.

  3. Per garantire che la sottoscrizione funzioni con il provider di risorse, registrare il provider di risorse Insights di Criteri di Azure usando Azure PowerShell. Per registrare un provider di risorse, è necessaria l'autorizzazione per eseguire l'operazione /register/action per il provider di risorse. Questa operazione è inclusa nei ruoli Collaboratore e Proprietario. Eseguire il comando seguente per registrare il provider di risorse:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Per maggiori dettagli sulla registrazione e la visualizzazione di provider di risorse, vedere Provider e tipi di risorse.

  4. Installare l'interfaccia della riga di comando di Azure, se non è già installata. È possibile ottenere la versione più recente in Installare l'interfaccia della riga di comando di Azure in Windows.

Creare e assegnare una definizione di criteri

Il primo passo per una migliore visibilità delle risorse consiste nel creare e assegnare i criteri oltre le risorse. Il passaggio successivo illustra come creare e assegnare un criterio a livello di codice. Il criterio di esempio controlla gli account di archiviazione aperti a tutte le reti pubbliche usando PowerShell, l'interfaccia della riga di comando di Azure e le richieste HTTP.

Creare e assegnare una definizione di criteri con PowerShell

  1. Usare il frammento JSON seguente per creare un file JSON con il nome AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Per altre informazioni sulla creazione di una definizione dei criteri, vedere Struttura delle definizioni di Criteri di Azure.

  2. Eseguire il comando seguente per creare una definizione di criteri usando il file AuditStorageAccounts.json.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    Il comando crea una definizione di criteri denominata Audit Storage Accounts Open to Public Networks. Per altre informazioni sui parametri aggiuntivi che è possibile usare, vedere New-AzPolicyDefinition.

    Se chiamato senza parametri per la posizione, New-AzPolicyDefinition salva per impostazione predefinita la definizione dei criteri nella sottoscrizione selezionata del contesto di sessioni. Per salvare la definizione in una posizione diversa, usare i parametri seguenti:

    • SubscriptionId - Salva in una sottoscrizione diversa. Richiede un valore GUID.
    • ManagementGroupName - Salva in un gruppo di gestione. Richiede un valore stringa.
  3. Dopo aver creato la definizione dei criteri, è possibile creare un'assegnazione di criteri eseguendo i comandi seguenti:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    Sostituire ContosoRG con il nome del gruppo di risorse previsto.

    Il parametro Scope in New-AzPolicyAssignment funziona con un gruppo di gestione, una sottoscrizione, un gruppo di risorse o un'unica risorsa. Il parametro usa un percorso di risorsa completo, restituito dalla proprietà ResourceId in Get-AzResourceGroup. Il modello per Scope per ogni contenitore è il seguente. Sostituire {rName}, {rgName}, {subId} e {mgName} rispettivamente con il nome della risorsa, il nome del gruppo di risorse, l'ID della sottoscrizione e il nome del gruppo di gestione. {rType} può essere sostituito con il tipo di risorsa della risorsa, ad esempio Microsoft.Compute/virtualMachines per una macchina virtuale.

    • Risorsa - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Gruppo di risorse - /subscriptions/{subId}/resourceGroups/{rgName}
    • Sottoscrizione - /subscriptions/{subId}
    • Gruppo di gestione - /providers/Microsoft.Management/managementGroups/{mgName}

Per altre informazioni sulla gestione dei criteri delle risorse tramite il modulo di PowerShell Resource Manager, vedere Az.Resources.

Creare e assegnare una definizione dei criteri usando ARMClient

Usare la procedura seguente per creare una definizione dei criteri.

  1. Copiare il frammento di codice JSON seguente per creare un file JSON. Il file verrà chiamato nel passaggio successivo.

    "properties": {
        "displayName": "Audit Storage Accounts Open to Public Networks",
        "policyType": "Custom",
        "mode": "Indexed",
        "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.",
        "parameters": {},
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                        "equals": "Allow"
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
    
  2. Creare la definizione dei criteri usando una delle chiamate seguenti:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    
    # For defining a policy in a management group
    armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    

    Sostituire il precedente {subscriptionId} con l'ID della sottoscrizione o il {managementGroupId} con l'ID del gruppo di gestione.

    Per altre informazioni sulla struttura della query, vedere Criteri di Azure definizioni - Creare o aggiornare o aggiornare le definizioni dei criteri - Creare o aggiornare il gruppo di gestione.

Usare la procedura seguente per creare un'assegnazione dei criteri e assegnare la definizione dei criteri a livello di gruppo di risorse.

  1. Copiare il frammento di codice JSON seguente per creare un file di assegnazione dei criteri JSON. Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.

    {
        "properties": {
            "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.",
            "displayName": "Audit Storage Accounts Open to Public Networks Assignment",
            "parameters": {},
            "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks",
            "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>"
        }
    }
    
  2. Creare l'assegnazione dei criteri usando la chiamata seguente:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2021-09-01" @<path to Assignment JSON file>
    

    Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.

    Per altre informazioni su come eseguire le chiamate HTTP all'API REST, vedere Risorse di API REST di Azure.

Creare e assegnare una definizione dei criteri con l'interfaccia della riga di comando di Azure

Per creare una definizione dei criteri, usare la procedura seguente:

  1. Copiare il frammento di codice JSON seguente per creare un file di assegnazione dei criteri JSON.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Per altre informazioni sulla creazione di una definizione dei criteri, vedere Struttura delle definizioni di Criteri di Azure.

  2. Per creare una definizione dei criteri, eseguire il comando seguente:

    az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
    

    Il comando crea una definizione di criteri denominata Audit Storage Accounts Open to Public Networks. Per altre informazioni sui parametri aggiuntivi che è possibile usare, vedere az policy definition create.

    Se chiamato senza parametri per la posizione, az policy definition creation salva per impostazione predefinita la definizione dei criteri nella sottoscrizione selezionata del contesto di sessioni. Per salvare la definizione in una posizione diversa, usare i parametri seguenti:

    • subscription - Salva in una sottoscrizione diversa. Richiede un valore GUID per l'ID sottoscrizione o un valore string per il nome della sottoscrizione.
    • management-group - Salva in un gruppo di gestione. Richiede un valore stringa.
  3. Usare questo comando per creare un'assegnazione di criteri. Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    Il parametro scope in az policy assignment create funziona con un gruppo di gestione, una sottoscrizione, un gruppo di risorse o un'unica risorsa. Il parametro usa un percorso di risorsa completo. Il modello per scope per ogni contenitore è il seguente. Sostituire {rName}, {rgName}, {subId} e {mgName} rispettivamente con il nome della risorsa, il nome del gruppo di risorse, l'ID della sottoscrizione e il nome del gruppo di gestione. {rType} può essere sostituito con il tipo di risorsa della risorsa, ad esempio Microsoft.Compute/virtualMachines per una macchina virtuale.

    • Risorsa - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Gruppo di risorse - /subscriptions/{subID}/resourceGroups/{rgName}
    • Sottoscrizione - /subscriptions/{subID}
    • Gruppo di gestione - /providers/Microsoft.Management/managementGroups/{mgName}

È possibile ottenere l'ID definizione di Criteri di Azure usando PowerShell con il comando seguente:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

L'ID definizione dei criteri per la definizione dei criteri creata dovrebbe essere simile al seguente:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Per altre informazioni su come gestire i criteri di risorse con l'interfaccia della riga di comando di Azure, vedere Criteri di risorse dell'interfaccia della riga di comando di Azure.

Passaggi successivi

Esaminare gli articoli seguenti per altre informazioni sui comandi e sulle query di questo articolo.