Пароль от зашифрованного бэкапа можно хранить прямо рядом с этим бэкапом.
Звучит как шутка, но я пришёл ровно к такой схеме.
Допустим, резервные копии лежат в S3 и зашифрованы с помощью restic. Для восстановления нужен пароль от репозитория.
Можно положить этот пароль в тот же S3-бакет отдельным файлом. Но перед этим зашифровать его ещё раз, уже с помощью age.
При восстановлении вы забираете из S3 оба файла, с помощью age расшифровываете пароль от restic и уже этим паролем открываете основной бэкап.
Схема хороша тем, что приватный ключ age можно хранить на аппаратном токене вроде YubiKey. При использовании "age-plugin-yubikey" ключ не покидает устройство, а для расшифровки потребуется физически подключить YubiKey к компьютеру.
Получается как с иглой у Кощея, но на минималках.
+ Сервер умеет автоматически создавать бэкапы;
+ S3 хранит всё необходимое для восстановления;
+ прочитать данные без физического ключа нельзя.
Остаётся последний вопрос: что будет, если YubiKey потеряется или сломается?
Нужен второй независимый способ восстановления: запасной YubiKey или отдельный age-ключ, надёжно сохранённый офлайн. При этом файл с паролем restic нужно заранее зашифровать сразу для всех этих ключей.
Резервный ключ можно даже распечатать на бумажке и сложить к вашему диплому в шкаф.
Хоть тут он пригодится.
