Чтобы улучшить функциональность резервного копирования, я добавляю синхронизацию зашифрованных резервных копий в GCP.

Введение

После того, как я настроил резервную копию своей базы данных с помощью cronjob, я подумал о хорошем решении, позволяющем также иметь резервные копии на случай сбоя сервера.

Вы можете прочитать, как я создал свою собственную простую стратегию резервного копирования здесь:



Первой идеей было что-то вроде задания rsync, которое выполняется на моем ноутбуке и загружает БД каждый день. Но это не очень хорошее решение, поэтому я подумал о том, чтобы включить облачное хранилище. Потому что GCP имеет 300 долларов в виде бесплатных кредитов на данный момент, я предпочитаю его AWS.

Я создал бесплатную учетную запись здесь, а затем создал свой первый Storage Bucket.

Установка Google Cloud SDK

После того, как первоначальная настройка в облачной консоли была выполнена, я выполнил следующие шаги, чтобы подключить свой сервер к хранилищу Google. Если вы работаете с Docker Swarm , эту процедуру нужно повторить для КАЖДОГО рабочего в моем рое. Если вы хотите настроить Docker Swarm, вы можете прочитать об этом в другой статье от меня.

Загрузка Google Cloud SDK

curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-353.0.0-linux-x86_64.tar.gz 

Извлечь

tar -xf google-cloud-sdk-353.0.0-linux-x86_64.tar.gz

Установите SDK

./google-cloud-sdk/install.sh

После завершения процесса установки вы должны переподключить оболочку!

Инициализировать SDK

./google-cloud-skd/bin/gcloud init

Во время инициализации мне пришлось войти в свою учетную запись Google.

Найти корзину

gsutil ls

Теперь машина подключена к GCP, и я могу использовать gsutilдля резервного копирования своих данных.

Шифрование

Теперь, когда у меня есть подключение к Google на каждом сервере, я могу приступить к созданию сценария резервного копирования. Но сначала я собрал информацию о том, как архивировать резервные копии базы данных и хранить их в зашифрованном виде. У Google не должно быть моей базы данных! Я знаю: паранойя

Я выбираю процедуру шифрования, которая использует файл паролей в системе (который я также загрузил на свою машину). Поэтому мне пришлось создать безопасный пароль и экспортировать его в переменную, которую затем можно было использовать в скрипте.

Создать случайный пароль в файле

head -c 100 /dev/urandom | strings -n1 | tr -d '[:space:]' | head -c 40 >> ~/.pass

Экспортируйте файл в .bashrc, чтобы использовать его, пока я нахожусь в оболочке.

echo "export PASS=~/.pass" >> ~/.bashrc && source ~/.bashrc

Сделать файл «безопасным»

chmod 400 ~/.pass

С помощью этих файлов .pass я могу зашифровать и заархивировать папку с помощью:

tar czf - . | openssl enc -e -aes-256-cbc -pbkdf2 -iter 100000 -salt -out archive.enc -pass env:PASS

Для расшифровки я должен использовать:

openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -in archive.enc -pass env:PASS | tar zxf - --directory backup_restore

Создание сценария оболочки резервного копирования

Последним шагом было действительно создать shell-script, который затем будет выполняться в cronjob. После исследования и тестирования был создан этот скрипт:

Важно знать, если вы читаете/используете этот файл:

  1. Замените YOUR_BACKUP_STORAGE_PATH на путь, по которому вы храните свои резервные копии. Эта папка должна иметь два подкаталога: backups_encrypted и backups.
  2. YOUR_BUCKET_HERE следует заменить на ведро, которое вы хотите использовать. Найдите его с помощью gsutil ls
  3. PATH_TO_GOOGLE_SDK_FOLDER — это папка, в которую вы установили Google Cloud SDK.

Этот скрипт теперь можно использовать в cronjob:

30 1 * * 6 export PASS=/root/.pass; /bin/sh /PATH_TO_SCRIPT/SCRIPTNAME.sh

Это cronjob выполняется в 1:30 каждую субботу. Используйте crontab.guru для создания crontab

ОЧЕНЬ ВАЖНО: вам необходимо экспортировать переменную PASS перед выполнением скрипта, потому что cronjob не выполняется в том же bash, в котором вы находитесь как пользователь, а затем ранее экспортированная переменная PASS не существует.

ТАКЖЕ ОЧЕНЬ ВАЖНО: не забудьте воссоздать cronjob на каждом рабочем узле в рое (если вы используете Docker Swarm). В противном случае данные будут потеряны.

Заключительные примечания

В этом простом руководстве я объяснил, как я использовал Google Cloud SDK для сохранения зашифрованного zip-файла в моем Google Bucket здесь.

У меня есть еще один учебник, который объясняет, как вы можете загружать файлы на Amazon. Вы можете скопировать часть шифрования из этого руководства и объединить ее с загрузкой файла на S3:



Я надеюсь, что вы найдете эту статью полезной, а также сможете сохранить свою ценную резервную копию в облаке. Я хотел бы услышать ваши мысли, и если у вас есть какие-либо вопросы, пожалуйста, запишите их ниже.👇👇👇

Want to Connect With the Author?
Here's my GitHub handle and LinkedId profile.

Эта статья изначально была опубликована в моем блоге по адресу https://www.paulsblog.dev/encrypt-database-backup-and-save-on-google-cloud-platform/