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 ,ad esempio denominazione 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, usare un requisito di sicurezza aziendale comune come obiettivo per illustrare i passaggi coinvolti:

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

Mentre è stato definito lo stato previsto della risorsa, non è stato definito ciò che si vuole fare con le risorse non conformi. Criteri di Azure supporta molti effetti. Per questa esercitazione si definisce il requisito aziendale come prevenzione della creazione di risorse se non sono conformi alle regole business. Per raggiungere questo obiettivo, viene usato l'effetto di negazione . Verrà inoltre aggiunta l'opzione per sospendere il criterio per specifiche assegnazioni. Usare l'effetto disabilitato e rendere l'effetto un parametro nella definizione dei criteri.

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 valuta la rappresentazione JSON della risorsa, quindi è necessario comprendere le proprietà disponibili in tale risorsa.

Per determinare le proprietà delle risorse di Azure, sono disponibili varie opzioni, Ognuna di queste esercitazioni viene esaminata:

  • Criteri di Azure'estensione per VS Code.
  • Modelli di Azure Resource Manager.
    • Esportare una risorsa esistente.
    • Esperienza di creazione.
    • Modelli di avvio rapido (GitHub).
    • Documentazione di riferimento sul modello.
  • 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 la risorsa specifica.

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": []
  }
]

In properties è un valore denominato supportsHttpsTrafficOnly impostato su false. Questa proprietà potrebbe essere la proprietà che stiamo cercando. Inoltre, l'oggetto 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. Quando si crea un account di archiviazione tramite il portale, è necessaria un'opzione nella scheda Avanzate. Questa proprietà prevede le opzioni Disabilitato e Abilitato. L'icona info contiene più testo che conferma che questa opzione è probabilmente la proprietà desiderata. Tuttavia, il portale non indica il nome della proprietà in questa schermata.

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 supportsHttpsTrafficOnly anche che è la proprietà che stiamo cercando.

Modelli di avvio rapido in GitHub

I modelli di avvio rapido di Azure in GitHub includono centinaia di modelli arm creati per risorse diverse. Questi modelli possono risultare utili per trovare la proprietà della risorsa corretta. Alcune proprietà potrebbero sembrare ciò che si sta cercando, ma controllare qualcos'altro.

Documenti di riferimento per le risorse

Per convalidare supportsHttpsTrafficOnly la proprietà corretta, controllare le informazioni di riferimento sul modello di Resource Manager per la risorsa dell'account di archiviazione nel provider di archiviazione. L'oggetto proprietà include un elenco di parametri validi. Se si seleziona il collegamento all'oggetto StorageAccountPropertiesCreateParameters , viene visualizzata una tabella di proprietà accettabili. supportsHttpsTrafficOnly è presente e la descrizione corrisponde a ciò che stiamo cercando per quanto riguarda 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à. La proprietà viene visualizzata supportsHttpsTrafficOnly anche qui. 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à

È stata identificata la proprietà della risorsa, ma è necessario eseguire il mapping di tale proprietà a un alias.

Per determinare gli alias per una risorsa di Azure, sono disponibili varie opzioni, Ognuna di queste esercitazioni viene esaminata:

  • Criteri di Azure'estensione 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. Viene applicato un filtro per lo Microsoft.Storage spazio dei nomi in base ai dettagli della risorsa di Azure in precedenza.

# 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"

Nei risultati viene visualizzato 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. Filtrare per lo Microsoft.Storage spazio dei nomi in base ai dettagli della risorsa di Azure in precedenza.

# 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

Analogamente all'interfaccia della riga di comando di Azure, i risultati mostrano 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.

Ad esempio, deny è l'effetto desiderato perché non si vogliono creare risorse non conformi nell'ambiente Azure. Il controllo è una buona scelta per un effetto dei criteri per determinare l'effetto di un criterio prima di impostarlo su deny. Per semplificare la modifica dell'effetto in base all'assegnazione, è possibile parametrizzare l'effetto. Per informazioni dettagliate, vedere i parametri.

Comporre la definizione

A questo punto sono disponibili i dettagli e l'alias della proprietà per lo scenario da gestire. Successivamente, si compone la regola dei criteri stessa. Se non si ha familiarità con il linguaggio dei criteri, fare riferimento alla struttura della definizione dei criteri per strutturare la definizione dei criteri. Di seguito è riportato un modello vuoto che indica l'aspetto di una definizione di criteri:

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

Metadata

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, usare tutto il valore 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 non è stato usato un parametro per modificare la valutazione, è consigliabile usare un parametro per consentire la modifica di per la effect risoluzione dei problemi. Si definisce un effectType parametro e lo si limita solo deny a e disabled. 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. Sono state identificate due istruzioni da testare per:

  • L'account type di archiviazione è Microsoft.Storage/storageAccounts.
  • L'account supportsHttpsTrafficOnly di archiviazione non trueè .

Poiché è necessario che entrambe queste istruzioni siano vere, usare l'operatore allOf logico. Passare il effectType parametro all'effetto invece di creare una dichiarazione statica. 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 si lavora con le risorse di questa esercitazione, seguire questa procedura per eliminare le assegnazioni o le 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.

Revisione

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: