Un historial que dice “registro actualizado” no permite reconstruir una incidencia. En el extremo opuesto, guardar cuerpos completos, tokens o valores sensibles convierte el log en otra fuente de exposición. Un registro de auditoría necesita evidencia suficiente para atribuir y entender el cambio, con minimización deliberada.
Evento mínimo
Modela cada cambio como un evento estructurado:
| Campo | Propósito |
|---|---|
occurred_at |
instante UTC con precisión definida |
actor_type y actor_id |
persona, servicio o tarea que actuó |
action |
operación estable: invoice.approve |
resource_type y resource_id |
objeto afectado |
tenant_id |
ámbito organizativo autorizado |
result |
éxito, denegación o fallo |
reason_code |
motivo controlado, no texto sensible libre |
correlation_id |
vínculo con solicitud y procesos posteriores |
change_set |
nombres de campos cambiados y valores seguros permitidos |
Distingue al actor efectivo del usuario que inició una delegación. Si un trabajo automático completa una solicitud humana, registra ambos vínculos sin atribuir al usuario una acción técnica que ejecutó otro componente.
Qué no debe entrar directamente
OWASP recomienda excluir, enmascarar o proteger identificadores de sesión, tokens, contraseñas, claves, cadenas de conexión y datos personales sensibles. Una regla práctica es registrar que cambió bank_account, pero no copiar el número anterior y el nuevo en un sistema de logs ampliamente accesible.
Para valores que necesiten prueba de igualdad sin revelación, evalúa una huella con un esquema y clave adecuados. No presentes el hash como anonimización universal: dominios pequeños pueden enumerarse.
Sanitiza saltos de línea y delimitadores para evitar inyección de logs. Limita campos libres y valida tamaños. Los errores de aplicación deben seguir el contrato de errores de API sin volcar peticiones completas por defecto.
Integridad y acceso
Separa auditoría de los logs de depuración. La primera suele requerir retención, permisos y controles de modificación más estrictos. Restringe lectura por función, registra accesos al propio historial y protege transmisión y almacenamiento.
Define qué ocurre si no se puede escribir el evento. Para una operación crítica, puede ser preferible rechazar el cambio antes que ejecutarlo sin evidencia. En otras acciones, una cola duradera y una alarma ofrecen continuidad. La decisión pertenece al modelo de riesgo.
Pruebas que aportan confianza
- un cambio exitoso genera exactamente un evento con actor y recurso correctos;
- una denegación también deja evidencia sin revelar el objeto de otro tenant;
- reintentos no multiplican eventos de negocio como si fueran cambios distintos;
- secretos sembrados en entradas de prueba nunca aparecen en logs;
- relojes y correlación permiten ordenar una operación distribuida;
- un administrador no puede borrar silenciosamente su propia actividad.
Combina estas pruebas con la autorización por recurso. El registro permite investigar, pero no corrige un permiso mal aplicado.
Una auditoría útil responde quién, qué, sobre qué, cuándo, con qué resultado y por qué. Todo campo adicional necesita una razón de investigación o cumplimiento y un plazo de conservación explícito.