Wzorzec usługi Azure Policy: parametry
Definicja zasad może być dynamiczna, aby zmniejszyć liczbę definicji zasad, które są potrzebne 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żywanie definicji zasad dla dowolnej liczby kombinacji nazwy tagu i wartości tagu, ale tylko jedna definicja zasad.
Uwaga
Aby zapoznać się z przykładem tagu, który używa trybu Wszystkie 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 elemecie policyRule.if , aby ustawić zasady jako dynamiczny. W tym miejscu służy do definiowania pola, które jest oceniane, 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 ten zasób nie jest zgodny, tworzenie lub aktualizowanie zasobu zostanie odrzucone.
{
"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 warunek tablicy w elem lub nieW musi być używany. 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, efektu. 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 efektu 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 elemecie policyRule.then block dla efektu.
"then": {
"effect": "[parameters('effect')]"
}
Następne kroki
- Przejrzyj inne wzorce i wbudowane definicje.
- Przejrzyj temat Struktura definicji zasad Azure Policy.
- Przejrzyj wyjaśnienie działania zasad.