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.

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

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

Stav zálohování

Zálohy se provádějí do adresáře /data/volumes/czechidm/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 czechidm-db-backup.service
[root@localhost ~]# systemctl status 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 czechidm-db-backup.timer
[root@localhost ~]# systemctl enable czechidm-db-backup.timer

Zálohu je možné provést i ad-hoc ručním spuštěním služby 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 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 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 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 czechidm.

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

  4. Spusťte službu CzechIdM pomocí systemctl start 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