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ärde, men endast upprätthålla en enda principdefinition.
Kommentar
Ett taggexempel som använder läget Alla och fungerar med en resursgrupp finns i Mönster: Taggar – Exempel #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 Circuit-resursen 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 matrisvillkor i eller notIn användas. Här används det mot aliaset serviceProvider.bandwidthInMbps som ett av de definierade värdena.
"not": {
"field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
"in": "[parameters('listOfBandwidthinMbps')]"
}
Exempel 3: Parameteriserad effekt
Ett vanligt sätt att göra principdefinitioner återanvändbara är att parameterisera själva effekten. I det här exemplet används en enda parameter, effekt. Genom att parameterisera 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 att inaktiveras och nekas.
Parametern används sedan i policyRule.then blockera för effekten.
"then": {
"effect": "[parameters('effect')]"
}
Nästa steg
- Granska andra mönster och inbyggda definitioner.
- Granska Azure Policy-definitionsstrukturen.
- Granska Förstå policy-effekter.