Azure Policy-Muster: Parameter

Eine Richtliniendefinition kann mithilfe von Parametern dynamisch gemacht werden, damit weniger Richtliniendefinitionen benötigt werden. Der Parameter wird im Rahmen der Richtlinienzuweisung definiert. Parameter verfügen über eine Reihe vordefinierter Eigenschaften, die den Parameter und dessen Verwendung beschreiben.

Beispiel 1: Zeichenfolgenparameter

In dieser Richtliniendefinition werden zwei Parameter (tagName und tagValue) verwendet, um festzulegen, wonach die Richtlinienzuweisung in Ressourcen suchen soll. Mit diesem Format kann die Richtliniendefinition für beliebig viele Kombinationen aus Tagname und Tagwert verwendet werden, ohne mehrere Richtliniendefinitionen verwalten zu müssen.

Hinweis

Ein Tagbeispiel, in dem mode auf All festgelegt ist und eine Ressourcengruppe verwendet wird, finden Sie unter Muster: Tags –Beispiel 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"
            }
        }
    }
}

Beispiel 1: Erklärung

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

In diesem Teil der Richtliniendefinition wird der Parameter tagName als Zeichenfolge (String) definiert und eine Beschreibung für dessen Verwendung angegeben.

Der Parameter wird dann im Block policyRule.if verwendet, um die Richtlinie dynamisch zu machen. Hier wird damit das auszuwertende Feld (ein Tag mit dem Wert tagName) definiert.

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

Beispiel 2: Arrayparameter

In dieser Richtliniendefinition wird ein einzelner Parameter (listOfBandwidthinMbps) verwendet, um zu überprüfen, ob die Bandbreiteneinstellung der ExpressRoute-Verbindungsressource mit einem der zulässigen Werte konfiguriert ist. Ist dies nicht der Fall, wird die Erstellung oder Aktualisierung der Ressource verweigert.

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

Beispiel 2: Erklärung

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

In diesem Teil der Richtliniendefinition wird der Parameter listOfBandwidthinMbps als Array definiert und eine Beschreibung für dessen Verwendung angegeben. Da es sich um ein Array handelt, sind mehrere Werte für den Abgleich vorhanden.

Der Parameter wird dann im Block policyRule.if verwendet. Bei einem Parameter vom Typ Array muss die Bedingungin oder notIn des Arraysverwendet werden. In diesem Beispiel wird der Alias serviceProvider.bandwidthInMbps als einer der definierten Werte für den Abgleich verwendet.

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

Beispiel 3: Parametrisierte Auswirkung

Eine gängige Methode, Richtliniendefinitionen wiederverwendbar zu machen, besteht darin, die Auswirkung selbst zu parametrisieren. In diesem Beispiel wird ein einziger Parameter (effect) verwendet. Durch Parametrisieren der Auswirkung kann dieselbe Definition verschiedenen Bereichen mit unterschiedlichen Auswirkungen zugewiesen werden.

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

Beispiel 3: Erklärung

"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 diesem Teil der Richtliniendefinition wird der Parameter effect als Zeichenfolge (string) definiert. Die Richtliniendefinition legt den Standardwert für eine Zuweisung auf Audit fest und schränkt die anderen Optionen auf Disabled und Deny ein.

Der Parameter wird dann im Block policyRule.then für die Auswirkung (effect) verwendet.

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

Nächste Schritte