Efecto Modify de las definiciones de Azure Policy
El efecto modify
se usa para agregar, actualizar o quitar propiedades o etiquetas de una suscripción o un recurso durante la creación o la actualización. Los recursos no conformes existentes también se pueden solucionar con una tarea de corrección. Las asignaciones de directivas con efecto establecido como Modify requieren una identidad administrada para realizar la corrección. Un ejemplo común que usa el efecto modify
es actualizar etiquetas en recursos como "costCenter".
Hay algunos matices en el comportamiento de modificación de las propiedades de los recursos. Obtenga más información sobre los escenarios en los que se omite la modificación.
Una sola regla de modify
puede tener cualquier número de operaciones. Las operaciones compatibles son:
- Agregar, reemplazar o quitar etiquetas de recursos. Solo se pueden quitar etiquetas. En el caso de las etiquetas, una directiva Modify siempre debe tener el elemento mode establecido en
indexed
a menos que el recurso de destino sea un grupo de recursos. - Agregar o reemplazar el valor del tipo de identidad administrada (
identity.type
) de las máquinas virtuales y los conjuntos de escalado de máquinas virtuales. Solo puede modificaridentity.type
para máquinas virtuales o Virtual Machine Scale Sets. - Agregar o reemplazar los valores de determinados alias.
- Use
Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }
en Azure PowerShell 4.6.0 o posterior para obtener una lista de los alias que se pueden usar conmodify
.
- Use
Importante
Si está administrando etiquetas, se recomienda usar Modify en lugar de Append, ya que Modify proporciona más tipos de operaciones y la posibilidad de corregir los recursos existentes. Sin embargo, se recomienda Append si no puede crear una identidad administrada o Modify no es compatible todavía con el alias de la propiedad del recurso.
Evaluación de Modify
Modify se evalúa antes de que un proveedor de recursos procese la solicitud durante la creación o actualización de un recurso. Las operaciones modify
se aplican al contenido de la solicitud cuando se cumple la condición if
de la regla de la directiva. Cada operación modify
puede especificar una condición que determina cuándo se aplica.
Cuando se especifica un alias, se realizan más comprobaciones para garantizar que la operación modify
no cambie el contenido de la solicitud de tal forma que el proveedor de recursos la rechace:
- La propiedad a la que se asigna el alias se marca como Modificable en la versión de API de la solicitud.
- El tipo de token de la operación
modify
coincide con el tipo de token esperado para la propiedad en la versión de API de la solicitud.
Si se produce un error en cualquiera de estas comprobaciones, la evaluación de la directiva recurre al valor conflictEffect
especificado.
Importante
Se recomienda que las definiciones de Modify que incluyen alias usen el efecto de conflicto de auditoría para evitar errores en las solicitudes con versiones de API en las que la propiedad asignada no es "modificable". Si el mismo alias se comporta de manera diferente con cada versión de API, se pueden usar operaciones Modify condicionales para determinar la operación modify
usada para cada versión de API.
Modificación omitida
Hay algunos casos en los que se omiten las operaciones de modificación durante la evaluación:
- Recursos existentes: cuando una definición de directiva que usa el efecto
modify
se ejecuta como parte de un ciclo de evaluación, no realiza cambios en los recursos que ya existen. En su lugar, marca cualquier recurso que cumpla la condiciónif
como no compatible, por lo que se pueden corregir mediante una tarea de corrección. - No aplicable: cuando se evalúa la condición de una operación en la matriz de
operations
como false, se omite esa operación determinada. - Propiedad no modificable: si un alias especificado para una operación no se puede modificar en la versión de la API de la solicitud, la evaluación usa el efecto de conflicto. Si el efecto de conflicto se establece en deny, la solicitud se bloquea. Si el efecto de conflicto se establece en audit, se permite que pase la solicitud, pero se omite la operación de
modify
. - Propiedad no presente: si una propiedad no está presente en la carga de recursos de la solicitud, se puede omitir la modificación. En algunos casos, las propiedades modificables se anidan dentro de otras propiedades y tienen un alias como
Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled
. Si la propiedad "principal", en este casodeleteRetentionPolicy
, no está presente en la solicitud, se omite la modificación porque se supone que esa propiedad se omite intencionadamente. Para obtener un ejemplo práctico, vaya a la sección Ejemplo de propiedad no presente. - Operación de identidad que no sea máquina virtual o VMSS: cuando una operación de modificación intenta agregar o reemplazar el campo
identity.type
en un recurso distinto de una máquina virtual o un conjunto de escalado de máquinas virtuales, la evaluación de directivas se omite por completo para que no se realice la modificación. En este caso, el recurso se considera no aplicable a la directiva.
Ejemplo de propiedad no presente
La modificación de las propiedades de recursos depende de la solicitud de API y de la carga de recursos actualizada. La carga puede depender del cliente usado, como Azure Portal, y otros factores, como el proveedor de recursos.
Imagine que aplica una directiva que modifica las etiquetas en una máquina virtual (VM). Cada vez que se actualiza la máquina virtual, como durante el cambio de tamaño o de disco, las etiquetas se actualizan según corresponda, independientemente del contenido de la carga de la máquina virtual. Esto se debe a que las etiquetas son independientes de las propiedades de la máquina virtual.
Sin embargo, si aplica una directiva que modifica las propiedades de una máquina virtual, la modificación depende de la carga del recurso. Si intenta modificar las propiedades que no están incluidas en la carga de actualización, la modificación no tendrá lugar. Por ejemplo, esto puede ocurrir al aplicar revisiones a la propiedad assessmentMode
de una máquina virtual (alias Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode
). La propiedad está "anidada", por lo que si sus propiedades primarias no se incluyen en la solicitud, se supone que esta omisión es intencionada y se omite la modificación. Para que se realice la modificación, la carga del recurso debe contener este contexto.
Propiedades de Modify
La propiedad details
del efecto modify
tiene todas las subpropiedades que definen los permisos necesarios para la corrección y las propiedades operations
que se usan para agregar, actualizar o quitar valores de etiqueta.
roleDefinitionIds
(obligatorio)- Esta propiedad debe incluir una matriz de cadenas que coinciden con el identificador de rol de control de acceso basado en rol accesible por la suscripción. Para más información, consulte Corrección: configuración de la definición de directiva.
- El rol definido debe incluir todas las operaciones concedidas al rol Colaborador.
conflictEffect
(opcional)- Determina qué definición de directiva "gana" si más de una modifica la misma propiedad o cuando la operación
modify
no funciona en el alias especificado.- En el caso de los recursos nuevos o actualizados, la definición de la directiva con deny tiene prioridad. Las definiciones de directivas con audit omiten todas las
operations
. Si más de una definición de directiva tiene el efecto deny, la solicitud se deniega como conflicto. Si todas las definiciones de directiva tienen audit, no se procesa ninguna de lasoperations
de las definiciones de directiva en conflicto. - En el caso de los recursos existentes, si hay más de una definición de directiva que tenga el efecto deny, el estado de cumplimiento es Conflict. Si una o varias definiciones de directivas tienen el efecto deny, cada asignación devuelve un estado de cumplimiento de Non-compliant.
- En el caso de los recursos nuevos o actualizados, la definición de la directiva con deny tiene prioridad. Las definiciones de directivas con audit omiten todas las
- Valores disponibles: audit, deny, disabled.
- El valor predeterminado es deny.
- Determina qué definición de directiva "gana" si más de una modifica la misma propiedad o cuando la operación
operations
(obligatorio)- Una matriz de todas las operaciones de etiqueta que se van a llevar a cabo en los recursos coincidentes.
- Propiedades:
operation
(obligatorio)- Define qué acción se va a realizar en un recurso coincidente. Las opciones son:
addOrReplace
,Add
yRemove
. Add
se comporta de forma similar al efecto append.Remove
solo se admite para las etiquetas de recursos.
- Define qué acción se va a realizar en un recurso coincidente. Las opciones son:
field
(obligatorio)- La etiqueta que se va a agregar, reemplazar o quitar. Los nombres de etiqueta deben seguir la misma convención de nomenclatura que otros campos.
value
(opcional)- Valor en el que se va a establecer la etiqueta.
- Esta propiedad es necesaria si
operation
es addOrReplace o Add.
condition
(opcional)- Una cadena que contiene una expresión de lenguaje de Azure Policy con funciones de directiva que se evalúa como true o false.
- No admite las siguientes funciones de directiva:
field()
,resourceGroup()
,subscription()
.
Operaciones de Modify
La matriz de propiedades operations
permite modificar varias etiquetas de maneras diferentes a partir de una única definición de directiva. Cada operación se compone de propiedades operation
, field
y value
. operation
determina qué hace la tarea de corrección en las etiquetas, field
determina qué etiqueta se modifica y value
define el nuevo valor de la etiqueta. En el ejemplo siguiente se realizan los siguientes cambios en las etiquetas:
- Se establece la etiqueta
environment
en "Test", incluso si ya existe con otro valor. - Se quita la etiqueta
TempResource
. - Se establece la etiqueta
Dept
en el parámetro de directiva DeptName configurado en la asignación de directiva.
"details": {
...
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "Test"
},
{
"operation": "Remove",
"field": "tags['TempResource']",
},
{
"operation": "addOrReplace",
"field": "tags['Dept']",
"value": "[parameters('DeptName')]"
}
]
}
La propiedad operation
tiene las opciones siguientes:
Operación | Descripción |
---|---|
addOrReplace |
Agrega la propiedad o la etiqueta definidas y el valor al recurso, incluso si estas ya existen con un valor diferente. |
add |
Agrega la propiedad o la etiqueta definidas y el valor al recurso. |
remove |
Quita la etiqueta definida del recurso. Solo se admite para las etiquetas. |
Ejemplos de Modify
Ejemplo 1: se agrega la etiqueta environment
y se reemplazan las etiquetas environment
existentes por "Test":
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "Test"
}
]
}
}
Ejemplo 2: se quita la etiqueta env
y se agrega la etiqueta environment
o se reemplazan las etiquetas environment
existentes por un valor parametrizado:
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"conflictEffect": "deny",
"operations": [
{
"operation": "Remove",
"field": "tags['env']"
},
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "[parameters('tagValue')]"
}
]
}
}
Ejemplo 3: asegúrese de que una cuenta de almacenamiento no permita el acceso público a los blobs; la operación modify
solo se aplica cuando se evalúan solicitudes con una versión de API mayor o igual que 2019-04-01
:
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
],
"conflictEffect": "audit",
"operations": [
{
"condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
"operation": "addOrReplace",
"field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
"value": false
}
]
}
}
Pasos siguientes
- Puede consultar ejemplos en Ejemplos de Azure Policy.
- Revise la estructura de definición de Azure Policy.
- 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.
- Revise Grupos de administración de Azure.