Modello di Criteri di Azure: parametri

Una definizione di criteri può essere resa dinamica tramite parametri per ridurre il numero di definizioni necessarie. Il parametro viene definito durante l'assegnazione dei criteri. I parametri includono un set di proprietà predefinite che ne descrivono le caratteristiche e il modo in cui vengono usati.

Esempio 1. Parametri stringa

Questa definizione di criterio usa due parametri, tagName e tagValue, per impostare l'assegnazione dei criteri che cerca sulle risorse. Questo formato consente di usare la definizione dei criteri per un numero qualsiasi di combinazioni di nomi e valori di tag, ma di mantenere una singola definizione di criteri.

Nota

Per un esempio di tag che usa la modalitàTutti e funziona con un gruppo di risorse, vedere Pattern: Tags - Sample #1.

{
    "properties": {
        "displayName": "Require tag and its value",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Enforces a required tag and its value. Does not apply to resource groups.",
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "description": "Name of the tag, such as costCenter"
                }
            },
            "tagValue": {
                "type": "String",
                "metadata": {
                    "description": "Value of the tag, such as headquarter"
                }
            }
        },
        "policyRule": {
            "if": {
                "not": {
                    "field": "[concat('tags[', parameters('tagName'), ']')]",
                    "equals": "[parameters('tagValue')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Esempio 1. Spiegazione

"tagName": {
    "type": "String",
    "metadata": {
        "description": "Name of the tag, such as costCenter"
    }
},

In questa parte della definizione dei criteri, il parametro tagName viene definito come stringa e viene fornita una descrizione del relativo uso.

Il parametro viene quindi usato nel blocco policyRule.if per rendere dinamico il criterio. Qui viene usato per definire il campo valutato, che è un tag con il valore tagName.

"if": {
    "not": {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "equals": "[parameters('tagValue')]"
    }
},

Esempio 2: Parametri di matrice

Questa definizione di criteri usa un singolo parametro, listOfBandwidthinMbps, per verificare se la risorsa Express Route Circuit ha configurato l'impostazione della larghezza di banda su uno dei valori approvati. In caso di mancata corrispondenza, la creazione o l'aggiornamento della risorsa viene negato.

{
    "properties": {
        "displayName": "Allowed Express Route bandwidth",
        "description": "This policy enables you to specify a set of express route bandwidths that your organization can deploy.",
        "parameters": {
            "listOfBandwidthinMbps": {
                "type": "Array",
                "metadata": {
                    "description": "The list of SKUs that can be specified for express route.",
                    "displayName": "Allowed Bandwidth"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Network/expressRouteCircuits"
                    },
                    {
                        "not": {
                            "field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
                            "in": "[parameters('listOfBandwidthinMbps')]"
                        }
                    }
                ]
            },
            "then": {
                "effect": "Deny"
            }
        }
    }
}

Esempio 2: Spiegazione

"listOfBandwidthinMbps": {
    "type": "Array",
    "metadata": {
        "description": "The list of SKUs that can be specified for express route.",
        "displayName": "Allowed Bandwidth"
    }
}

In questa parte della definizione dei criteri, il parametro listOfBandwidthinMbps viene definito come matrice e viene fornita una descrizione del relativo uso. Essendo una matrice, include più valori per cui trovare una corrispondenza.

Il parametro viene quindi usato nel blocco policyRule.if. Come parametro di matrice, è necessario usare la condizione di matricein o notIn. Qui viene usato per l'alias serviceProvider.bandwidthInMbps come uno dei valori definiti.

"not": {
    "field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
    "in": "[parameters('listOfBandwidthinMbps')]"
}

Esempio 3: Effetto con parametri

Un modo comune per rendere riutilizzabili le definizioni dei criteri è parametrizzare l'effetto stesso. Questo esempio usa un solo parametro, effect. La parametrizzazione dell'effetto rende possibile assegnare la stessa definizione a ambiti diversi con effetti diversi.

{
    "properties": {
        "displayName": "All authorization rules except RootManageSharedAccessKey should be removed from Service Bus namespace",
        "policyType": "BuiltIn",
        "mode": "All",
        "description": "Service Bus clients should not use a namespace level access policy that provides access to all queues and topics in a namespace. To align with the least privilege security model, you should create access policies at the entity level for queues and topics to provide access to only the specific entity",
        "metadata": {
            "version": "1.0.1",
            "category": "Service Bus"
        },
        "parameters": {
            "effect": {
                "type": "string",
                "defaultValue": "Audit",
                "allowedValues": [
                    "Audit",
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "The effect determines what happens when the policy rule is evaluated to match"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.ServiceBus/namespaces/authorizationRules"
                    },
                    {
                        "field": "name",
                        "notEquals": "RootManageSharedAccessKey"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]"
            }
        }
    }
}

Esempio 3: Spiegazione

"parameters": {
    "effect": {
        "type": "string",
        "defaultValue": "Audit",
        "allowedValues": [
            "Audit",
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "The effect determines what happens when the policy rule is evaluated to match"
        }
    }
},

In questa parte della definizione dei criteri, il parametro effect viene definito come stringa. La definizione dei criteri imposta il valore predefinito per un'assegnazione su audit e limita le altre opzioni a disabled e deny.

Il parametro viene quindi usato nel blocco policyRule.then per l'effetto.

"then": {
    "effect": "[parameters('effect')]"
}

Passaggi successivi