Share via


Azure Policy-patroon: parameters

Een beleidsdefinitie kan via parameters dynamisch worden gemaakt om het aantal beleidsdefinities te beperken dat nodig is. De parameter wordt gedefinieerd tijdens de beleidstoewijzing. Parameters hebben een aantal vooraf gedefinieerde eigenschappen die de parameter en de manier waarop deze worden gebruikt, beschrijven.

Voorbeeld 1: Tekenreeksparameters

Deze beleidsdefinitie maakt gebruik van twee parameters, tagName en tagValue, om in te stellen wat de beleidstoewijzing zoekt op resources. Dankzij deze indeling kan de beleidsdefinitie worden gebruikt voor alle combinaties van tagnaam en tagwaarde, met behoud van één beleidsdefinitie.

{
    "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: Uitleg

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

De parameter wordt vervolgens gebruikt in het blok policyRule.if om het beleid dynamisch te maken. Hier wordt het gebruikt om het veld te definiëren dat wordt geëvalueerd. Dit is een tag met de waarde tagName.

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

Voorbeeld 2: Matrixparameters

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. Als dat niet zo is, wordt het maken of bijwerken van de resource geweigerd.

{
    "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: Uitleg

"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. Als een arrayzijn er meerdere waarden die moeten overeenkomen.

De parameter wordt vervolgens gebruikt in het blok policyRule.if. Als een array-parameter, moet de voorwaarde in of notIn van array worden gebruikt. Hier wordt de parameter gebruikt met de alias serviceProvider.bandwidthInMbps als een van de gedefinieerde waarden.

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

Voorbeeld 3: Geparameteriseerd effect

Een veelgebruikte manier om beleidsdefinities geschikt te maken voor hergebruik, is om het effect zelf te parameteriseren. In dit voorbeeld wordt slechts één parameter gebruikt, effect. Door het effect te parameteriseren, is het mogelijk om dezelfde definitie toe te wijzen aan verschillende bereiken met verschillende effecten.

{
    "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: Uitleg

"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. Met de beleidsdefinitie wordt de standaardwaarde voor een toewijzing ingesteld op audit en worden de andere opties beperkt tot disabled en deny.

De parameter wordt vervolgens gebruikt in het blok policyRule.then voor het effect.

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

Volgende stappen