Назад | Перейти на главную страницу

Как лучше всего взять дамп MySQL, зашифровать его и затем отправить на s3?

Этот текущий проект требует, чтобы БД была выгружена, зашифрована и отправлена ​​на s3. Мне интересно, какие могут быть "лучшие практики" для такой задачи. На данный момент я использую довольно простой метод, но хотел бы получить несколько лучших идей, касающихся безопасности. Вот начало моего сценария:

mysqldump -u root --password="lepass" --all-databases --single-transaction > db.backup.sql
tar -c db.backup.sql | openssl des3 -salt --passphrase foopass > db.backup.tarfile
s3put backup/db.backup.tarfile db.backup.tarfile
# Let's pull it down again and untar it for kicks
s3get surgeryflow-backup/db/db.backup.tarfile db.backup.tarfile
cat db.backup.tarfile | openssl des3 -d -salt --passphrase foopass |tar -xvj

Очевидно, проблема в том, что в этом скрипте все, что нужно атакующему, чтобы устроить ад.

Мы будем благодарны за любые мысли, критические замечания и предложения по этой задаче.

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

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

и, конечно, вы должны chmod 700 backupscript.sh чтобы никто не мог прочитать ваш пароль.

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

gpg или pgp кажется превосходной альтернативой openssl метод, который вы упомянули, потому что это можно сделать без пароля.

#!/bin/sh
touch db.backup.sql.gz
chmod 600 db.backup.sql.gz
mysqldump -u nonprivuser --password="pass" --all-databases --single-transaction | gzip > db.backup.sql.gz
gpg -e -r your@email.com db.backup.sql.gz && rm -f db.backup.sql.gz
s3put backup/db.backup.sql.gz.gpg db.backup.sql.gz.gpg

Использование пароля внутри скрипта - действительно плохая идея, поскольку это можно увидеть в ps aux и зачитывает каждый пользователь системы.

Я предлагаю вам изучить mysqldump-secure. Это сценарий оболочки, который openssl шифрование, основанное на шифровании с открытым и закрытым ключом, намного более производительное, чем gpg.

Вы также можете просто использовать RDS, который сделает все это за вас.