Model Azure Policy: parametry
Definici zásady lze vytvořit dynamickou, aby se snížil počet definic zásad, které jsou potřeba pomocí parametrů. Parametr je definován během 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ázvů značek a hodnot značek, ale zachovat pouze jednu definici zásady.
Poznámka:
Ukázku značek, která používá režim Vše a pracuje 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 popis je k dispozici pro jeho použití.
Parametr se pak použije v bloku policyRule.if , aby se 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 ExpressRoute nakonfiguroval nastavení šířky pásma na jednu ze schválených hodnot. Pokud se neshoduje, vytvoření nebo aktualizace prostředku se odmítne.
{
"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 popis je k dispozici pro jeho použití. Jako pole má několik hodnot, které se mají shodovat.
Parametr se pak použije v bloku policyRule.if . Jako parametr pole je nutné použít podmínku polenebo neIn. Tady se používá proti aliasu serviceProvider.bandwidthInMbps jako jedna 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 opakovaně použít definice zásad, je parametrizovat samotný efekt. Tento příklad 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ásady je parametr efektu definován jako řetězec. Definice zásady nastaví výchozí hodnotu pro přiřazení pro audit a omezuje ostatní možnosti na zakázání a zamítnutí.
Parametr se pak použije v policyRule.then block for the effect.
"then": {
"effect": "[parameters('effect')]"
}
Další kroky
- Projděte si další vzory a předdefinované definice.
- Projděte si strukturu definic Azure Policy.
- Projděte si Vysvětlení efektů zásad.