wzorzec Azure Policy: parametry

Definicja zasad może być dynamiczna, aby zmniejszyć liczbę definicji zasad, które są wymagane przy użyciu parametrów. Parametr jest definiowany podczas przypisywania zasad. Parametry mają zestaw wstępnie zdefiniowanych właściwości, które opisują parametr i sposób jego użycia.

Przykład 1: parametry ciągu

Ta definicja zasad używa dwóch parametrów, tagName i tagValue, aby ustawić, czego szuka przypisanie zasad dla zasobów. Ten format umożliwia użycie definicji zasad dla dowolnej liczby kombinacji nazwy tagu i wartości tagu, ale zachować tylko jedną definicję zasad.

Uwaga

Aby zapoznać się z przykładem tagu, który używa trybuWszystkie i współpracuje z grupą zasobów, zobacz Wzorzec: tagi — przykład 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"
            }
        }
    }
}

Przykład 1. Wyjaśnienie

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

W tej części definicji zasad parametr tagName jest definiowany jako ciąg , a opis jest dostarczany do jego użycia.

Parametr jest następnie używany w bloku policyRule.if , aby zasady były dynamiczne. W tym miejscu służy do definiowania ocenianego pola, czyli tagu o wartości tagName.

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

Przykład 2. Parametry tablicy

Ta definicja zasad używa jednego parametru listOfBandwidthinMbps, aby sprawdzić, czy zasób obwodu usługi Express Route skonfigurował ustawienie przepustowości na jedną z zatwierdzonych wartości. Jeśli nie jest ona zgodna, tworzenie lub aktualizacja zasobu zostanie odrzucona.

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

Przykład 2. Wyjaśnienie

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

W tej części definicji zasad parametr listOfBandwidthinMbps jest definiowany jako tablica , a opis jest dostarczany do jego użycia. Jako tablica ma wiele wartości do dopasowania.

Parametr jest następnie używany w bloku policyRule.if . Jako parametr tablicy należy użyć warunkutablicyw elem lub nieW. W tym miejscu jest on używany względem aliasu serviceProvider.bandwidthInMbps jako jednej ze zdefiniowanych wartości.

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

Przykład 3. Efekt sparametryzowany

Typowym sposobem na ponowne użycie definicji zasad jest sparametryzowanie samego efektu. W tym przykładzie użyto pojedynczego parametru, efekt. Parametryzacja efektu umożliwia przypisanie tej samej definicji do różnych zakresów z różnymi efektami.

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

Przykład 3. Wyjaśnienie

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

W tej części definicji zasad parametr efekt jest definiowany jako ciąg. Definicja zasad ustawia wartość domyślną przypisania do inspekcji i ogranicza inne opcje do wyłączenia i odmowy.

Parametr jest następnie używany w bloku policyRule.then dla efektu.

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

Następne kroki