StackPractices
beginner Por Mathias Paulenko

Plantilla de Política de Retención de Datos

Una plantilla para definir cuánto tiempo se conservan los datos, cuándo se archivan y cuándo deben eliminarse por cumplimiento y costos.

Descripción General

Toda decisión de retención negocia valor de negocio contra obligación legal y costo de almacenamiento — y equivocarse en cualquiera de los dos sentidos sale caro. Esta plantilla sirve para clasificar los datos, ponerles un período, cubrir las retenciones legales y dejar asentados los controles. Ponerla por escrito mata la ambigüedad: los equipos saben qué borrar, los auditores tienen evidencia y las reglas se aplican siempre igual.

Cuándo Usar

  • Definir las reglas de retención de una plataforma o app nueva antes de que los datos se acumulen.
  • Prepararse para auditorías de GDPR, CCPA, HIPAA o SOC 2 — combiná esta política con la plantilla de clasificación de datos para que cada categoría tenga un responsable.
  • Bajar el gasto de almacenamiento moviendo datos viejos a tiers más baratos.
  • Responder a una solicitud de acceso o eliminación por parte de un titular de datos (la receta de privacidad de datos GDPR cubre el lado operativo de las solicitudes).
  • Definir estrategias de backup y archivo.
  • En la revisión post-brecha, cuando alguien pregunta por qué ese dato seguía existiendo.

Prerequisitos

  • Inventario de tipos de datos, sistemas y ubicaciones de almacenamiento.
  • Guía legal y de cumplimiento para períodos de retención mínima y máxima.
  • Esquema de clasificación de datos como público, interno, confidencial, restringido.
  • Herramientas de almacenamiento y backup que soporten políticas de ciclo de vida.
  • Proceso para identificar y gestionar retenciones legales.
  • Dueños para cada categoría de datos o sistema.

Solución

Plantilla

1. Alcance y Roles de la Política

CampoDescripciónEjemplo
Nombre de la políticaNombre de la políticaPolítica de Retención de Datos de Clientes
Fecha efectivaCuándo entra en vigor2026-07-01
Ciclo de revisiónCada cuánto se revisaAnualmente
Dueño de la políticaEquipo responsableData governance
Aprobador legalRevisor de cumplimiento o legalAsesoría legal
Dueño técnicoEquipo que implementa controlesIngeniería de plataforma
AlcanceSistemas y datos cubiertosTodas las bases de datos productivas, logs, almacenamiento de objetos y backups

2. Categorías de Datos y Períodos de Retención

Categoría de DatosEjemplosPeríodo de RetenciónArchivar Después deEliminar Después deBase Legal
Datos de cuenta de clientePerfiles, preferenciasVida de la cuenta + 1 año1 año después del cierre2 años después del cierreContrato, obligación legal
Registros de transaccionesÓrdenes, pagos7 años1 año7 años después del cierre del períodoLey fiscal y contable
Logs de aplicaciónLogs de request, logs de error90 días30 días90 díasNecesidad operativa
Logs de seguridadAutenticación, logs de acceso2 años1 año2 años después de la creaciónSeguridad y cumplimiento
Datos de backupBackups completos e incrementales30 días30 díasSegún programación de backupRecuperación ante desastres
Datos de analíticaEventos agregados1 año6 meses1 año después de la agregaciónInterés legítimo
Datos de marketingInteracciones de email, leads2 años o hasta opt-out1 añoEn opt-out o 2 añosConsentimiento
Datos temporalesCaché, archivos de importación7 días3 días7 díasNecesidad operativa

3. Reglas de Retención por Clasificación de Datos

ClasificaciónRetención MínimaRetención MáximaManejo Especial
PúblicoSegún necesidad del negocio1 año o menosSin manejo especial
InternoNecesidad del negocio3 añosCiclo de vida estándar
ConfidencialMínimo legal o contractual7 años o menosCifrado, logs de acceso
RestringidoMínimo regulatorioMáximo regulatorioProceso de retención legal, cifrado, trazabilidad de auditoría

4. Acciones del Ciclo de Vida de Datos

EtapaDisparadorAcciónHerramienta / Equipo Responsable
ActivoDatos creadosAlmacenar en tier primario con controles de accesoEquipo de aplicación
Frío30 días de antigüedadMover a almacenamiento de menor costoPolítica de ciclo de vida de almacenamiento
Archivo1 año de antigüedadMover a archivo con política de recuperaciónPolítica de ciclo de vida de almacenamiento
Marcar para eliminaciónFinaliza período de retenciónMarcar registros y notificar dueñosPlataforma de data governance
Eliminación seguraAprobado por legal / políticaEliminar o anonimizar permanentementeIngeniería de plataforma
Log de auditoríaCada acción del ciclo de vidaRegistrar eventos de retención y eliminaciónSistema de logs de auditoría
EscenarioProcesoDueñoDocumentación
Retención por litigioSuspender eliminación de datos afectadosAsesoría legalAviso de retención y alcance
Investigación regulatoriaExtender retención según requeridoOficial de cumplimientoRegistro de solicitud regulatoria
Solicitud de titular de datosRevisar y eliminar o anonimizarEquipo de privacidad de datosLog de solicitud y respuesta
Solicitud de excepciónEnviar razón, revisión de riesgo, aprobaciónData governanceRegistro de excepciones
Anulación de políticaAprobación ejecutiva con revisión legalC-level / legalRegistro de excepción firmado

6. Checklist de Eliminación y Verificación

  • El dueño de datos confirma que el período de retención ha expirado.
  • No hay retención legal activa que cubra los datos.
  • Los datos ya no están ni en el almacenamiento primario ni en los índices.
  • Los backups que contienen los datos se purgan o se programan para purga según la política.
  • Los archivos se eliminan o anonimizan según la programación.
  • Los datasets derivados, cachés y réplicas se refrescan o limpian.
  • La eliminación se registra con timestamp, dueño y alcance.
  • Se verifica una muestra para confirmar la eliminación.
  • El equipo de cumplimiento revisa los logs de eliminación periódicamente.

Explicación

Retener datos siempre implica elegir entre valor de negocio, obligación legal y costo de almacenamiento. Una política escrita elimina la ambigüedad, asegura la ejecución consistente y proporciona evidencia durante auditorías. Al clasificar los datos, definir períodos de retención y automatizar las acciones del ciclo de vida, los equipos pueden reducir el trabajo manual y evitar conservar datos más tiempo del necesario.

El ciclo de vida de la sección 4 sigue un pipeline fijo y secuencial:

Pipeline del ciclo de vida de datos: los datos empiezan activos, pasan a almacenamiento más barato, se archivan, se marcan para eliminación al vencer la retención y se borran de forma segura con registro de auditoría

Dos puntos de ese pipeline causan la mayoría de los fallos reales. El primero es la propagación: eliminar del almacenamiento primario no toca backups, réplicas, cachés ni datasets derivados — por eso existe el checklist de la sección 6. El segundo es la compuerta de retención legal entre “marcar” y “eliminar”: sin una verificación explícita de retenciones, la automatización del ciclo de vida purga datos bajo litigio sin enterarse.

Al completar los períodos de retención, no copies los valores de ejemplo sin más — las regulaciones difieren según el tipo de dato y la jurisdicción. El GDPR no fija períodos: su principio de limitación de conservación (Art. 5(1)(e)) solo exige conservar datos personales el tiempo justo y poder justificarlo. HIPAA exige conservar la documentación de cumplimiento durante seis años. Para registros fiscales y financieros, SOX, IRS y SEC/FINRA suelen pedir siete años. Los logs de seguridad y auditoría en entornos regulados suelen necesitar de uno a siete años. Ancla cada fila de la tabla de retención a una base legal con nombre o a una necesidad de negocio documentada, y registra quién la aprobó.

El mismo equilibrio aplica a los tiers de almacenamiento. El almacenamiento caliente (volúmenes de bloques, clase STANDARD, índices de logs calientes) es el más caro por GB-mes y debería contener solo los datos que consultás seguido. Una regla que se sostiene en la práctica: la mayoría de los datos operativos se leen en sus primeros 30 días, rara vez hasta el día 90 y casi nunca después — por eso el ciclo de vida de ejemplo transiciona a los 30, 90 y 365 días. Si tu patrón de acceso difiere, medilo antes de fijar los umbrales: consultá los logs de acceso o las métricas de almacenamiento durante un mes en lugar de adivinar. También presupuestá la recuperación — las clases de archivo como Glacier y Deep Archive son baratas para guardar pero cobran por GB recuperado, así que los datos que auditores o soporte consultan con regularidad pertenecen a un tier frío, no a archivo profundo.

Cómo Adoptar Esta Plantilla

Implementar la política funciona mejor en cinco pasadas que en una reescritura única:

  1. Inventario — listá cada almacén de datos (bases de datos, object storage, logs, cachés, warehouses, backups) y las categorías que contiene. No podés fijar retención para datos que no encontraste.
  2. Clasificación — cada almacén queda mapeado a público, interno, confidencial o restringido según el esquema de la sección 3.
  3. Asignación de períodos — completá la tabla de retención fila por fila con una base legal y un responsable por categoría. Donde la ley no diga nada, anotá la razón de negocio.
  4. Automatización — implementá las reglas de ciclo de vida (la config de S3 y el script de purga más abajo son puntos de partida) y agregá la compuerta de retención legal antes de cualquier paso de eliminación.
  5. Verificación y revisión — programá el checklist de eliminación trimestralmente, registrá cada acción y reejecutá la política tras cambios regulatorios o nuevos almacenes.

Configuración de Política de Ciclo de Vida S3

{
  "Rules": [
    {
      "ID": "transition-to-glacier",
      "Status": "Enabled",
      "Filter": { "Prefix": "logs/" },
      "Transitions": [
        { "Days": 30, "StorageClass": "STANDARD_IA" },
        { "Days": 90, "StorageClass": "GLACIER" },
        { "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
      ],
      "Expiration": { "Days": 2555 }
    },
    {
      "ID": "expire-temp-data",
      "Status": "Enabled",
      "Filter": { "Prefix": "temp/" },
      "Expiration": { "Days": 7 }
    },
    {
      "ID": "retain-user-data",
      "Status": "Enabled",
      "Filter": { "Prefix": "users/" },
      "NoncurrentVersionExpiration": { "NoncurrentDays": 90 },
      "Expiration": { "Days": 3650 }
    }
  ]
}

Script de Purga de Retención de Base de Datos

-- Trabajo programado de purga en PostgreSQL
-- Ejecutar semanalmente vía pg_cron o scheduler externo

-- Purgar sesiones expiradas (retención: 30 días)
DELETE FROM sessions
WHERE created_at < NOW() - INTERVAL '30 days';

-- Purgar logs de auditoría (retención: 7 años para cumplimiento)
-- NO PURGAR: archivados por separado

-- Purgar datos de usuarios eliminados (retención: 90 días después de eliminación)
DELETE FROM user_data
WHERE deleted_at IS NOT NULL
  AND deleted_at < NOW() - INTERVAL '90 days';

-- Purgar logs de eventos (retención: 180 días)
DELETE FROM event_logs
WHERE created_at < NOW() - INTERVAL '180 days';

-- Vacuum y analyze después de purga
VACUUM ANALYZE sessions;
VACUUM ANALYZE user_data;
VACUUM ANALYZE event_logs;

Matriz de Clasificación y Retención de Datos

=== Matriz de Clasificación y Retención de Datos ===

| Tipo de Dato        | Clasificación  | Retención  | Almacenamiento  | Método de Purga    |
|---------------------|----------------|------------|-----------------|---------------------|
| PII de Usuario      | Confidencial   | 3 años     | RDS Cifrado     | Purga programada    |
| Registros de pago   | Restringido    | 7 años     | RDS Cifrado     | Revisión legal      |
| Logs de auditoría   | Interno        | 7 años     | S3 Glacier      | Política lifecycle  |
| Logs de aplicación  | Interno        | 90 días    | CloudWatch      | Auto-expire         |
| Datos de sesión     | Interno        | 30 días    | Redis           | TTL auto-expire     |
| Archivos temporales | Público        | 7 días     | S3 temp/        | Política lifecycle  |
| Eventos analytics   | Interno        | 2 años     | BigQuery        | Partition expire    |
| Backups             | Confidencial   | 90 días    | S3 + Glacier    | Política backup     |
| Exportes cliente    | Confidencial   | 30 días    | S3 signed URL   | Política lifecycle  |
| Datos ML training   | Interno        | 1 año      | S3 IA           | Purga programada    |

Variantes

  • Política de ciclo de vida de almacenamiento de objetos en la nube: reglas de transición y expiración en S3, Azure Blob o GCP Storage — el sitio más barato donde aplicar retención.
  • Política de retención de base de datos: borrar particiones viejas en lugar de filas, o correr jobs de purga donde no haya particionado.
  • Política de retención de logs: los logs de app, infra y seguridad envejecen distinto — retención caliente para debugging, archivo para cumplimiento.
  • Política de retención de datos de clientes: datos personales bajo GDPR y CCPA, donde el consentimiento y las solicitudes de borrado marcan los períodos.
  • Política de retención de datos de salud: retención alineada con HIPAA más controles de acceso sobre información de salud protegida.
  • Política de retención de datos financieros: registros fiscales y de auditoría que exigen almacenamiento a prueba de manipulación.

Lo que funciona

  • Clasificá los datos antes de definir períodos de retención.
  • Automatizá las transiciones del ciclo de vida usando capacidades nativas de almacenamiento o base de datos.
  • Aplicá la retención más corta que satisfaga necesidades legales y de negocio.
  • Mantené un inventario centralizado de almacenes de datos y reglas de retención.
  • Registrá cada eliminación y acción de retención para fines de auditoría.
  • Formá a los equipos en retenciones legales y excepciones.
  • Revisá la política al menos anualmente y después de cambios regulatorios.
  • Usá cifrado y controles de acceso para datos en retención.
  • Probá los procedimientos de eliminación periódicamente para asegurar que los datos se eliminen realmente.

Errores Comunes

  • Mantener todos los datos para siempre “por si acaso”.
  • Eliminar datos sin confirmar el estado de retención legal.
  • Olvidar backups, archivos o réplicas al eliminar datos primarios.
  • Usar el mismo período de retención para todos los tipos de datos.
  • Dejar excepciones y aprobaciones sin documentar.
  • No registrar eventos de eliminación.
  • Olvidar las copias que quedan en SaaS de terceros o en cachés.
  • No revisar políticas de retención después de nuevas regulaciones.

Troubleshooting

  • Los jobs de purga no corren en silencio: el scheduler (pg_cron, EventBridge, cron) se disparó pero el job falló por permisos o locks. No alertes solo sobre éxito del job: alertá también sobre fallos y sobre la antigüedad del registro más viejo.
  • La eliminación no llega a backups ni réplicas: los datos primarios desaparecen pero el mismo PII sobrevive en un backup de 30 días o en una réplica de lectura. Tratá los backups como su propia clase de retención con un lag de propagación definido.
  • Las reglas de ciclo de vida eliminan datos bajo retención legal: la automatización de object-lock o lifecycle ignora el flag de retención. Agregá una verificación explícita de retención al path de eliminación y probala con un fixture.
  • Se olvidan los datos en SaaS de terceros: herramientas de analítica, mesas de soporte y proveedores de email guardan copias fuera de tus almacenes. Agregá los controles de retención/eliminación de cada proveedor al inventario.
  • La tabla no baja de tamaño tras la purga: DELETE libera filas pero no espacio en disco. Seguí las purgas con VACUUM/OPTIMIZE o usá particiones — borrar una partición es más rápido y barato que borrar fila por fila.

Preguntas frecuentes

¿Cuál es la diferencia entre archivar y eliminar datos?

Archivar mueve los datos a un almacenamiento a largo plazo de menor costo para cumplimiento o referencia. Eliminar remueve permanentemente los datos de forma que no puedan recuperarse.

¿Cómo manejamos los backups bajo una política de retención?

Cada backup necesita su propio calendario de retención. Cuando se eliminan datos primarios, la eliminación debe propagarse eventualmente a los backups según la política de retención de backups, o los backups deben purgarse explícitamente si lo requiere la ley.

¿Qué pasa si una retención legal entra en conflicto con la política de retención?

El bloqueo legal siempre gana. Los datos afectados deben preservarse más allá de su período de retención normal hasta que se levante la retención, y esta excepción debe documentarse.

¿Cómo manejamos solicitudes de derecho al olvido del GDPR?

Cuando un usuario solicita la eliminación de datos, identificá todos los almacenes de datos que contienen su PII. Creá un ticket de eliminación que rastree cada almacén. Eliminá o anonimizá datos en la base de datos primaria, object storage, cachés, índices de búsqueda, data warehouses y backups. Para backups, documentá que los datos serán purgados cuando expire el período de retención del backup (o iniciá una purga acelerada si es requerido). Registrá la eliminación con timestamp, alcance y aprobador. Proporcioná confirmación al usuario dentro de 30 días. Probá el proceso de eliminación trimestralmente.

¿Qué es la anonimización de datos y cuándo deberíamos usarla?

La anonimización de datos elimina u oculta información personal identificable preservando la estructura de datos para analítica. Las técnicas incluyen: masking (reemplazar PII con datos falsos), hashing (transformación unidireccional), aggregation (agrupar datos para eliminar registros individuales) y pseudonymization (reemplazar identificadores directos con seudónimos). Usá anonimización cuando necesitás datos históricos para analítica pero ya no necesitás el PII. Documentá el método de anonimización y verificá que no pueda revertirse.

¿Cómo gestionamos los bloqueos legales (legal holds)?

Cuando se emite un bloqueo legal, suspendé inmediatamente toda eliminación y purga de los datos afectados. Etiquetá los datos con un flag de legal-hold en el sistema. Documentá el bloqueo: alcance, autoridad emisora, fecha y duración esperada. Notificá a todos los equipos con acceso a los datos. Monitoreá el estado del bloqueo regularmente. Cuando se libera el bloqueo, documentá la liberación y reanudá los calendarios de retención normales. Nunca auto-elimines datos con un bloqueo legal activo. Auditá el cumplimiento de bloqueos legales anualmente.

¿Cómo verificamos que los datos han sido eliminados?

Después de que un trabajo de purga se ejecuta, verificá la eliminación: consultando registros más antiguos que el período de retención (debe devolver cero filas), verificando conteos de archivos en prefijos S3 (debe coincidir con lo esperado) y ejecutando una verificación de muestra en registros específicos. Anotá cada resultado de verificación. Para cumplimiento, una segunda persona debe verificar la eliminación. Almacená certificados o logs de eliminación en un bucket de almacenamiento inmutable. Revisá los resultados de verificación de eliminación mensualmente.

¿Cómo manejamos la retención de datos entre múltiples regiones?

Diferentes regiones tienen diferentes requisitos legales (GDPR en EU, CCPA en California, PDPA en Singapur). Creá una matriz de retención que mapee tipos de datos a requisitos regionales. Aplicá el período de retención más estricto cuando los datos cruzan regiones. Almacená datos en la región donde fueron recolectados cuando sea posible. Documentá los flujos de datos cross-region y las reglas de retención que aplican. Revisá los requisitos regionales anualmente a medida que las leyes cambian.

¿Cómo manejamos la retención de datos para modelos de machine learning?

El ML trae retenciones propias: artefactos de modelo, features y datasets de entrenamiento no envejecen igual. Retené los artefactos del modelo durante el tiempo de vida del modelo en producción más 1 año para auditoría. Los datos de entrenamiento deben seguir la política de clasificación de datos de la fuente. Los feature stores deben expirar features que ya no se usan. Registrá las predicciones del modelo por 90 días para debugging y auditoría de sesgo. Documentá qué datasets se usaron para entrenar cada versión del modelo para reproducibilidad y cumplimiento.

¿Qué es el almacenamiento inmutable y cuándo lo necesitamos?

El almacenamiento inmutable (S3 Object Lock, Azure Immutable Blob) previene que los objetos sean eliminados o sobrescritos durante un período de retención especificado. Usalo para: requisitos de cumplimiento (SEC, FINRA, HIPAA), datos con bloqueo legal, logs de auditoría que deben ser a prueba de manipulación, y registros financieros. Configurá el modo WORM (Write Once Read Many) a nivel de bucket. Documentá el período de inmutabilidad y asegurate de que se alinee con los requisitos regulatorios. Probá que los intentos de eliminación sean bloqueados.

Revisá la política de retención de datos anualmente y después de cualquier cambio regulatorio. Actualizá la matriz de retención, los calendarios de purga y los procedimientos de retención legal. Capacitá a todos los miembros del equipo en la política actualizada.