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. Un ejemplo habitual es la actualización de etiquetas en recursos como costCenter. Los recursos no conformes existentes se pueden solucionar con una tarea de corrección. Una sola regla de Modify puede tener cualquier número de operaciones. Las asignaciones de directivas con efecto establecido como Modify requieren una identidad administrada para realizar la corrección.

El efecto modify admite las siguientes operaciones:

  • Agregar, reemplazar o quitar etiquetas de recursos. 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 máquinas virtuales y Virtual Machine Scale Sets. Solo puede modificar identity.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 con modify.

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. Las operaciones con evaluaciones de condiciónfalsa se omiten.

Cuando se especifica un alias, se realizan más comprobaciones para asegurarse de que la operación modify no cambia 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.

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 cumple la condición if como no conforme.

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)
  • 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 las operations 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.
    • Valores disponibles: audit, deny, disabled.
    • El valor predeterminado es deny.
  • 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, Remove. Add se comporta de forma similar al efecto Append.
      • 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 propiedad o la etiqueta definidas del recurso.

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