Aracılığıyla paylaş


Azure İlkesi deseni: parametreler

Parametreler kullanılarak gereken ilke tanımlarının sayısını azaltmak için bir ilke tanımı dinamik hale getirilebilir. parametresi, ilke ataması sırasında tanımlanır. Parametreler, parametreyi ve nasıl kullanıldığını açıklayan önceden tanımlanmış özellikler kümesine sahiptir.

Örnek 1: Dize parametreleri

Bu ilke tanımı, ilke atamasının kaynaklarda ne arayacağını ayarlamak için tagName ve tagValue olmak üzere iki parametre kullanır. Bu biçim, ilke tanımının herhangi bir sayıda etiket adı ve etiket değeri bileşimi için kullanılmasını sağlar, ancak yalnızca tek bir ilke tanımını korur.

Not

Tümü modunu kullanan ve bir kaynak grubuyla çalışan bir etiket örneği için bkz. Desen: Etiketler - Örnek #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"
            }
        }
    }
}

Örnek 1: Açıklama

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

İlke tanımının bu bölümünde tagName parametresi bir dize olarak tanımlanır ve kullanımı için bir açıklama sağlanır.

Parametresi daha sonra ilkeyi dinamik hale getirmek için policyRule.if bloğunda kullanılır. Burada, tagName değerine sahip bir etiket olan değerlendirilen alanı tanımlamak için kullanılır.

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

Örnek 2: Dizi parametreleri

Bu ilke tanımı, Express Route Devresi kaynağının bant genişliği ayarını onaylanan değerlerden birine yapılandırdığını denetlemek için listOfBandwidthinMbps adlı tek bir parametre kullanır. Eşleşmiyorsa, kaynak oluşturma veya güncelleştirme reddedilir.

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

Örnek 2: Açıklama

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

İlke tanımının bu bölümünde listOfBandwidthinMbps parametresi bir dizi olarak tanımlanır ve kullanımı için bir açıklama sağlanır. Dizi olarak, eşleşmesi gereken birden çok değere sahiptir.

Parametresi daha sonra policyRule.if bloğunda kullanılır. Dizi parametresi olarak, bir dizikoşulu in veya notIn kullanılmalıdır. Burada serviceProvider.bandwidthInMbps diğer adına karşı tanımlı değerlerden biri olarak kullanılır.

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

Örnek 3: Parametreli efekt

İlke tanımlarını yeniden kullanılabilir hale getirmenin yaygın yollarından biri, efektin kendisini parametreleştirmektir. Bu örnekte tek bir parametre, efekt kullanılır. Efektin parametreleştirilmesi, aynı tanımın farklı efektlerle farklı kapsamlara atanmalarını mümkün kılar.

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

Örnek 3: Açıklama

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

İlke tanımının bu bölümünde, efekt parametresi dize olarak tanımlanır. İlke tanımı, bir atamanın varsayılan değerini denetleyecek şekilde ayarlar ve diğer seçenekleri devre dışı bırakılıp reddedecek şekilde sınırlar.

Parametresi daha sonra policyRule.then etkisi için block içinde kullanılır.

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

Sonraki adımlar