Condividi tramite


Creare criteri a livello di programmazione

Questo articolo illustra come creare a livello di programmazione e gestire i criteri. Le definizioni di Criteri di Azure applicano regole ed effetti diversi in relazione alle risorse. Il monitoraggio garantisce che le risorse rimangano conformi agli standard aziendali e agli accordi sul 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 convalidare che la sottoscrizione funzioni con il provider di risorse, registrare il provider di risorse Azure Policy Insights usando Azure PowerShell. Per registrare un provider di risorse, devi avere l'autorizzazione per eseguire l'operazione di registrazione del provider. Questa operazione è inclusa nei ruoli Collaboratore e Proprietario. Eseguire il comando seguente per registrare il provider di risorse:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Per altre informazioni sulla registrazione e la visualizzazione di provider di risorse, vedere Provider e tipi di risorse.

  4. Se non è già stato fatto, installare Azure CLI. È 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 politiche sulle 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 di tipo 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 Scope parametro su New-AzPolicyAssignment funziona con gruppo di gestione, sottoscrizione, gruppo di risorse o una singola risorsa. Il parametro utilizza un percorso di risorsa completo, che la proprietà ResourceId su Get-AzResourceGroup restituisce. Il modello per Scope 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} verrà 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 PowerShell di 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 l'elemento precedente con l'ID della sottoscrizione o con l'ID del gruppo di gestione .

    Per ulteriori informazioni sulla struttura della query, vedere Definizioni dei criteri di Azure - Creare o aggiornare e Definizioni dei criteri - Creare o aggiornare nel 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. Crea l'assegnazione dei criteri utilizzando la seguente chiamata:

    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 tra parentesi angolari < > con i propri valori.

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

    Il scope parametro su az policy assignment create funziona con gruppo di gestione, sottoscrizione, gruppo di risorse o una singola risorsa. Il parametro usa un percorso di risorsa completo. Il modello per scope 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} verrà 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 della definizione dei criteri che hai creato dovrebbe essere simile al seguente esempio:

"/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.