Patrón de Azure Policy: parámetros

Una definición de directiva se puede convertir en dinámica para reducir el número de definiciones de directiva necesarias mediante el uso de parámetros. El parámetro se define durante la asignación de la directiva. Los parámetros tienen un conjunto de propiedades predefinidas que describen el parámetro y cómo se usa.

Muestra 1: Parámetros de cadena

Esta definición de directiva usa dos parámetros, tagName y tagValue, para establecer lo que busca la asignación de directiva en los recursos. Este formato permite usar la definición de directiva para cualquier número de combinaciones de nombre de etiqueta y valor de etiqueta, pero solo se mantiene una única definición de directiva.

Nota

Para obtener un ejemplo de etiqueta que use el valor All en la propiedad mode y funcione con un grupo de recursos, consulte Patrón: etiquetas, Muestra 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"
            }
        }
    }
}

Muestra 1: Explicación

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

En esta parte de la definición de directiva, el parámetro tagName se define como una cadena y se proporciona una descripción para su uso.

A continuación, el parámetro se usa en el bloque policyRule.if para que la directiva sea dinámica. Aquí, se usa para definir el campo que se evalúa, que es una etiqueta con el valor de tagName.

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

Ejemplo 2: Parámetros de matriz

Esta definición de directiva usa un solo parámetro, listOfBandwidthinMbps, para comprobar si el recurso del circuito de ExpressRoute ha establecido la configuración de ancho de banda en uno de los valores aprobados. Si no coincide, la creación o actualización del recurso se deniega.

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

Ejemplo 2: Explicación

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

En esta parte de la definición de directiva, el parámetro listOfBandwidthinMbps se define como una matriz y se proporciona una descripción para su uso. Como matriz, tiene varios valores que hacer coincidir.

A continuación, el parámetro se usa en el bloque policyRule.if. Como parámetro de matriz, se debe usar una matriz de condiciones con in o notIn. En este caso, se usa con el alias serviceProvider.bandwidthInMbps como uno de los valores definidos.

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

Ejemplo 3: Efecto con parámetros

Una forma habitual de hacer que las definiciones de directiva sean reutilizables es parametrizar el propio efecto. En este ejemplo se usa un solo parámetro, effect. La parametrización del efecto permite asignar la misma definición a distintos ámbitos con distintos efectos.

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

Ejemplo 3: Explicación

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

En esta parte de la definición de la directiva, el parámetro effect se define como cadena. La definición de directiva establece el valor predeterminado de una asignación para auditoría y limita las demás opciones a deshabilitar y denegar.

A continuación, el parámetro se usa en el bloque policyRule.then para el efecto.

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

Pasos siguientes