Creare criteri a livello di programmazioneProgrammatically create policies

Questo articolo illustra la creazione a livello di codice e la gestione dei criteri.This article walks you through programmatically creating and managing policies. Le definizioni di criteri di Azure applicano regole e effetti differenti sulle risorse.Azure Policy definitions enforce different rules and effects over your resources. L'imposizione consente di assicurare che le risorse rimangano conformi con gli standard aziendali e i contratti di servizio.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Per informazioni sulla conformità, vedere Ottenere dati sulla conformità.For information about compliance, see getting compliance data.

PrerequisitiPrerequisites

Prima di iniziare, verificare che i prerequisiti seguenti siano soddisfatti:Before you begin, make sure that the following prerequisites are met:

  1. Se non è già stato fatto, installare ARMClient.If you haven't already, install the ARMClient. È uno strumento che invia richieste HTTP alle API basate su Azure Resource Manager.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Aggiornare il modulo Azure di PowerShell all'ultima versione.Update your Azure PowerShell module to the latest version. Per informazioni dettagliate, vedere Installare il modulo di Azure PowerShell.See Install Azure PowerShell module for detailed information. Per altre informazioni sulla versione più recente, vedere Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Registrare il provider di risorse di Azure Policy Insights usando Azure PowerShell per verificare che la sottoscrizione funzioni con il provider di risorse.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Per registrare un provider di risorse, è necessaria l'autorizzazione per eseguire l'operazione /register/action per il provider di risorse.To register a resource provider, you must have permission to run the register action operation for the resource provider. Questa operazione è inclusa nei ruoli Collaboratore e Proprietario.This operation is included in the Contributor and Owner roles. Eseguire il comando seguente per registrare il provider di risorse:Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Per maggiori dettagli sulla registrazione e la visualizzazione di provider di risorse, vedere Provider e tipi di risorse.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Installare l'interfaccia della riga di comando di Azure, se non è già installata.If you haven't already, install Azure CLI. È possibile ottenere la versione più recente in Installare l'interfaccia della riga di comando di Azure in Windows.You can get the latest version at Install Azure CLI on Windows.

Creare e assegnare una definizione di criteriCreate and assign a policy definition

Il primo passo per una migliore visibilità delle risorse consiste nel creare e assegnare i criteri oltre le risorse.The first step toward better visibility of your resources is to create and assign policies over your resources. Il passaggio successivo illustra come creare e assegnare un criterio a livello di codice.The next step is to learn how to programmatically create and assign a policy. 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.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

Creare e assegnare una definizione di criteri con PowerShellCreate and assign a policy definition with PowerShell

  1. Usare il frammento JSON seguente per creare un file JSON con il nome AuditStorageAccounts.json.Use the following JSON snippet to create a JSON file with the name 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.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Eseguire il comando seguente per creare una definizione di criteri usando il file AuditStorageAccounts.json.Run the following command to create a policy definition using the AuditStorageAccounts.json file.

    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.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Per altre informazioni sui parametri aggiuntivi che è possibile usare, vedere New-AzPolicyDefinition.For more information about other parameters that you can use, see 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.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Per salvare la definizione in una posizione diversa, usare i parametri seguenti:To save the definition to a different location, use the following parameters:

    • SubscriptionId - Salva in una sottoscrizione diversa.SubscriptionId - Save to a different subscription. Richiede un valore GUID.Requires a GUID value.
    • ManagementGroupName - Salva in un gruppo di gestione.ManagementGroupName - Save to a management group. Richiede un valore stringa.Requires a string value.
  3. Dopo aver creato la definizione dei criteri, è possibile creare un'assegnazione di criteri eseguendo i comandi seguenti:After you create your policy definition, you can create a policy assignment by running the following commands:

    $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.Replace ContosoRG with the name of your intended resource group.

    Il parametro scope in New-AzPolicyAssignment funziona con un gruppo di gestione, una sottoscrizione, un gruppo di risorse o una singola risorsa.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. Il parametro usa un percorso di risorsa completo, restituito dalla proprietà ResourceId in Get-AzResourceGroup.The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. Il modello per Scope per ogni contenitore è il seguente.The pattern for Scope for each container is as follows. 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.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} può essere sostituito con il tipo di risorsa della risorsa, ad esempio Microsoft.Compute/virtualMachines per una macchina virtuale.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

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

Per altre informazioni sulla gestione dei criteri di risorse con il modulo PowerShell di Azure Resource Manager, vedere Az.Resources.For more information about managing resource policies using the Azure Resource Manager PowerShell module, see Az.Resources.

Creare e assegnare una definizione dei criteri usando ARMClientCreate and assign a policy definition using ARMClient

Usare la procedura seguente per creare una definizione dei criteri.Use the following procedure to create a policy definition.

  1. Copiare il frammento di codice JSON seguente per creare un file JSON.Copy the following JSON snippet to create a JSON file. Il file verrà chiamato nel passaggio successivo.You'll call the file in the next step.

    "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:Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2016-12-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=2016-12-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.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Per altre informazioni sulla struttura della query, vedere definizioni di criteri di Azure-creare o aggiornare e definizioni di criteri-crea o aggiorna in un gruppo di gestioneFor more information about the structure of the query, see Azure Policy Definitions – Create or Update and Policy Definitions – Create or Update At Management Group

Usare la procedura seguente per creare un'assegnazione dei criteri e assegnare la definizione dei criteri a livello di gruppo di risorse.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. Copiare il frammento di codice JSON seguente per creare un file di assegnazione dei criteri JSON.Copy the following JSON snippet to create a JSON policy assignment file. Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.Replace example information in <> symbols with your own values.

    {
        "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:Create the policy assignment using the following call:

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

    Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.Replace example information in <> symbols with your own values.

    Per altre informazioni su come eseguire le chiamate HTTP all'API REST, vedere Risorse di API REST di Azure.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Creare e assegnare una definizione dei criteri con l'interfaccia della riga di comando di AzureCreate and assign a policy definition with Azure CLI

Per creare una definizione dei criteri, usare la procedura seguente:To create a policy definition, use the following procedure:

  1. Copiare il frammento di codice JSON seguente per creare un file di assegnazione dei criteri JSON.Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "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.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Per creare una definizione dei criteri, eseguire il comando seguente:Run the following command to create a policy definition:

    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.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Per altre informazioni sui parametri aggiuntivi che è possibile usare, vedere az policy definition create.For more information about other parameters that you can use, see 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.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Per salvare la definizione in una posizione diversa, usare i parametri seguenti:To save the definition to a different location, use the following parameters:

    • --subscription - Salva in una sottoscrizione diversa.--subscription - Save to a different subscription. Richiede un valore GUID per l'ID sottoscrizione o un valore string per il nome della sottoscrizione.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • --management-group - Salva in un gruppo di gestione.--management-group - Save to a management group. Richiede un valore stringa.Requires a string value.
  3. Usare questo comando per creare un'assegnazione di criteri.Use the following command to create a policy assignment. Sostituire le informazioni di esempio incluse nei simboli <> con i valori desiderati.Replace example information in <> symbols with your own values.

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

    Il parametro --scope in az policy assignment create funziona con gruppo di gestione, sottoscrizione, gruppo di risorse o un'unica risorsa.The --scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. Il parametro usa un percorso di risorsa completo.The parameter uses a full resource path. Il modello per --scope per ogni contenitore è il seguente.The pattern for --scope for each container is as follows. 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.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} può essere sostituito con il tipo di risorsa della risorsa, ad esempio Microsoft.Compute/virtualMachines per una macchina virtuale.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

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

È possibile ottenere l'ID di definizione dei criteri di Azure usando PowerShell con il comando seguente:You can get the Azure Policy Definition ID by using PowerShell with the following command:

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:The policy definition ID for the policy definition that you created should resemble the following example:

"/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.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Passaggi successiviNext steps

Esaminare gli articoli seguenti per altre informazioni sui comandi e sulle query di questo articolo.Review the following articles for more information about the commands and queries in this article.