Patrón de Azure Policy: agrupación de definiciones de directiva

Una iniciativa es un grupo de definiciones de directiva. Al agrupar definiciones de directiva relacionadas en un único objeto, puede crear una única asignación que habría representado varias asignaciones.

Definición de iniciativa de ejemplo

Esta iniciativa implementa dos definiciones de directiva, cada una de las cuales toma los parámetros tagName y tagValue. La propia iniciativa tiene dos parámetros: costCenterValue y productNameValue. Se proporciona cada uno de estos parámetros de iniciativa a cada una de las definiciones de directiva agrupadas. Este diseño maximiza la reutilización de las definiciones de directiva existentes, a la vez que limita el número de asignaciones necesarias creadas para implementarlas.

{
    "properties": {
        "displayName": "Billing Tags Policy Initiative",
        "description": "Specify cost Center tag and product name tag",
        "parameters": {
            "costCenterValue": {
                "type": "String",
                "metadata": {
                    "displayName": "required value for Cost Center tag"
                }
            },
            "productNameValue": {
                "type": "String",
                "metadata": {
                    "displayName": "required value for product Name tag"
                }
            }
        },
        "policyDefinitions": [{
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            }
        ]
    }
}

Explicación

Parámetros de iniciativa

Una iniciativa puede definir sus propios parámetros que luego se pasan a las definiciones de directiva agrupadas. En este ejemplo, costCenterValue y productNameValue se definen como parámetros de iniciativa. Los valores se proporcionan cuando se asigna la iniciativa.

"parameters": {
    "costCenterValue": {
        "type": "String",
        "metadata": {
            "displayName": "required value for Cost Center tag"
        }
    },
    "productNameValue": {
        "type": "String",
        "metadata": {
            "displayName": "required value for product Name tag"
        }
    }
},

Definiciones de directiva incluidas

Cada definición de directiva incluida debe proporcionar el valor de policyDefinitionId y una matriz parameters si la definición de directiva acepta parámetros. En el siguiente fragmento de código, la definición de directiva incluida usa dos parámetros: tagName y tagValue. tagName se define con un literal, pero tagValue usa el parámetro costCenterValue definido por la iniciativa. Este paso de los valores mejora la reutilización.

{
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
    "parameters": {
        "tagName": {
            "value": "costCenter"
        },
        "tagValue": {
            "value": "[parameters('costCenterValue')]"
        }
    }
},

Pasos siguientes