ENCRYPTED PostgreSQL BACKUP & RESTORE

pg_dump ile aldığımız backupların openssl ile nasıl kriptolu bir şekilde alabiliriz ve bu backuptan decrypt ederek nasıl geri dönüş yapabiliriz? Aşağıdaki script ile encrypt backup alabiliriz.

Öncesinde Openssl ile key public ve private key oluşturmamız gerekmektedir;

openssl req -x509 -nodes -days 36500-newkey rsa:4096 -keyout backup_key.pem -out backup_key.pem.pub

Oluşturulan keyler aşağıdaki gibir;

$ ll
total 20
-rw-------. 1 s_cust13 s_cust13 3268 Feb 25 11:29 backup_key.pem
-rw-rw-r--. 1 s_cust13 s_cust13 2004 Feb 25 11:29 backup_key.pem.pub

Backup scripti;

#!/bin/bash
## #######################

## Db name parameter
database_name="$1"
backup_public_key="/u01/pg_data13/cert/backup_key.pem.pub"

## Backup location.
backup_dir="/home/s_cust13/backup/"
## Numbers of days you want to keep copies of your databases

number_of_days=7
if [ -z "${database_name}" ]
then
 echo "Enter a database name as the first argument"
 exit 1
fi

## Backup files names settings
backup_date=`date +%Y-%m-%d-%H-%M-%S`
backup_name="${database_name}.${backup_date}.tar"
echo "Dumping ${database_name} to ${backup_dir}${backup_name}"

pg_dumpall -v -g -f ${backup_dir}dump_roles_$backup_date.sql 
pg_dump -Z -v ${database_name} -Ft  -f ${backup_dir}${backup_name}
 openssl smime -encrypt \
 -aes256 -binary -outform DEM \
 -in ${backup_dir}${backup_name} \
 -out ${backup_dir}${backup_name}.enc \
 "${backup_public_key}"

rm -f ${backup_dir}${backup_name}

find ${backup_dir} -type f -prune -mtime \
    +${number_of_days} -exec rm -f {} \;

Oluşan encrypted dosyayı decrypt yapmak için;

$ openssl smime -decrypt -in ${backup_dir}${backup_name} -binary -inform DEM -inkey /u01/pg_data13/cert/backup_key.pem ${backup_dir}${backup_name}.tar

--Benim örneğim için

$ openssl smime -decrypt -in test1.2022-02-25-12-19-54.tar.enc -binary -inform DEM -inkey /u01/pg_data13/cert/backup_key.pem  > test1.2022-02-25-12-19-54.tar

ilgili DB ler oluşturulduktan sonra bu backplara dönmek için ;

pg_restore  -d test1  test1.2022-02-25-12-19-54.tar -v