Azure Policy-patroon: parametersAzure Policy pattern: parameters

Een beleidsdefinitie kan via parameters dynamisch worden gemaakt om het aantal beleidsdefinities te beperken dat nodig is.A policy definition can be made dynamic to reduce the number of policy definitions that are needed by using parameters. De parameter wordt gedefinieerd tijdens de beleidstoewijzing.The parameter is defined during policy assignment. Parameters hebben een aantal vooraf gedefinieerde eigenschappen die de parameter en de manier waarop deze worden gebruikt, beschrijven.Parameters have a set of pre-defined properties that describe the parameter and how it's used.

Voorbeeld 1: TekenreeksparametersSample 1: String parameters

Deze beleidsdefinitie maakt gebruik van twee parameters, tagName en tagValue, om in te stellen wat de beleidstoewijzing zoekt voor resources.This policy definition uses two parameters, tagName and tagValue, to set what the policy assignment is looking for on resources. Dankzij deze indeling kan de beleidsdefinitie worden gebruikt voor alle combinaties van tagnaam en tagwaarde, met behoud van één beleidsdefinitie.This format allows the policy definition to be used for any number of tag name and tag value combinations, but only maintain a single policy definition.

Notitie

Als u een voorbeeld met een tag wilt zien waarin mode All wordt gebruikt en dat gebruikmaakt van een resourcegroep, gaat u naar Patroon: Tags - Voorbeeld 1.For a tag sample that uses mode All and works with a resource group, see 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"
            }
        }
    }
}

Voorbeeld 1: UitlegSample 1: Explanation

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

In dit gedeelte van de beleidsdefinitie wordt de parameter tagName gedefinieerd als een string (tekenreeks), met inbegrip van een beschrijving voor het gebruik van de parameter.In this portion of the policy definition, the tagName parameter is defined as a string and a description is provided for its use.

De parameter wordt vervolgens gebruikt in het blok policyRule.if om het beleid dynamisch te maken.The parameter is then used in the policyRule.if block to make the policy dynamic. Hier wordt het gebruikt om het veld te definiëren dat wordt geëvalueerd. Dit is een tag met de waarde tagName.Here, it's used to define the field that is evaluated, which is a tag with the value of tagName.

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

Voorbeeld 2: MatrixparametersSample 2: Array parameters

In deze beleidsdefinitie wordt één parameter gebruikt, listOfBandwidthinMbps, om te controleren of voor de Express Route Circuit-resource de bandbreedte-instelling is geconfigureerd op een van de goedgekeurde waarden.This policy definition uses a single parameter, listOfBandwidthinMbps, to check if the Express Route Circuit resource has configured the bandwidth setting to one of the approved values. Als dat niet zo is, wordt het maken of bijwerken van de resource geweigerd.If it doesn't match, the creation or update to the resource is denied.

{
    "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"
            }
        }
    }
}

Voorbeeld 2: UitlegSample 2: Explanation

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

In dit gedeelte van de beleidsdefinitie wordt de parameter listOfBandwidthinMbps gedefinieerd als een array (matrix), met inbegrip van een beschrijving voor het gebruik van de parameter.In this portion of the policy definition, the listOfBandwidthinMbps parameter is defined as an array and a description is provided for its use. Als een array zijn er meerdere waarden die moeten overeenkomen.As an array, it has multiple values to match.

De parameter wordt vervolgens gebruikt in het blok policyRule.if.The parameter is then used in the policyRule.if block. Als een array-parameter, moet de voorwaarde in of notIn van array worden gebruikt.As an array parameter, an array condition's in or notIn must be used. Hier wordt de parameter gebruikt met de alias serviceProvider.bandwidthInMbps als een van de gedefinieerde waarden.Here, it's used against the serviceProvider.bandwidthInMbps alias as one of the defined values.

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

Voorbeeld 3: Geparameteriseerd effectSample 3: Parameterized effect

Een veelgebruikte manier om beleidsdefinities geschikt te maken voor hergebruik, is om het effect zelf te parameteriseren.A common way to make policy definitions reusable is to parameterize the effect itself. In dit voorbeeld wordt slechts één parameter gebruikt, effect.This example uses a single parameter, effect. Door het effect te parameteriseren, is het mogelijk om dezelfde definitie toe te wijzen aan verschillende bereiken met verschillende effecten.Parameterizing the effect makes it possible to assign the same definition to different scopes with different effects.

{
    "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')]"
            }
        }
    }
}

Voorbeeld 3: UitlegSample 3: Explanation

"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 dit gedeelte van de beleidsdefinitie wordt de parameter effect gedefinieerd als string.In this portion of the policy definition, the effect parameter is defined as string. Met de beleidsdefinitie wordt de standaardwaarde voor een toewijzing ingesteld op audit en worden de andere opties beperkt tot disabled en deny.The policy definition sets the default value for an assignment to audit and limits the other options to disabled and deny.

De parameter wordt vervolgens gebruikt in het blok policyRule.then voor het effect.The parameter is then used in the policyRule.then block for the effect.

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

Volgende stappenNext steps