Efecto auditIfNotExists de las definiciones de Azure Policy

Ele efecto auditIfNotExists habilita la auditoría de recursos relacionados con el recurso que coincide con la condición if, pero no tiene las propiedades especificadas en los details de la condición then.

Evaluación de AuditIfNotExists

auditIfNotExists se ejecuta después de que un proveedor de recursos ha procesado una solicitud de creación o actualización de recursos y ha devuelto un código de estado correcto. La auditoría se produce si no hay recursos relacionados o si los recursos definidos por ExistenceCondition no se evalúan como true. En el caso de los recursos nuevos y actualizados, Azure Policy agrega una operación Microsoft.Authorization/policies/audit/action al registro de actividad y marca el recurso como no compatible. Cuando se desencadena, el recurso que cumple la condición if es el recurso que está marcado como no conforme.

Propiedades de AuditIfNotExists

La propiedad details de los efectos AuditIfNotExists tiene todas las subpropiedades que definen los recursos relacionados para coincidir.

  • type (obligatorio)
    • Especifica el tipo del recurso relacionado para coincidir.
    • Si type es un tipo de recurso debajo del recurso de condición if, la directiva consultará los recursos de este type que estén dentro del ámbito del recurso evaluado. De lo contrario, las consultas de directiva dentro del mismo grupo de recursos o suscripción que el recurso evaluado dependen de existenceScope.
  • name (opcional)
    • Especifica el nombre exacto del recurso para coincidir y hace que la directiva recupere un recurso específico en lugar de todos los recursos del tipo especificado.
    • Cuando los valores de condición para if.field.type y then.details.type coinciden, entonces el name se convierte en obligatorio y debe ser [field('name')], o [field('fullName')] para un recurso secundario. Sin embargo, un efecto Audit debe tenerse en cuenta en su lugar.

Nota:

Los segmentos type y name se pueden combinar para recuperar de forma genérica los recursos anidados.

Para recuperar un recurso específico, puede usar "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" y "name": "parentResourceName/nestedResourceName".

Para recuperar una colección de recursos anidados, se puede proporcionar un ? de carácter comodín en lugar del segmento de apellidos. Por ejemplo, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" y "name": "parentResourceName/?". Esto se puede combinar con funciones de campo para acceder a los recursos relacionados con el recurso evaluado, como "name": "[concat(field('name'), '/?')]"."

  • resourceGroupName (opcional)
    • Permite que la coincidencia del recurso relacionado provenga de un grupo de recursos diferente.
    • No se aplica si type es un recurso que estaría debajo del recurso de condición if.
    • El valor predeterminado es el grupo de recursos del recurso de la condición if.
  • existenceScope (opcional)
    • Los valores permitidos son Subscription y ResourceGroup.
    • Establece el ámbito de donde obtener el recurso relacionado para que coincida.
    • No se aplica si type es un recurso que estaría debajo del recurso de condición if.
    • Para ResourceGroup, limitaría al grupo de recursos en resourceGroupName si se especifica. Si no se especifica resourceGroupName, limitaría al grupo de recursos de la condición if, que es el comportamiento predeterminado.
    • Para Subscription, se consulta toda la suscripción para el recurso relacionado. El ámbito de asignación debe establecerse en la suscripción o superior para una evaluación adecuada.
    • El valor predeterminado es ResourceGroup.
  • evaluationDelay (opcional)
    • Especifica cuándo se debe evaluar la existencia de los recursos relacionados. El retraso solo se usa para las evaluaciones que son el resultado de una solicitud de creación o de actualización de recursos.
    • Los valores permitidos son AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure, o una duración ISO 8601 entre 0 y 360 minutos.
    • Los valores AfterProvisioning inspeccionan el resultado de aprovisionamiento del recurso que se evaluó en la condición if de la regla de directiva. AfterProvisioning se ejecuta una vez completado el aprovisionamiento, independientemente del resultado. Si el aprovisionamiento tarda más de seis horas, se trata como un error a la hora de determinar los retrasos de evaluación de AfterProvisioning.
    • El valor predeterminado es PT10M (10 minutos).
    • La especificación de un retraso de evaluación largo puede hacer que el estado de cumplimiento registrado del recurso no se actualice hasta el siguiente desencadenador de evaluación.
  • existenceCondition (opcional)
    • Si no se especifica, todo recurso relacionado de type cumple con el efecto y no desencadena la auditoría.
    • Usa el mismo lenguaje que la regla de directiva para la condición if, pero se evalúa individualmente en relación con cada recurso relacionado.
    • Si algún recurso relacionado coincidente se evalúa como true, se cumple la condición del efecto y no se desencadena la auditoría.
    • Puede usar [field()] para comprobar la equivalencia con los valores en la condición if.
    • Por ejemplo, podría usarse para validar que el recurso primario (en la condición if) está en la misma ubicación de recursos que el recurso relacionado coincidente.

Ejemplo de AuditIfNotExists

Ejemplo: evalúa las máquinas virtuales para determinar si existe la extensión Antimalware y luego audita cuando faltan.

{
  "if": {
    "field": "type",
    "equals": "Microsoft.Compute/virtualMachines"
  },
  "then": {
    "effect": "auditIfNotExists",
    "details": {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "existenceCondition": {
        "allOf": [
          {
            "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
            "equals": "Microsoft.Azure.Security"
          },
          {
            "field": "Microsoft.Compute/virtualMachines/extensions/type",
            "equals": "IaaSAntimalware"
          }
        ]
      }
    }
  }
}

Pasos siguientes