MySQLダンプを取得して暗号化し、s3にプッシュするためのベストプラクティスは何ですか?


8

この現在のプロジェクトでは、DBをダンプして暗号化し、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

明らかに問題は、このスクリプトが攻撃者が地獄を上げるために必要とするすべてのものであることです。

このタスクについての考え、批評、提案は高く評価されます。

回答:


9

最初に、問題のデータベースに対する読み取り専用権限を持つmysqlで「ユーザー」を作成できます。これにより、攻撃者がバックアップスクリプトにアクセスして、破壊的な損傷の可能性を減らすことができます。

あなたが使用することができgpgたりpgp、暗号化バックアップにあなたがそれを圧縮する前または後に、あなたはあなたの公開鍵を使用して、パスワードを提供しなくても、それを行うことができます。

そしてもちろん、chmod 700 backupscript.sh誰かがあなたのパスワードを読まないようにすべきです。

パスワードなしのデータベーススナップショットを作成する方法は他にもあるかもしれませんが、頭の中で気づいていません。

gpgまたは、パスワードなしで実行できるため、前述pgpopenssl方法の優れた代替手段のようです。

#!/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

短いスクリプト例を追加しました
cpbills 2010年

行ってよかったと思います。
Shivam Bajpai 2015

0

スクリプト内でパスワードを使用することは非常に悪い考えです。これはps aux、すべてのシステムユーザーがこのパスワードを確認して読み取ることができるためです。

mysqldump-secureを調べることをお勧めします。これは、openssl公開鍵と秘密鍵の暗号化に基づいて暗号化を行うシェルスクリプトであり、gpgよりもはるかに高いパフォーマンスを発揮します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.