Azure Policy vzor: parametry

Definici zásad je možné vytvořit dynamickou, aby se snížil počet potřebných definic zásad pomocí parametrů. Parametr se definuje při přiřazování zásad. Parametry mají sadu předdefinovaných vlastností, které popisují parametr a způsob jeho použití.

Ukázka 1: Parametry řetězce

Tato definice zásady používá dva parametry , tagName a tagValue, k nastavení toho, co přiřazení zásad hledá u prostředků. Tento formát umožňuje použít definici zásady pro libovolný počet kombinací názvu značky a hodnoty značky, ale zachovat pouze jednu definici zásady.

Poznámka

Ukázku značky, která používá režimVše a funguje se skupinou prostředků, najdete v tématu Vzor: Značky – Ukázka č. 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"
            }
        }
    }
}

Ukázka 1: Vysvětlení

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

V této části definice zásady je parametr tagName definován jako řetězec a je k dispozici popis pro jeho použití.

Parametr se pak použije v bloku policyRule.if , aby byla zásada dynamická. Tady se používá k definování pole, které se vyhodnotí, což je značka s hodnotou tagName.

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

Ukázka 2: Parametry pole

Tato definice zásady používá jeden parametr listOfBandwidthinMbps ke kontrole, jestli prostředek okruhu Express Route nakonfiguroval nastavení šířky pásma na jednu ze schválených hodnot. Pokud se neshoduje, vytvoření nebo aktualizace prostředku se zamítnou.

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

Ukázka 2: Vysvětlení

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

V této části definice zásady je parametr listOfBandwidthinMbps definován jako pole a je k dispozici popis pro jeho použití. Jako pole má několik hodnot, které se musí shodovat.

Parametr se pak použije v bloku policyRule.if . Jako parametr pole je nutné použít podmínkupolev nebo neIn. Tady se používá proti aliasu serviceProvider.bandwidthInMbps jako jednu z definovaných hodnot.

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

Ukázka 3: Parametrizovaný efekt

Běžným způsobem, jak zajistit opakované používání definic zásad, je parametrizace samotného efektu. V tomto příkladu se používá jeden parametr, efekt. Parametrizace efektu umožňuje přiřadit stejnou definici různým oborům s různými efekty.

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

Ukázka 3: Vysvětlení

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

V této části definice zásad je parametr efektu definován jako řetězec. Definice zásady nastaví výchozí hodnotu pro přiřazení na audit a omezí ostatní možnosti na zakázání a zamítnutí.

Parametr se pak použije v bloku policyRule.then pro efekt.

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

Další kroky