Esercitazione: Creare una definizione di criteri personalizzata

La definizione di criteri personalizzata consente ai clienti di definire le proprie regole per l'uso di Azure. Queste regole consentono in genere di imporre:

  • Procedure di sicurezza
  • Gestione dei costi
  • Regole specifiche dell'organizzazione (come denominazioni o posizioni)

Indipendentemente dal driver di business, la procedura per definire nuovi criteri personalizzati è sempre la stessa.

Prima di creare un criterio personalizzato, consultare gli esempi di criteri per verificare se ne esiste già uno che soddisfa le proprie esigenze.

L'approccio per creare criteri personalizzati segue questi passaggi:

  • Identificare i requisiti aziendali
  • Mappare ogni requisito a una proprietà delle risorse di Azure
  • Mappare la proprietà a un alias
  • Determinare quale effetto usare
  • Comporre la definizione del criterio

Prerequisiti

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Identificare i requisiti

Prima di creare la definizione del criterio, è importante identificarne la finalità. Per questa esercitazione, come obiettivo verrà usato un comune requisito di sicurezza aziendale per illustrare i passaggi necessari:

  • Ogni account di archiviazione deve essere abilitato per HTTPS
  • Ogni account di archiviazione deve essere disabilitato per HTTP

I requisiti devono identificare chiaramente gli stati delle risorse "essere" e "non essere".

A questo punto è stato definito lo stato previsto della risorsa, ma non l'operazione che dovrà essere eseguita con le risorse non conformi. Criteri di Azure supporta molti effetti. Per questa esercitazione, verrà definito il requisito aziendale di impedire la creazione di risorse non conformi alle regole di business. Per soddisfare questo obiettivo, verrà usato l'effetto Nega. Verrà inoltre aggiunta l'opzione per sospendere il criterio per specifiche assegnazioni. A questo scopo, verrà usato l'effetto Disabilitato, che verrà impostato come parametro nella definizione del criterio.

Determinare le proprietà della risorsa

In base ai requisiti aziendali, la risorsa di Azure da controllare con Criteri di Azure è un account di archiviazione. Tuttavia, le proprietà da usare nella definizione del criterio non sono note. Criteri di Azure esegue una valutazione rispetto alla rappresentazione JSON della risorsa, quindi è necessario individuare le proprietà disponibili per tale risorsa.

Per determinare le proprietà delle risorse di Azure, sono disponibili varie opzioni, che verranno descritte in questa esercitazione:

  • Estensione Criteri di Azure per VS Code
  • Modelli di Azure Resource Manager
    • Esportazione di una risorsa esistente
    • Esperienza di creazione
    • Modelli di avvio rapido (GitHub)
    • Documentazione di riferimento sui modelli
  • Azure Resource Explorer

Visualizzare le risorse nell'estensione per VS Code

L'estensione per VS Code può essere usata per visualizzare le risorse nell'ambiente e le proprietà di Resource Manager di ognuna.

Modelli di Gestione risorse di Azure

È possibile esaminare in vari modi un modello di ARM che include la proprietà da gestire.

Risorsa esistente nel portale

Il modo più semplice per trovare proprietà consiste nell'esaminare una risorsa esistente dello stesso tipo. Le risorse già configurate con l'impostazione da applicare forniscono anche il valore da confrontare. Esaminare la pagina Esporta modello in Impostazioni nel portale di Azure per questa specifica risorsa.

Avviso

Il modello di Resource Manager esportato dal portale di Azure non può essere collegato direttamente alla proprietà deployment di un modello di Resource Manager in una definizione di criteri deployIfNotExists.

Screenshot della pagina Esporta modello in una risorsa esistente nel portale di Azure.

Per un account di archiviazione questa pagina visualizza un modello simile a questo esempio:

...
"resources": [{
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
        "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
        "networkAcls": {
            "bypass": "AzureServices",
            "virtualNetworkRules": [],
            "ipRules": [],
            "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": false,
        "encryption": {
            "services": {
                "file": {
                    "enabled": true
                },
                "blob": {
                    "enabled": true
                }
            },
            "keySource": "Microsoft.Storage"
        }
    },
    "dependsOn": []
}]
...

Sotto properties è presente un valore denominato supportsHttpsTrafficOnly impostato su false. Questa proprietà sembra essere quella che si sta cercando. Inoltre il valore type della risorsa è Microsoft.Storage/storageAccounts. Questo valore consente di limitare il criterio applicandolo solo alle risorse di questo tipo.

Creare una risorsa nel portale

Un'altra opzione del portale è l'esperienza di creazione di risorse. Durante la creazione di un account di archiviazione tramite il portale, una delle opzioni della scheda Avanzate è Trasferimento sicuro obbligatorio. Questa proprietà prevede le opzioni Disabilitato e Abilitato. L'icona di informazioni include testo aggiuntivo che conferma che questa opzione corrisponde alla proprietà giusta. Tuttavia, il nome della proprietà non è indicato in questa schermata del portale.

Nella parte inferiore della scheda Rivedi e crea è disponibile un collegamento all'opzione Scaricare un modello per l'automazione. Selezionando questo collegamento si aprirà il modello che consente di creare la risorsa configurata. In questo caso, vengono visualizzate due informazioni:

...
"supportsHttpsTrafficOnly": {
    "type": "bool"
}
...
"properties": {
    "accessTier": "[parameters('accessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

Queste informazioni indicano il tipo di proprietà e confermano inoltre che supportsHttpsTrafficOnly è la proprietà corretta.

Modelli di avvio rapido in GitHub

I modelli di avvio rapido di Azure in GitHub includono centinaia di modelli di Resource Manager creati per diverse risorse. Questi modelli possono risultare utili per trovare la proprietà della risorsa corretta. Alcune proprietà potrebbero sembrare quelle giuste, ma è opportuno fare altri controlli.

Documenti di riferimento per le risorse

Per verificare se supportsHttpsTrafficOnly è la proprietà corretta, controllare le informazioni di riferimento del modello di Resource Manager relative alla risorsa account di archiviazione nel provider di archiviazione. L'oggetto proprietà include un elenco di parametri validi. Selezionando il collegamento StorageAccountPropertiesCreateParameters-object viene visualizzata una tabella di proprietà accettabili. La proprietà supportsHttpsTrafficOnly è presente e la descrizione corrisponde alla risorsa necessaria per soddisfare i requisiti aziendali.

Azure Resource Explorer

È possibile esplorare le risorse di Azure anche in un altro modo, ossia tramite Azure Resource Explorer (anteprima). Questo strumento usa il contesto della sottoscrizione, quindi è necessario eseguire l'autenticazione per il sito Web con le credenziali di Azure. Dopo aver completato l'autenticazione, è possibile esplorare le risorse in base a provider, sottoscrizioni, gruppi di risorse e singole risorse.

Individuare una risorsa account di archiviazione ed esaminare le proprietà. Anche qui è presente la proprietà supportsHttpsTrafficOnly. Selezionando la scheda Documentazione si può verificare che la descrizione della proprietà corrisponde a quella trovata nei documenti di riferimento in precedenza.

Trovare l'alias della proprietà

Dopo aver identificato la proprietà della risorsa, è necessario mapparla a un alias.

Per determinare gli alias per una risorsa di Azure, sono disponibili varie opzioni, che verranno descritte in questa esercitazione:

  • Estensione Criteri di Azure per VS Code
  • Interfaccia della riga di comando di Azure
  • Azure PowerShell

Ottenere alias nell'estensione VS Code

L'estensione Criteri di Azure per VS Code semplifica la visualizzazione delle risorse e l'individuazione di alias.

Nota

L'estensione VS Code espone solo le proprietà della modalità Resource Manager e non visualizza nessuna proprietà della modalità Provider di risorse.

Interfaccia della riga di comando di Azure

Nell'interfaccia della riga di comando di Azure il gruppo di comandi az provider consente di cercare gli alias delle risorse. Verrà applicato un filtro per trovare lo spazio dei nomi Microsoft.Storage in base ai dettagli recuperati in precedenza sulla risorsa di Azure.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

I risultati includono un alias supportato dagli account di archiviazione denominati supportsHttpsTrafficOnly. L'esistenza di questo alias significa che è possibile scrivere il criterio per applicare i requisiti aziendali.

Azure PowerShell

In Azure PowerShell il cmdlet Get-AzPolicyAlias consente di cercare gli alias delle risorse. Verrà applicato un filtro per trovare lo spazio dei nomi Microsoft.Storage in base ai dettagli recuperati in precedenza sulla risorsa di Azure.

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

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Anche in questo caso, come con l'interfaccia della riga di comando di Azure, i risultati includono un alias supportato dagli account di archiviazione denominati supportsHttpsTrafficOnly.

Determinare quale effetto usare

La decisione in merito all'operazione da eseguire in caso di risorse non conformi è quasi altrettanto importante di quella relativa alle valutazioni da effettuare. Ogni possibile risposta a una risorsa non conforme si chiama effetto. L'effetto controlla se la risorsa non conforme viene registrata, bloccata, include dati aggiunti o è associata a una distribuzione per riportarla a uno stato conforme.

Per questo esempio, l'effetto da scegliere è Nega, perché nell'ambiente di Azure non dovranno essere create risorse non conformi. L'effetto Controllo è una prima scelta valida per determinare l'impatto di un criterio prima di impostarlo su Nega. Per semplificare la modifica dell'effetto in base all'assegnazione, è possibile parametrizzare l'effetto. Per informazioni, vedere Parametri di seguito.

Comporre la definizione

A questo punto sono disponibili i dettagli e l'alias della proprietà per lo scenario da gestire. Quindi, è necessario comporre la regola del criterio. Se non si ha familiarità con il linguaggio dei criteri, vedere Struttura delle definizioni di criteri per informazioni. Ecco un modello vuoto di una possibile definizione di criteri:

{
    "properties": {
        "displayName": "<displayName>",
        "description": "<description>",
        "mode": "<mode>",
        "parameters": {
                <parameters>
        },
        "policyRule": {
            "if": {
                <rule>
            },
            "then": {
                "effect": "<effect>"
            }
        }
    }
}

Metadati

I primi tre componenti sono metadati dei criteri. Per questi componenti è facile fornire i valori, perché il motivo per cui viene creata la regola è noto. L'opzione mode riguarda prevalentemente i tag e la posizione delle risorse. Poiché non è necessario limitare la valutazione alle risorse che supportano i tag, verrà usato il valore all per mode.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

Parametri

Anche se per cambiare la valutazione non è stato usato un parametro, è necessario usarne uno per consentire la modifica dell'effetto ai fini della risoluzione dei problemi. Verrà definito un parametro effectType con le sole opzioni Nega e Disabilitato. Queste due opzioni soddisfano i requisiti aziendali dell'esempio. Il blocco di parametri finali sarà come indicato in questo esempio:

"parameters": {
    "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "Enable or disable the execution of the policy"
        }
    }
},

Regola dei criteri

Il passaggio finale della definizione del criterio personalizzato consiste nella composizione della regola dei criteri. Esistono due affermazioni da verificare:

  • Il tipo di account di archiviazione è Microsoft.Storage/storageAccounts
  • L'account di archiviazione supportaHttpsTrafficOnly non è true

Poiché è necessario che entrambe queste affermazioni siano vere, verrà usato l'operatore logicoallOf. Invece di creare una dichiarazione statica, verrà passato il parametro effectType all'effetto. La regola completa è riportata in questo esempio:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
        }
    ]
},
"then": {
    "effect": "[parameters('effectType')]"
}

Definizione completata

Con tutte e tre le parti del criterio definite, ecco la definizione completata:

{
    "properties": {
        "displayName": "Deny storage accounts not using only HTTPS",
        "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
        "mode": "all",
        "parameters": {
            "effectType": {
                "type": "string",
                "defaultValue": "Deny",
                "allowedValues": [
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
                        "notEquals": "true"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effectType')]"
            }
        }
    }
}

La definizione completata può essere usata per creare un nuovo criterio. Il portale e ogni SDK (interfaccia della riga di comando di Azure, Azure PowerShell e API REST) accettano la definizione in modi diversi, per cui esaminare i comandi per ogni componente per verificare l'utilizzo corretto. Quindi assegnarla usando l'effetto con parametri alle risorse appropriate per gestire la sicurezza degli account di archiviazione.

Pulire le risorse

Se le risorse di questa esercitazione non sono più necessarie, usare i passaggi seguenti per eliminare tutte le assegnazioni o definizioni create:

  1. Selezionare Definizioni (o Assegnazioni se si sta tentando di eliminare un'assegnazione) in Creazione sul lato sinistro della pagina Criteri di Azure.

  2. Cercare la nuova iniziativa o definizione (o assegnazione) di criteri da rimuovere.

  3. Fare clic con il pulsante destro del mouse sulla riga o selezionare i puntini di sospensione alla fine della definizione (o assegnazione) e quindi Elimina definizione o Elimina assegnazione.

Verifica

In questa esercitazione sono state eseguite le attività seguenti:

  • Sono stati identificati i requisiti aziendali
  • Ogni requisito è stato mappato a una proprietà delle risorse di Azure
  • La proprietà è stata mappata a un alias
  • È stato determinato l'effetto da usare
  • È stata composta la definizione del criterio

Passaggi successivi

In seguito, usare la definizione del criterio personalizzato per creare e assegnare un criterio: