SafeGrd: Respaldos de PostgreSQL con restauración y verificación periódicas
SafeGrd es un nuevo servicio de respaldo compatible con PostgreSQL 13 y versiones posteriores que restaura periódicamente cada respaldo y comprueba la cantidad de registros recuperados.
El servicio crea un respaldo y, posteriormente, lo restaura en memoria o en una base de datos temporal para verificar cuántos registros se han recuperado. De esta manera, es posible identificar problemas en los respaldos antes de que sea necesario utilizarlos.
Creación de respaldos
El servicio safegrd se ejecuta en un servidor cercano al de la base de datos y establece la conexión mediante un rol con permisos de solo lectura. En PostgreSQL 14 y versiones posteriores, únicamente es necesario asignar a dicho rol el permiso pg_read_all_data. Para PostgreSQL 13, los permisos deben concederse individualmente sobre cada esquema. La estructura de la base de datos se extrae mediante pg_dump, mientras que los registros se transfieren utilizando COPY en formato binario, todo dentro de una misma transacción. Una vez realizado el primer respaldo, los siguientes solo cargan los datos modificados.
Antes de transferirse fuera del servidor, el respaldo se cifra localmente mediante age. Después, se almacena en un bucket de S3 con Object Lock activado. Es posible utilizar un bucket propio o el servicio de almacenamiento proporcionado por SafeGrd. En ningún momento los datos de los respaldos pasan por los servidores de SafeGrd.
El usuario puede determinar cómo se administrará la clave age. Cuando se utiliza una clave gestionada por el cliente, únicamente este tiene la capacidad de descifrar los respaldos. En cambio, si se emplea una clave gestionada por SafeGrd, el servicio conserva la clave de forma segura y restringe su entrega exclusivamente a los hosts previamente registrados, permitiendo así la restauración de los respaldos incluso en caso de pérdida de un host.
Supabase, Neon y Amazon RDS operan mediante cadenas de conexión. Los respaldos de Supabase se restauran utilizando la imagen de Postgres proporcionada por la propia plataforma, lo que permite cargar correctamente las extensiones contenidas en el volcado de datos.
Verificación del respaldo
Denominamos Fire Drill al proceso de prueba de restauración. Este procedimiento utiliza el respaldo más reciente, lo descifra y comprueba su contenido mediante uno de los siguientes métodos:
- Verificación en memoria. Se reproduce el contenido del dump sin necesidad de ejecutar un servidor PostgreSQL. Luego, se comparan las cantidades de tablas, registros y columnas, así como las extensiones, con los datos registrados en el respaldo.
- Verificación en un entorno aislado (sandbox). Se restaura el respaldo en una base de datos PostgreSQL temporal y se comprueban allí las cantidades registradas. Además, es posible incorporar consultas SQL de validación personalizadas. Por ejemplo, la consulta
SELECT count(*) FROM users WHERE email IS NULLdebe devolver0.
Cada ejecución genera un registro fechado y firmado que incluye las cantidades verificadas y los resultados de las comprobaciones. Los registros están vinculados entre sí, ya que cada uno hace referencia al anterior. El verificador de atestaciones permite validar toda esta cadena directamente desde el navegador, utilizando la clave pública de firma de SafeGrd, sin instalar ningún software.
Cómo probarlo
curl -fsSL https://safegrd.dev/install.sh | sh safegrd login safegrd enroll
El código fuente de la CLI está disponible en GitHub y se distribuye bajo la licencia Business Source License 1.1.
El plan gratuito contempla la protección de una base de datos, con respaldos diarios almacenados en la infraestructura gestionada por SafeGrd o, alternativamente, respaldos cada hora en un bucket de almacenamiento propio. Asimismo, incluye una prueba semanal de recuperación ejecutada en memoria. Los planes de pago, disponibles a partir de 15 dólares mensuales, ofrecen funcionalidades adicionales, como respaldos cada hora, pruebas de recuperación en entornos sandbox y la posibilidad de gestionar un mayor número de bases de datos.
Documentación: safegrd.dev/docs

