Zálohy databáze CzechIdM

Konfigurace zálohování

Zálohovací joby jsou v IAM appliance předpřipravené, je potřeba je pouze aktivovat. Aktivace se provádí pomocí systemd unit.

  • iam-czechidm-db-backup.service - Služba provádějící zálohu, součástí služby je i retence záloh.

  • iam-czechidm-db-backup.timer - Konfigurace naplánované úlohy; v jakých intervalech se má spouštět iam-czechidm-db-backup.service.

Stav zálohování

Zálohy se provádějí do adresáře /data/volumes/czechidm-db/backup/ ve formě gzipovaného souboru s SQL skriptem. Soubor může být (volitelně) zašifrován. Stav pravidelné úlohy je možné zjistit pomocí příkazů:

[root@localhost ~]# systemctl status iam-czechidm-db-backup.service
[root@localhost ~]# systemctl status iam-czechidm-db-backup.timer
[root@localhost ~]# systemctl list-timers --all

Aktivace pravidelných záloh

Pro aktivaci pravidelných záloh spusťte timer a aktivujte jeho automatické spouštění po startu operačního systému. Deaktivaci proveďte stejným způsobem, ale použijte stop, respektive disable.

[root@localhost ~]# systemctl start iam-czechidm-db-backup.timer
[root@localhost ~]# systemctl enable iam-czechidm-db-backup.timer

Zálohu je možné provést i ad-hoc ručním spuštěním služby iam-czechidm-db-backup.service. Služba provede retenci záloh, pak vytvoří novou zálohu a opět se vypne.

Obnova ze zálohy

Obnovu databázového dumpu je možné provést pouze pokud je CzechIdM (služba iam-czechidm) vypnutá. Celá obnova může trvat i několi desítek minut v závislosti na velikosti databáze.

  1. Zastavte službu CzechIdM.

    [root@localhost ~]# systemctl stop iam-czechidm
  2. Přepněte se do kontejneru s databází a přistupte do databáze. Odstraňte celou databázi "czechidm". Odpojte se příkazem \q

    [root@localhost ~]# docker exec -it czechidm-db bash
    
    root@czechidm-db:/# psql -U postgres
    psql (12.5 (Debian 12.5-1.pgdg100+1))
    Type "help" for help.
    
    postgres=# drop database czechidm ;
    DROP DATABASE
    
    postgres=# \q
  3. Proveďte obnovu ze zálohy.

    root@czechidm-db:/# gunzip -c SOUBORSEZÁLOHOU.sql.gz | psql -U postgres
  4. Spusťte službu CzechIdM

    [root@localhost ~]# systemctl start iam-czechidm

Šifrování záloh

Tato funkce je dostupná od iam-app-czechidm-db verze 0.4-0 a pouze pokud se používá kontejnerový image bcv-postgres:12-r2 nebo novější. Verzi image lze zjistit z konfigurace služby (soubor /data/registry/node-active-config/docker-compose-czechidm-db.yml).

Při instalaci updatu je automaticky vygenerován nový šifrovací klíč pro zálohy. Tento šifrovací klíč je unikátní a lze ho rovnou používat. Pokud přesto chcete klíč změnit, lze to provést následujícím příkazem.

[root@localhost ~]# openssl rand -base64 32 > /data/volumes/czechidm-db/secrets/db-backup-symkey.pwfile

Šifrování záloh je nutné aktivovat na úrovni kontejneru.

  1. Editujte soubor /data/registry/node-active-config/docker-compose-czechidm-db.yml.

    • Nastavte proměnnou DB_ENCRYPT_BACKUP na hodnotu true.

  2. Zastavte službu CzechIdM pomocí systemctl stop iam-czechidm.

  3. Restartujte databázovou službu příkazem systemctl restart iam-czechidm-db.

  4. Spusťte službu CzechIdM pomocí systemctl start iam-czechidm.

  5. Další vytvořená záloha už bude zašifrována.

Šifrovanou zálohu lze rozpoznat podle koncovky souboru. Nešifrované zálohy mají suffix .sql.gz, šifrované zálohy mají suffix .sql.gz.e. Pro obnovu ze šifrované zálohy ji musíte nejdříve dešifrovat, címž získáte běžnou nešifrovanou zálohu. Tuto zálohu obnovte dle postupu pro nešifrované zálohy.

Šifrování je interně realizováno programem openssl s parametry -aes-256-cbc, -salt, -pbkdf2. Jakákoliv verze OpenSSL, která je schopná pracovat s těmito parametry, je schopna zálohu dešifrovat.

Volání šifrování
openssl enc -e -aes-256-cbc -salt -pbkdf2 -pass file:/run/secrets/db-backup-symkey.pwfile -in mydatabase.sql.gz -out mydatabase.sql.gz.e
Volání dešifrování
openssl enc -d -aes-256-cbc -pbkdf2 -pass file:/run/secrets/db-backup-symkey.pwfile -in mydatabase.sql.gz.e -out mydatabase.sql.gz