Parámetros de estructura de definición de Azure Policy
Los parámetros ayudan a simplificar la administración de directivas mediante la reducción del número de definiciones de directiva. Piense en los parámetros como si fueran los campos de un formulario: name
, address
, city
y state
. Estos parámetros no cambian, pero sí sus valores en función del individuo que rellena el formulario. Los parámetros funcionan del mismo modo al crear las directivas. Con la inclusión de parámetros en una definición de directiva, puede volver a usar esa directiva en distintos escenarios con valores diferentes.
Adición o eliminación de parámetros
Pueden agregarse parámetros a una definición existente y asignada. El nuevo parámetro debe incluir la propiedad defaultValue
. Esta propiedad evita que las asignaciones existentes de la directiva o la iniciativa realizadas indirectamente no sean válidas.
Los parámetros no se pueden quitar de una definición de directiva porque puede haber una asignación que establezca el valor del parámetro y esa referencia se rompería. Algunas definiciones de directiva integradas ponen parámetros en desuso mediante metadatos "deprecated": true
, que oculta el parámetro al asignar la definición en Azure Portal. Aunque este método no se admite para las definiciones de directivas personalizadas, otra opción es duplicar y crear una nueva definición de directiva personalizada sin el parámetro.
Propiedades del parámetro
Un parámetro usa las siguientes propiedades en una definición de directiva:
name
: El nombre del parámetro. Lo utiliza la función de la implementaciónparameters
dentro de la regla de directiva. Para más información, consulte Uso de un valor de parámetro.type
Determina si el parámetro es de tipostring
,array
,object
,boolean
,integer
,float
odateTime
.metadata
: define las subpropiedades que usa principalmente Azure Portal para mostrar información intuitiva:description
: La explicación de para qué se usa el parámetro. Puede utilizarse para proporcionar ejemplos de valores aceptables.displayName
: El nombre descriptivo que se muestra en el portal para el parámetro.strongType
: (Opcional) Se usa al asignar la definición de directiva mediante el portal. Proporciona una lista que tiene en cuenta el contexto. Para más información, consulte strongType.assignPermissions
: (Opcional) Establecer como true para que Azure Portal cree asignaciones de roles durante la asignación de directivas. Esta propiedad es útil en caso de que desee asignar permisos fuera del ámbito de asignación. Hay una asignación de roles por cada definición de roles de la directiva (o por cada definición de roles de todas las directivas de la iniciativa). El valor del parámetro debe ser un recurso o un ámbito válidos.deprecated
: una marca booleana para indicar si un parámetro está en desuso en una definición integrada.
defaultValue
: (Opcional) Establece el valor del parámetro en una asignación, si no se especifica ningún valor. Requerido cuando se actualiza una definición de directiva existente que está asignada. Para los parámetros de tipo de objeto, el valor debe coincidir con el esquema adecuado.allowedValues
: (Opcional) Proporciona una matriz de los valores que acepta el parámetro durante la asignación.- Distinción entre mayúsculas y minúsculas: las comparaciones de valores permitidos distinguen mayúsculas de minúsculas al asignar una directiva, lo que significa que los valores de parámetro seleccionados de la asignación deben coincidir con el uso de mayúsculas y minúsculas de los valores de la matriz en la definición
allowedValues
. Sin embargo, una vez seleccionados los valores para la asignación, la evaluación de comparaciones de cadenas puede no distinguir entre mayúsculas y minúsculas en función de la condición utilizada. Por ejemplo, si el parámetro especificaDev
como un valor de etiqueta permitido en una asignación y este valor se compara con una cadena de entrada mediante la condiciónequals
, Azure Policy evaluaría posteriormente un valor de etiquetadev
como coincidencia aunque sea en minúsculas porquenotEquals
no distingue mayúsculas de minúsculas. - Para los parámetros de tipo objeto, el valor debe coincidir con el esquema adecuado.
- Distinción entre mayúsculas y minúsculas: las comparaciones de valores permitidos distinguen mayúsculas de minúsculas al asignar una directiva, lo que significa que los valores de parámetro seleccionados de la asignación deben coincidir con el uso de mayúsculas y minúsculas de los valores de la matriz en la definición
schema
: (Opcional) Proporciona validación de entradas de parámetro durante la asignación mediante un esquema JSON autodefinido. Esta propiedad solo se admite para los parámetros de tipo de objeto y sigue la implementación 2019-09 del esquema Json.NET. Puede obtener más información sobre el uso de esquemas en https://json-schema.org/ y probar borradores de esquemas en https://www.jsonschemavalidator.net/.
Parámetros de ejemplo
Ejemplo 1
Por ejemplo, podría definir una definición de directiva para limitar las ubicaciones en las que se pueden implementar los recursos. Un parámetro para esta directiva podría ser allowedLocations
y utilizarse por cada asignación de la definición de directiva para limitar los valores aceptados. El uso de strongType
proporciona una experiencia mejorada al completar la asignación mediante el portal:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"westus2"
],
"allowedValues": [
"eastus2",
"westus2",
"westus"
]
}
}
Una entrada de ejemplo para este parámetro de tipo de matriz (sin strongType
) en el momento de la asignación podría ser ["westus", "eastus2"]
.
Ejemplo 2
En un escenario más avanzado, podría definir una directiva que requiera pods de clúster de Kubernetes para usar etiquetas especificadas. Un parámetro para esa definición de directiva podría ser labelSelector
y utilizarse en cada asignación de la definición de directiva para especificar los recursos de Kubernetes en cuestión según las claves de etiqueta y los valores:
"parameters": {
"labelSelector": {
"type": "Object",
"metadata": {
"displayName": "Kubernetes label selector",
"description": "Label query to select Kubernetes resources for policy evaluation. An empty label selector matches all Kubernetes resources."
},
"defaultValue": {},
"schema": {
"description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all resources.",
"type": "object",
"properties": {
"matchLabels": {
"description": "matchLabels is a map of {key,value} pairs.",
"type": "object",
"additionalProperties": {
"type": "string"
},
"minProperties": 1
},
"matchExpressions": {
"description": "matchExpressions is a list of values, a key, and an operator.",
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"description": "key is the label key that the selector applies to.",
"type": "string"
},
"operator": {
"description": "operator represents a key's relationship to a set of values.",
"type": "string",
"enum": [
"In",
"NotIn",
"Exists",
"DoesNotExist"
]
},
"values": {
"description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"operator"
],
"additionalProperties": false
},
"minItems": 1
}
},
"additionalProperties": false
}
},
}
Una entrada de ejemplo de este parámetro de tipo de objeto en el momento de la asignación estaría en formato JSON, se validaría mediante el esquema especificado y podría ser:
{
"matchLabels": {
"poolID": "abc123",
"nodeGroup": "Group1",
"region": "southcentralus"
},
"matchExpressions": [
{
"key": "name",
"operator": "In",
"values": [
"payroll",
"web"
]
},
{
"key": "environment",
"operator": "NotIn",
"values": [
"dev"
]
}
]
}
Uso de un valor de parámetro
En la regla de directiva, se hace referencia a los parámetros con la siguiente sintaxis de función parameters
:
{
"field": "location",
"in": "[parameters('allowedLocations')]"
}
En este ejemplo se hace referencia al parámetro allowedLocations
que se mostró en las propiedades del parámetro.
strongType
Dentro de la propiedad metadata
, puede usar strongType
para proporcionar una lista de opciones de selección múltiple en Azure Portal. strongType
puede ser un tipo de recurso compatible o un valor permitido. Para determinar si un tipo de recurso es válido para strongType
, use Get-AzResourceProvider. El formato de un tipo de recurso strongType
es <Resource Provider>/<Resource Type>
. Por ejemplo, Microsoft.Network/virtualNetworks/subnets
.
Se admiten algunos tipos de recursos que no devuelve Get-AzResourceProvider
. Estos tipos son:
Microsoft.RecoveryServices/vaults/backupPolicies
Los valores permitidos que no son de tipo de recurso para strongType
son:
location
resourceTypes
storageSkus
vmSKUs
existingResourceGroups
Pasos siguientes
- Para obtener más información sobre la estructura de definición de directiva, vaya a los conceptos básicos, la regla de directiva y el alias.
- Para las iniciativas, vaya a la estructura de definición de iniciativa.
- Puede consultar ejemplos en Ejemplos de Azure Policy.
- Vea la Descripción de los efectos de directivas.
- Obtenga información acerca de cómo se pueden crear directivas mediante programación.
- Obtenga información sobre cómo obtener datos de cumplimiento.
- Obtenga información sobre cómo corregir recursos no compatibles.
- En Organización de los recursos con grupos de administración de Azure, obtendrá información sobre lo que es un grupo de administración.