Azure Policy mönster: parametrar

En principdefinition kan göras dynamisk för att minska antalet principdefinitioner som behövs med hjälp av parametrar. Parametern definieras under principtilldelningen. Parametrar har en uppsättning fördefinierade egenskaper som beskriver parametern och hur den används.

Exempel 1: Strängparametrar

Den här principdefinitionen använder två parametrar, tagName och tagValue, för att ange vad principtilldelningen letar efter på resurser. Det här formatet gör att principdefinitionen kan användas för valfritt antal kombinationer av taggnamn och taggvärden, men endast upprätthålla en enda principdefinition.

Anteckning

Ett taggexempel som använder lägetAlla och fungerar med en resursgrupp finns i Mönster: Taggar – Exempel nr 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"
            }
        }
    }
}

Exempel 1: Förklaring

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

I den här delen av principdefinitionen definieras parametern tagName som en sträng och en beskrivning tillhandahålls för dess användning.

Parametern används sedan i policyRule.if-blocket för att göra principen dynamisk. Här används det för att definiera det fält som utvärderas, vilket är en tagg med värdet tagName.

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

Exempel 2: Matrisparametrar

Den här principdefinitionen använder en enda parameter, listOfBandwidthinMbps, för att kontrollera om Express Route-kretsresursen har konfigurerat bandbreddsinställningen till ett av de godkända värdena. Om den inte matchar nekas skapandet eller uppdateringen av resursen.

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

Exempel 2: Förklaring

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

I den här delen av principdefinitionen definieras parametern listOfBandwidthinMbps som en matris och en beskrivning tillhandahålls för dess användning. Som en matris har den flera värden att matcha.

Parametern används sedan i policyRule.if-blocket . Som en matrisparameter måste ett matrisvillkori eller notIn användas. Här används den mot aliaset serviceProvider.bandwidthInMbps som ett av de definierade värdena.

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

Exempel 3: Parametriserad effekt

Ett vanligt sätt att göra principdefinitioner återanvändbara är att parametrisera själva effekten. I det här exemplet används en enda parameter, effekt. Genom att parametrisera effekten kan du tilldela samma definition till olika omfång med olika effekter.

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

Exempel 3: Förklaring

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

I den här delen av principdefinitionen definieras effektparametern som sträng. Principdefinitionen anger standardvärdet för en tilldelning för granskning och begränsar de andra alternativen till inaktiverade och nekande.

Parametern används sedan i policyRule.then-blocket för effekten.

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

Nästa steg