7.5 KiB
7.5 KiB
🔄 Перенос зашифрованных данных между серверами
📋 Обзор
При переносе зашифрованных данных важно передать и данные, и ключ шифрования вместе.
🎯 Способы переноса
1. 🔑 Перенос с ключом шифрования (Рекомендуемый)
Создание миграционного пакета:
chmod +x migrate-encrypted-data.sh
./migrate-encrypted-data.sh
Что включается в пакет:
- ✅ Бэкап базы данных (зашифрованные данные)
- ✅ Ключ шифрования (
full_db_encryption.key) - ✅ Скрипты шифрования/расшифровки
- ✅ Сервис для работы с зашифрованными данными
2. 🌐 Перенос через SSH
# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 2 - SSH
# Автоматически создастся архив и отправится на целевой сервер
3. ☁️ Перенос через облачное хранилище
# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 3 - Облачное хранилище
# Архив загрузится в S3/другое облачное хранилище
# Скачайте на целевой сервер и восстановите
4. 💾 Перенос через локальный носитель
# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 4 - Локальный носитель
# Скопируйте архив на USB/SSD/другой носитель
# Перенесите на целевой сервер
🚀 Пошаговая инструкция
Этап 1: Подготовка исходного сервера
A. Создание миграционного пакета:
# Создаём полный бэкап с ключом
./migrate-encrypted-data.sh
# Выберите опцию 1 - "Создать бэкап с ключом"
# Результат: migration_package_YYYYMMDD_HHMMSS.tar.gz
B. Проверка содержимого:
# Просмотр содержимого архива
tar -tzf migration_package_*.tar.gz
# Должно содержать:
# - encrypted_backup_*.sql (бэкап БД)
# - ssl/keys/full_db_encryption.key (ключ шифрования)
# - encrypt-all-tables.sh (скрипт шифрования)
# - decrypt-all-tables.sh (скрипт расшифровки)
# - backend/services/encryptedDataService.js (сервис)
Этап 2: Перенос на целевой сервер
A. Копирование архива:
# Способ 1: SCP
scp migration_package_*.tar.gz user@target-server:/tmp/
# Способ 2: USB/локальный носитель
# Скопируйте файл на носитель и перенесите физически
# Способ 3: Облачное хранилище
# Скачайте архив из S3/другого хранилища
B. Восстановление на целевом сервере:
# 1. Распаковка архива
tar -xzf migration_package_*.tar.gz -C /path/to/your/app/
# 2. Восстановление ключа шифрования
chmod 600 ssl/keys/full_db_encryption.key
# 3. Восстановление базы данных
docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql
# 4. Проверка целостности
./migrate-encrypted-data.sh
# Выберите опцию 5 - "Проверить целостность"
Этап 3: Проверка работоспособности
A. Проверка подключения к БД:
# Проверяем подключение
docker exec dapp-postgres pg_isready -U dapp_user -d dapp_db
# Проверяем зашифрованные данные
docker exec dapp-postgres psql -U dapp_user -d dapp_db -c "
SELECT
table_name,
COUNT(*) as encrypted_columns
FROM information_schema.columns
WHERE table_schema = 'public'
AND column_name LIKE '%_encrypted'
GROUP BY table_name;"
B. Тестирование приложения:
# Запускаем приложение
docker-compose up -d
# Проверяем API
curl -X GET http://localhost:8000/api/health
curl -X GET http://localhost:8000/api/users
🔐 Безопасность при переносе
1. Защита ключа шифрования:
# Правильные права доступа
chmod 600 ssl/keys/full_db_encryption.key
# Резервная копия ключа
cp ssl/keys/full_db_encryption.key ssl/keys/full_db_encryption.key.backup
# Проверка целостности
sha256sum ssl/keys/full_db_encryption.key
2. Безопасная передача:
- Используйте SSH для передачи
- Шифруйте архив дополнительно
- Используйте защищённые каналы связи
3. Очистка после переноса:
# Удаляем временные файлы
rm -rf migration_backups/
rm -f /tmp/migration_package_*.tar.gz
# Очищаем историю команд
history -c
⚠️ Важные замечания
1. Совместимость версий:
- Убедитесь, что версии PostgreSQL одинаковые
- Проверьте совместимость расширений (pgcrypto)
- Убедитесь в совместимости Docker образов
2. Размер данных:
- Зашифрованные данные занимают больше места
- Учитывайте размер при планировании переноса
- Используйте сжатие для больших баз данных
3. Время простоя:
- Миграция может занять время
- Планируйте время простоя
- Используйте репликацию для минимизации простоя
4. Восстановление:
# В случае проблем с миграцией
# Восстановите из резервной копии
docker exec dapp-postgres psql -U dapp_user -d dapp_db < backup.sql
# Восстановите ключ
cp ssl/keys/full_db_encryption.key.backup ssl/keys/full_db_encryption.key
🎯 Результат
После успешной миграции:
- ✅ Все данные перенесены с шифрованием
- ✅ Ключ шифрования восстановлен
- ✅ Приложение работает на новом сервере
- ✅ Безопасность данных сохранена
Миграция зашифрованных данных завершена успешно! 🔒