Pola Azure Policy: parameter

Definisi kebijakan dapat dibuat dinamis untuk mengurangi jumlah definisi kebijakan yang diperlukan dengan menggunakan parameter. Parameter didefinisikan selama penugasan kebijakan. Parameter memiliki sekumpulan properti yang telah ditentukan sebelumnya yang menjelaskan parameter dan bagaimana parameter tersebut digunakan.

Sampel 1: Parameter string

Definisi kebijakan ini menggunakan dua parameter, tagName dan tagValue, untuk mengatur apa yang dicari penugasan kebijakan di sumber daya. Format ini memungkinkan definisi kebijakan agar digunakan untuk sejumlah kombinasi nama tag dan nilai tag, tetapi hanya mempertahankan satu definisi kebijakan.

Catatan

Untuk contoh tag yang menggunakan modeSemua dan bekerja dengan grup sumber daya, lihat Pola: Tag - Sampel #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"
            }
        }
    }
}

Sampel 1: Penjelasan

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

Dalam bagian definisi kebijakan ini, parameter tagName didefinisikan sebagai string dan deskripsi disediakan untuk penggunaannya.

Parameter kemudian digunakan dalam blok policyRule.if agar kebijakan menjadi dinamis. Di sini, digunakan untuk menentukan bidang yang dievaluasi, yaitu tag dengan nilai tagName.

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

Sampel 2: Parameter array

Definisi kebijakan ini menggunakan parameter tunggal, listOfBandwidthinMbps, untuk memeriksa apakah sumber daya Express Route Circuit telah mengonfigurasi pengaturan bandwidth ke salah satu nilai yang disetujui. Jika tidak cocok, pembuatan atau pembaruan ke sumber daya ditolak.

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

Sampel 2: Penjelasan

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

Dalam bagian definisi kebijakan ini, parameter listOfBandwidthinMbps didefinisikan sebagai array dan deskripsi disediakan untuk penggunaannya. Sebagai array, parameter memiliki beberapa nilai yang cocok.

Parameter kemudian digunakan dalam blok policyRule.if. Sebagai parameter array, kondisiarrayin atau notIn harus digunakan. Di sini, digunakan terhadap alias serviceProvider.bandwidthInMbps sebagai salah satu nilai yang ditentukan.

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

Sampel 3: Efek yang diberi parameter

Cara umum untuk menjadikan definisi kebijakan dapat digunakan kembali adalah dengan memberi parameter efek itu sendiri. Sampel ini menggunakan parameter tunggal, efek. Membuat parameter efek memungkinkan untuk menetapkan definisi yang sama ke cakupan yang berbeda dengan efek yang berbeda.

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

Sampel 3: Penjelasan

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

Dalam bagian definisi kebijakan ini, parameter efek didefinisikan sebagai string. Definisi kebijakan mengatur nilai default untuk penugasan untuk mengaudit dan membatasi opsi lain ke nonaktifkan dan tolak.

Parameter kemudian digunakan dalam blok policyRule.then untuk efek.

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

Langkah berikutnya