boveda-gs.pages.dev · en producción desde oct-2026
Respaldos por departamento, cifrados con llave propia, en dos regiones y sin posibilidad de sobrescribir.
Cada área de Grupo Secacao sube o recibe automáticamente sus copias (OneDrive, NetSuite). Todo queda versionado, cifrado y registrado en bitácora. Solo entra personal con cuenta Microsoft 365 y un segundo código propio de la Bóveda.
2Multidepartamento
La Bóveda está dividida en 12 áreas. Cada una tiene su color, su responsable, sus carpetas (hasta 3 niveles) y su propia llave de cifrado: un área no puede leer los archivos de otra aunque comparta la misma infraestructura.
| Rol / permiso | Qué puede hacer |
|---|---|
| Usuario con «subir» | Ve solo sus áreas habilitadas (las demás con candado, sin cifras). Sube archivos y crea carpetas. No lista ni descarga lo que hay: el servidor lo impide. |
| Responsable de área | Permiso más alto dentro de su área; gestiona quién tiene acceso. |
| Administrador | Ve todas las áreas, versiones, almacenamiento y bitácora; restaura, comparte con enlaces controlados, gestiona personas y ordena recuperaciones ante desastres. |
| Integración (máquina) | Credencial fija a un área y carpeta (p. ej. NetSuite → TI). Solo sube. |
Las personas se dan de alta por correo antes de su primer ingreso; el administrador asigna el área y el permiso.
3Niveles de seguridad
4Cifrado
| Qué | Cómo | Quién tiene la llave |
|---|---|---|
| En tránsito | HTTPS/TLS en todo momento. | Cloudflare |
| En reposo (base) | R2 y D1 cifran todo por defecto (AES-256). | Cloudflare |
| Archivos por área (SSE-C) | Llave AES-256 distinta por área, derivada con HKDF-SHA256 de una llave maestra. Se entrega en cada operación y R2 no la guarda. Se aplica en las dos regiones. | Grupo Secacao (llave maestra con resguardo fuera de línea) |
| PIN personal (opcional) | Cifrado en el navegador con AES-256-GCM; llave derivada con PBKDF2-SHA256 (310 000 iteraciones) del PIN de 6–12 dígitos. El PIN nunca llega al servidor. Encima se aplica igual la llave del área. | Solo la persona |
| Códigos de bóveda (TOTP) | Guardados cifrados con AES-256-GCM. | Grupo Secacao |
| Sesiones, enlaces, credenciales de máquina | Solo se guarda su SHA-256; el valor real no existe en la base. | — |
| Tercera copia en S3 | Cifrado en destino SSE-S3 (AES256) o SSE-KMS. | AWS / Grupo Secacao (KMS) |
No es cifrado de extremo a extremo: la Bóveda descifra para entregar a quien tiene permiso (por eso permite vista previa y recuperación). La excepción es el PIN personal. Perder la llave maestra = perder los respaldos cifrados; olvidar el PIN = perder esos archivos.
5Integraciones
| Integración | Estado | Cómo funciona |
|---|---|---|
| Microsoft 365 / Entra ID | Activa | Inicio de sesión del inquilino corporativo con app registrada propia. |
| OneDrive | Activa | Cada persona conecta su OneDrive (permiso delegado de solo lectura) y elige carpeta. Cada noche se copian los cambios; el token se guarda cifrado. |
| NetSuite | Lista · esperando a NetSuite | NetSuite empuja sus respaldos a /api/ingesta/netsuite con credencial de máquina: directo hasta 20 MB o por partes de 6 MiB hasta 10 GB; acepta base64 (SuiteScript). Controles: IP permitidas, cuota diaria, vencimiento a 90 días, alerta de respaldo sospechoso. |
| Amazon S3 | Programada · apagada | Cola de réplicas automática; se activa con las credenciales AWS (sección 7). |
| Recuperación ante desastres | Activa | Orden confirmada con código nuevo → manifiesto CSV (última versión de cada archivo a una fecha). Simulacros programados y registrados. |
6Límites
| Concepto | Límite |
|---|---|
| Archivo subido por persona | 50 GB (partes de 20 MB, reanudables) |
| Archivo con PIN personal | 2 GB (se descifra en memoria del navegador) |
| NetSuite · subida directa / por partes | 20 MB / 10 GB (partes exactas de 6 MiB) |
| NetSuite · cuota diaria | 200 archivos y 5 GB por día (ampliable a pedido) |
| NetSuite · vigencia de la credencial | 90 días, luego se rota |
| OneDrive · por corrida | 5 archivos / 400 MB; archivos de más de 250 MB se omiten (se suben a mano) |
| Réplica a S3 | Hasta 5 GB por archivo; 10 versiones por corrida (≈ 390 por noche); 6 reintentos cada 30 min |
| Carpetas | 3 niveles, nombres de hasta 40 caracteres |
| Sesión / inactividad | 8 h máximo / 10 min sin uso |
| Código de bóveda | 5 intentos fallidos cierran la sesión |
| Enlaces compartidos | Vencen a 1, 7 o 30 días; máximo de usos configurable |
| Inmutabilidad | 30 días por versión, en ambas regiones |
7Réplica a Amazon S3 · pasos para integrarla
Automatizada, apagada El código está en producción: cada versión que llega de una integración marcada para S3 (hoy NetSuite) entra a una cola, y el Worker nocturno la envía a S3 descifrándola de R2 y cifrándola de nuevo en destino. Mientras no haya credenciales, la cola espera sin perder nada: al activarla se envían también las versiones ya acumuladas.
- Cuenta AWS y bucket. Crear un bucket privado (p. ej. región
us-east-1) con Bloquear acceso público, Versionado y Object Lock (modo Governance o Compliance, retención sugerida 30–90 días). Cifrado predeterminado SSE-S3 o SSE-KMS. - Ciclo de vida (costo). Regla que pase los objetos a S3 Glacier Flexible Retrieval o Deep Archive a los 30 días y los venza según la política de retención del SGSI.
- Usuario IAM de solo escritura. Crear un usuario técnico con únicamente
s3:PutObjectsobre el prefijo de la Bóveda (no lista, no lee, no borra):{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<bucket>/boveda-gs/*" }] }Si se usa SSE-KMS, agregarkms:GenerateDataKeysobre esa llave. - Llaves de acceso. Generar la Access Key del usuario IAM y entregarla a TI por canal seguro (nunca por correo ni chat).
- Cargar la configuración en Cloudflare (proyecto Pages
boveda-gs→ Settings → Variables):S3_ENDPOINT = https://s3.us-east-1.amazonaws.com S3_REGION = us-east-1 S3_BUCKET = <bucket> S3_PREFIJO = boveda-gs (opcional) S3_SSE = AES256 | aws:kms (opcional) npx wrangler pages secret put S3_ACCESS_KEY --project-name boveda-gs npx wrangler pages secret put S3_SECRET_KEY --project-name boveda-gs
- Volver a desplegar la Bóveda para que tome las variables. No hay cambios de código.
- Verificar. En la siguiente ventana nocturna (cada 20 min, 18:00–06:59 GT) aparecen los objetos en
boveda-gs/<área>/<carpeta>/<archivo>/v0001-…. En la Bóveda, la cola de réplicas pasa a «lista»; los errores quedan con su motivo y se reintentan hasta 6 veces. - Ampliar (opcional). Para replicar también otras áreas a S3 se marca la integración o el área con destino
s3. Las subidas manuales aún no se encolan (ajuste menor pendiente).
Pendiente técnico: archivos de más de 5 GB a S3 requieren carga por partes (hoy quedan en error con su motivo). Costo estimado: almacenamiento S3/Glacier según volumen; la transferencia de salida de R2 no tiene costo.
8Uso para la plataforma de Legal
La Bóveda ya tiene un área Legal con llave propia. Para la plataforma de obligaciones y vencimientos puede servir como custodia inmutable de evidencias y versiones firmadas de contratos: el documento vivo sigue en SharePoint (donde se trabaja), y la versión aprobada o la evidencia validada se respalda en la Bóveda con fecha, hash y bitácora, sin posibilidad de alteración durante el periodo de bloqueo.
- Integración posible igual que NetSuite: credencial de máquina «solo subir» fija a
Legal/Evidencias/<contrato>. - Trazabilidad para auditoría: quién subió, cuándo, versión y SHA-256.
- Recuperación por fecha: manifiesto de lo que existía en un momento dado.
9Pendientes
- Activar la tercera copia en S3 (decisión y cuenta AWS).
- NetSuite: IP de salida, tamaño y horario de los respaldos; aviso por correo si no llega nada en 24 h.
- Herramienta de restauración masiva a partir del manifiesto CSV.
- Avisos por correo al compartir y para las alertas de la bitácora.
- Carga por partes a S3 para archivos de más de 5 GB.