Přeskočit obsah

Zálohování a obnova

Strategie zálohování, cíle RTO/RPO a postupy obnovy

Verze dokumentu: 1.0.0
Poslední aktualizace: 2026-02-10


1. Přehled strategie zálohování

Komponenta Metoda Frekvence Retence
PostgreSQL pg_dump / Azure Backup Denně + před změnami 30 dní
Šifrovací klíče Ruční export do zabezpečeného úložiště Při vytvoření + rotaci Trvale
Konfigurace Kopie souborového systému Před změnami 30 dní
TLS certifikáty Kopie souborového systému Před rotací Do expirace + 90 dní
Redis Nezálohuje se (dočasná cache)

2. Cíle RTO/RPO

Scénář RPO (ztráta dat) RTO (výpadek)
Poškození databáze < 24 hodin < 4 hodiny
Úplný výpadek uzlu < 24 hodin < 2 hodiny (K8s) / < 4 hodiny (on-prem)
Výpadek datového centra < 1 hodina (se synchronizací) < 8 hodin
Ztráta šifrovacího klíče 0 (klíče zálohovány) < 2 hodiny
Ransomware / ztráta dat < 24 hodin < 8 hodin

3. Zálohování databáze

On-Premise (pg_dump)

#!/bin/bash
# mazevault-backup.sh
BACKUP_DIR="/opt/mazevault/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/mazevault_${TIMESTAMP}.sql.gz"

# Create backup
docker exec client-postgres pg_dump \
  -U mazevault \
  -d mazevault \
  --format=custom \
  --compress=9 \
  > "$BACKUP_FILE"

# Verify backup integrity
docker exec client-postgres pg_restore \
  --list "$BACKUP_FILE" > /dev/null 2>&1

if [ $? -eq 0 ]; then
  echo "Backup successful: $BACKUP_FILE"
  # Cleanup old backups (keep 30 days)
  find "$BACKUP_DIR" -name "mazevault_*.sql.gz" -mtime +30 -delete
else
  echo "ERROR: Backup verification failed"
  exit 1
fi

Naplánujte pomocí cron:

# Daily backup at 2:00 AM
0 2 * * * /opt/mazevault/scripts/mazevault-backup.sh >> /var/log/mazevault-backup.log 2>&1

Azure (spravované zálohování)

Azure Database for PostgreSQL Flexible Server poskytuje automatické zálohování:

  • Obnova k bodu v čase: Dostupná pro jakýkoliv okamžik v rámci retenční doby
  • Retence: 7–35 dní (konfigurovatelné)
  • Geograficky redundantní záloha: Dostupná pro obnovu napříč regiony
# Restore to point in time
az postgres flexible-server restore \
  --resource-group rg-mazevault-prod \
  --name psql-mazevault-restored \
  --source-server psql-mazevault-prod \
  --restore-time "2026-02-09T00:00:00Z"

4. Zálohování šifrovacích klíčů

Kritické

Ztráta hlavního šifrovacího klíče má za následek trvalou ztrátu všech šifrovaných dat. Zálohování klíče je nejdůležitější zálohovací operací.

Postup zálohování klíčů

  1. Exportujte hlavní klíč do šifrovaného souboru:

    # The master key is in the .env file or K8s secret
    # Copy to a secure, offline location
    
    # On-premise
    cp /opt/mazevault/.env /secure-backup/mazevault-env-$(date +%Y%m%d)
    
    # Kubernetes
    kubectl get secret mazevault-master-key -n mazevault -o yaml > \
      /secure-backup/mazevault-master-key-$(date +%Y%m%d).yaml
    

  2. Uložte na fyzicky oddělené, zabezpečené místo:

  3. Hardwarový bezpečnostní modul (HSM)
  4. Bankovní bezpečnostní schránka
  5. Zapečetěná obálka v zabezpečeném úložišti
  6. Více kopií na různých fyzických místech

Ověření zálohy klíčů

Čtvrtletně ověřte, že záložní klíče dokáží dešifrovat testovací data:

# Verify key backup is readable and matches active key
# Compare hash of backed-up key with active key
sha256sum /secure-backup/mazevault-env-latest

5. Zálohování konfigurace

# On-premise configuration backup
tar czf /opt/mazevault/backups/config_$(date +%Y%m%d).tar.gz \
  /opt/mazevault/.env \
  /opt/mazevault/docker-compose.yml \
  /opt/mazevault/certs/ \
  /opt/mazevault/config/

# Kubernetes configuration backup
kubectl get configmap,secret -n mazevault -o yaml > \
  /path/to/backup/mazevault-k8s-config-$(date +%Y%m%d).yaml

6. Postupy obnovy

Obnova databáze (On-Premise)

# Stop the application
docker compose stop backend ocsp-responder

# Restore database
docker exec -i client-postgres pg_restore \
  -U mazevault \
  -d mazevault \
  --clean \
  --if-exists \
  < /opt/mazevault/backups/mazevault_20260210_020000.sql.gz

# Start the application
docker compose start backend ocsp-responder

# Verify health
curl -sk https://localhost/api/v1/health | jq .

Úplná obnova systému (On-Premise)

  1. Připravte nový hostitel — Nainstalujte Docker, Docker Compose dle On-Premise nasazení
  2. Obnovte konfiguraci — Rozbalte zálohu konfigurace do /opt/mazevault/
  3. Obnovte certifikáty — Ujistěte se, že TLS certifikáty jsou v /opt/mazevault/certs/
  4. Načtěte obrazy kontejnerů — Z offline balíčku nebo registru
  5. Spusťte infrastrukturudocker compose up -d client-postgres client-redis
  6. Obnovte databázi — Pomocí pg_restore dle postupu výše
  7. Spusťte aplikacidocker compose up -d
  8. Ověřte — Spusťte kontroly stavu, ověřte přístup k tajemstvím, zkontrolujte auditní logy

Test obnovy po havárii

Provádějte testy DR čtvrtletně:

  1. Připravte testovací prostředí
  2. Obnovte ze zálohy (databáze + konfigurace + klíče)
  3. Ověřte, že všechna tajemství jsou přístupná a dešifrovatelná
  4. Ověřte, že operace s certifikáty fungují správně
  5. Zdokumentujte výsledky testu a případné problémy

Související