Assegnare e gestire i criteri delle risorse

Per implementare i criteri, è necessario eseguire questi passaggi:

  1. Controllare le definizioni dei criteri (inclusi i criteri predefiniti forniti da Azure) per verificare se ne esiste già una nella sottoscrizione che soddisfa i requisiti.
  2. Se ne esiste una, ottenerne il nome.
  3. In caso contrario, definire la regola dei criteri con JSON e aggiungerla come definizione dei criteri nella sottoscrizione. Questo passaggio rende disponibile il criterio per l'assegnazione ma non applica le regole alla sottoscrizione.
  4. In entrambi i casi, assegnare i criteri a un ambito (ad esempio una sottoscrizione o un gruppo di risorse). A questo punto le regole del criterio vengono applicate.

Questo articolo illustra i passaggi per creare una definizione di criterio e assegnare tale definizione a un ambito tramite l'API REST, PowerShell o l'interfaccia della riga di comando di Azure. Se si preferisce usare il portale per assegnare i criteri, vedere Use Azure portal to assign and manage resource policies (Usare il portale di Azure per assegnare e gestire i criteri delle risorse). Questo articolo non tratta la sintassi per la creazione della definizione di un criterio. Per informazioni sulla sintassi dei criteri, vedere Usare i criteri per gestire le risorse e controllare l'accesso.

API REST

Creare una definizione di criterio

È possibile creare un criterio con l' API REST per le definizioni dei criteri. L'API REST consente di creare ed eliminare le definizioni dei criteri, e di ottenere informazioni sulle definizioni esistenti.

Per creare una definizione di criterio, eseguire:

PUT https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.authorization/policydefinitions/{policyDefinitionName}?api-version={api-version}

Includere un corpo della richiesta in modo simile all'esempio seguente:

{
  "properties": {
    "parameters": {
      "allowedLocations": {
        "type": "array",
        "metadata": {
          "description": "The list of locations that can be specified when deploying resources",
          "strongType": "location",
          "displayName": "Allowed locations"
        }
      }
    },
    "displayName": "Allowed locations",
    "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
    "policyRule": {
      "if": {
        "not": {
          "field": "location",
          "in": "[parameters('allowedLocations')]"
        }
      },
      "then": {
        "effect": "deny"
      }
    }
  }
}

Assegnare un criterio

È possibile applicare la definizione dei criteri all'ambito desiderato tramite l' API REST per le assegnazioni dei criteri. L'API REST consente di creare ed eliminare le assegnazioni dei criteri e ottenere informazioni sulle assegnazioni esistenti.

Per creare un'assegnazione di criteri, eseguire:

PUT https://management.azure.com /subscriptions/{subscription-id}/providers/Microsoft.authorization/policyassignments/{policyAssignmentName}?api-version={api-version}

{policy-assignment} è il nome dell'assegnazione di criteri.

Includere un corpo della richiesta in modo simile all'esempio seguente:

{
  "properties":{
    "displayName":"West US only policy assignment on the subscription ",
    "description":"Resources can only be provisioned in West US regions",
    "parameters": {
      "allowedLocations": { "value": ["northeurope", "westus"] }
     },
    "policyDefinitionId":"/subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyDefinitions/{definition-name}",
      "scope":"/subscriptions/{subscription-id}"
  },
}

Visualizzare un criterio

Per ottenere un criterio, usare l'operazione Ottieni definizione criteri.

Ottenere gli alias

È possibile recuperare gli alias tramite l'API REST:

GET /subscriptions/{id}/providers?$expand=resourceTypes/aliases&api-version=2015-11-01

L'esempio seguente illustra la definizione di un alias. È possibile notare che un alias definisce percorsi in diverse versioni di API, anche in caso di una modifica del nome di una proprietà.

"aliases": [
    {
      "name": "Microsoft.Storage/storageAccounts/sku.name",
      "paths": [
        {
          "path": "properties.accountType",
          "apiVersions": [
            "2015-06-15",
            "2015-05-01-preview"
          ]
        },
        {
          "path": "sku.name",
          "apiVersions": [
            "2016-01-01"
          ]
        }
      ]
    }
]

PowerShell

Prima di passare agli esempi di PowerShell, verificare di avere installato la versione più recente di Azure PowerShell. I parametri dei criteri sono stati aggiunti nella versione 3.6.0. Se si ha una versione precedente, gli esempi restituiscono un errore che indica che non è possibile trovare il parametro.

Visualizzare le definizioni dei criteri

Per visualizzare tutte le definizioni dei criteri nella sottoscrizione, usare il comando seguente:

Get-AzureRmPolicyDefinition

Restituisce tutte le definizioni dei criteri disponibili, inclusi i criteri predefiniti. Tutti i criteri vengono restituiti nel formato seguente:

Name               : e56962a6-4747-49cd-b67b-bf8b01975c4c
ResourceId         : /providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c
ResourceName       : e56962a6-4747-49cd-b67b-bf8b01975c4c
ResourceType       : Microsoft.Authorization/policyDefinitions
Properties         : @{displayName=Allowed locations; policyType=BuiltIn; description=This policy enables you to
                     restrict the locations your organization can specify when deploying resources. Use to enforce
                     your geo-compliance requirements.; parameters=; policyRule=}
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c

Prima di procedere per creare una definizione dei criteri, esaminare i criteri predefiniti. Se si trovano i criteri predefiniti che applicano i limiti necessari, è possibile ignorare la creazione di una definizione dei criteri. Al contrario, assegnare i criteri predefiniti all'ambito desiderato.

Creare una definizione di criterio

È possibile creare una definizione di criterio usando il cmdlet New-AzureRmPolicyDefinition.

$definition = New-AzureRmPolicyDefinition -Name coolAccessTier -Description "Policy to specify access tier." -Policy '{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Storage/storageAccounts"
      },
      {
        "field": "kind",
        "equals": "BlobStorage"
      },
      {
        "not": {
          "field": "Microsoft.Storage/storageAccounts/accessTier",
          "equals": "cool"
        }
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}'

L'output viene archiviato in un oggetto $definition che viene usato durante l'assegnazione del criterio.

Anziché specificare JSON come parametro, è possibile fornire il percorso al file con estensione .json contenente la regola del criterio.

$definition = New-AzureRmPolicyDefinition -Name coolAccessTier -Description "Policy to specify access tier." -Policy "c:\policies\coolAccessTier.json"

L'esempio seguente crea una definizione del criterio che include i parametri:

$policy = '{
    "if": {
        "allOf": [
            {
                "field": "type",
                "equals": "Microsoft.Storage/storageAccounts"
            },
            {
                "not": {
                    "field": "location",
                    "in": "[parameters(''allowedLocations'')]"
                }
            }
        ]
    },
    "then": {
        "effect": "Deny"
    }
}'

$parameters = '{
    "allowedLocations": {
        "type": "array",
        "metadata": {
          "description": "The list of locations that can be specified when deploying storage accounts.",
          "strongType": "location",
          "displayName": "Allowed locations"
        }
    }
}' 

$definition = New-AzureRmPolicyDefinition -Name storageLocations -Description "Policy to specify locations for storage accounts." -Policy $policy -Parameter $parameters 

Assegnare un criterio

Si applicano i criteri nell'ambito desiderato mediante il cmdlet New-AzureRmPolicyAssignment. L'esempio seguente descrive come assegnare i criteri a un gruppo di risorse.

$rg = Get-AzureRmResourceGroup -Name "ExampleGroup"
New-AzureRMPolicyAssignment -Name accessTierAssignment -Scope $rg.ResourceId -PolicyDefinition $definition

Per assegnare i criteri che richiedono parametri, creare un oggetto con tali valori. L'esempio seguente descrive come recuperare i criteri predefiniti e passare i valori dei parametri:

$rg = Get-AzureRmResourceGroup -Name "ExampleGroup"
$definition = Get-AzureRmPolicyDefinition -Id /providers/Microsoft.Authorization/policyDefinitions/e5662a6-4747-49cd-b67b-bf8b01975c4c
$array = @("West US", "West US 2")
$param = @{"listOfAllowedLocations"=$array}
New-AzureRMPolicyAssignment -Name locationAssignment -Scope $rg.ResourceId -PolicyDefinition $definition -PolicyParameterObject $param

Visualizzare l'assegnazione di un criterio

Per ottenere un'assegnazione di criteri specifica, usare:

$rg = Get-AzureRmResourceGroup -Name "ExampleGroup"
(Get-AzureRmPolicyAssignment -Name accessTierAssignment -Scope $rg.ResourceId

Per visualizzare la regola dei criteri per una definizione di criteri, usare:

(Get-AzureRmPolicyDefinition -Name coolAccessTier).Properties.policyRule | ConvertTo-Json

Rimuovere l'assegnazione di un criterio

Per rimuovere un'assegnazione di criteri, usare:

Remove-AzureRmPolicyAssignment -Name regionPolicyAssignment -Scope /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}

Interfaccia della riga di comando di Azure

Visualizzare le definizioni dei criteri

Per visualizzare tutte le definizioni dei criteri nella sottoscrizione, usare il comando seguente:

az policy definition list

Restituisce tutte le definizioni dei criteri disponibili, inclusi i criteri predefiniti. Tutti i criteri vengono restituiti nel formato seguente:

{                                                            
  "description": "This policy enables you to restrict the locations your organization can specify when deploying resources. Use to enforce your geo-compliance requirements.",                      
  "displayName": "Allowed locations",
  "id": "/providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c",
  "name": "e56962a6-4747-49cd-b67b-bf8b01975c4c",
  "policyRule": {
    "if": {
      "not": {
        "field": "location",
        "in": "[parameters('listOfAllowedLocations')]"
      }
    },
    "then": {
      "effect": "Deny"
    }
  },
  "policyType": "BuiltIn"
}

Prima di procedere per creare una definizione dei criteri, esaminare i criteri predefiniti. Se si trovano i criteri predefiniti che applicano i limiti necessari, è possibile ignorare la creazione di una definizione dei criteri. Al contrario, assegnare i criteri predefiniti all'ambito desiderato.

Creare una definizione di criterio

È possibile creare una definizione di criteri usando l'interfaccia della riga di comando di Azure con il comando di definizione dei criteri.

az policy definition create --name coolAccessTier --description "Policy to specify access tier." --rules '{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Storage/storageAccounts"
      },
      {
        "field": "kind",
        "equals": "BlobStorage"
      },
      {
        "not": {
          "field": "Microsoft.Storage/storageAccounts/accessTier",
          "equals": "cool"
        }
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}'    

Assegnare un criterio

È possibile applicare i criteri all'ambito desiderato usando il comando per l'assegnazione di criteri. L'esempio seguente descrive come assegnare i criteri a un gruppo di risorse.

az policy assignment create --name coolAccessTierAssignment --policy coolAccessTier --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}

Visualizzare l'assegnazione di un criterio

Per visualizzare l'assegnazione di criteri, specificare il nome dell'assegnazione dei criteri e l'ambito:

az policy assignment show --name coolAccessTierAssignment --scope "/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}"

Rimuovere l'assegnazione di un criterio

Per rimuovere un'assegnazione di criteri, usare:

az policy assignment delete --name coolAccessTier --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}

Passaggi successivi