MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Verschlüsselung der Datenbanksicherung – Best Practices

Offsite-Backup-Speicher sollte ein kritischer Bestandteil des Disaster-Recovery-Plans eines jeden Unternehmens sein. Die Möglichkeit, Daten an einem separaten physischen Ort zu speichern, wo sie ein katastrophales Ereignis überleben könnten, das alle Daten in Ihrem primären Rechenzentrum zerstört, sichert das Überleben Ihrer Daten und die Kontinuität Ihres Unternehmens. Ein Cloud-Speicherdienst ist eine ziemlich gute Methode, um Offsite-Backups zu speichern. Egal, ob Sie einen Cloud-Anbieter nutzen oder nur Daten in ein externes Rechenzentrum kopieren, die Backup-Verschlüsselung ist in solchen Fällen ein Muss. In einem unserer vorherigen Blogs haben wir verschiedene Methoden zur Verschlüsselung Ihrer Backups besprochen. Heute konzentrieren wir uns auf einige Best Practices rund um die Sicherungsverschlüsselung.

Stellen Sie sicher, dass Ihre Geheimnisse sicher sind

Um Ihre Daten zu verschlüsseln und zu entschlüsseln, müssen Sie eine Art Passwort oder einen Schlüssel verwenden. Je nach Verschlüsselungsverfahren (symmetrisch oder asymmetrisch) kann es sich um ein Geheimnis sowohl für die Verschlüsselung als auch für die Entschlüsselung oder um einen öffentlichen Schlüssel für die Verschlüsselung und einen privaten Schlüssel für die Entschlüsselung handeln. Was wichtig ist, Sie sollten diese sicher aufbewahren. Wenn Sie asymmetrische Verschlüsselung verwenden, sollten Sie sich auf den privaten Schlüssel konzentrieren, den Sie zum Entschlüsseln von Backups verwenden.

Sie können Schlüssel in einem Schlüsselverwaltungssystem oder einem Tresor speichern – es gibt zahlreiche Optionen auf dem Markt, aus denen Sie auswählen können, wie Amazons KMS oder Hashicorps Vault. Selbst wenn Sie sich entscheiden, diese Lösungen nicht zu verwenden, sollten Sie dennoch allgemeine Sicherheitspraktiken anwenden, um sicherzustellen, dass nur die richtigen Benutzer auf Ihre Schlüssel und Passwörter zugreifen können. Sie sollten auch erwägen, Ihre Sicherungsskripts so vorzubereiten, dass Sie keine Schlüssel oder Passwörter in der Liste der laufenden Prozesse offenlegen. Fügen Sie sie idealerweise in die Datei ein, anstatt sie als Argument an einige Befehle zu übergeben.

Erwägen Sie asymmetrische Verschlüsselung

Der Hauptunterschied zwischen symmetrischer und asymmetrischer Verschlüsselung besteht darin, dass Sie bei der symmetrischen Verschlüsselung sowohl für die Verschlüsselung als auch für die Entschlüsselung einen einzigen Schlüssel oder ein einziges Kennwort verwenden. Dies erfordert höhere Sicherheitsstandards auf beiden Seiten des Prozesses. Sie müssen sicherstellen, dass der Host, auf dem Sie die Daten verschlüsseln, sehr sicher ist, da ein Leck des symmetrischen Verschlüsselungsschlüssels den Zugriff auf alle Ihre verschlüsselten Backups ermöglicht.

Wenn Sie hingegen asymmetrische Verschlüsselung verwenden, haben Sie zwei Schlüssel:den öffentlichen Schlüssel zum Verschlüsseln der Daten und den privaten Schlüssel zum Entschlüsseln. Das macht die Sache so viel einfacher - Sie müssen sich nicht wirklich um den öffentlichen Schlüssel kümmern. Selbst wenn es kompromittiert wäre, wird es immer noch keinen Zugriff auf die Daten aus Backups ermöglichen. Sie müssen sich nur auf die Sicherheit des privaten Schlüssels konzentrieren. Es ist einfacher – Sie verschlüsseln höchstwahrscheinlich Backups täglich (wenn nicht häufiger), während die Wiederherstellung von Zeit zu Zeit erfolgt, wodurch es möglich ist, den privaten Schlüssel an einem sichereren Ort (sogar auf einem dedizierten physischen Gerät) zu speichern. Unten ist ein sehr schnelles Beispiel dafür, wie Sie gpg verwenden können, um ein Schlüsselpaar zu generieren und es zum Verschlüsseln von Daten zu verwenden.

Zuerst müssen Sie die Schlüssel generieren:

[email protected]:~# gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <[email protected]>"

Real name: Krzysztof Ksiazek
Email address: [email protected]
Comment: Backup key
You selected this USER-ID:
    "Krzysztof Ksiazek (Backup key) <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

Dadurch wurden sowohl öffentliche als auch private Schlüssel erstellt. Als Nächstes möchten Sie Ihren öffentlichen Schlüssel zum Verschlüsseln der Daten exportieren:

gpg --armor --export [email protected] > mybackupkey.asc

Als Nächstes können Sie damit Ihr Backup verschlüsseln.

[email protected]:~# xtrabackup  --backup --stream=xbstream  | gzip | gpg -e --armor -r [email protected] -o /backup/pgp_encrypted.backup

Abschließend ein Beispiel, wie Sie Ihren Primärschlüssel (in diesem Fall im lokalen Schlüsselbund gespeichert) zum Entschlüsseln Ihrer Backups verwenden können:

[email protected]:/backup# gpg -d /backup/pgp_encrypted.backup | gunzip | xbstream -x
encryption: using gcrypt 1.6.5

You need a passphrase to unlock the secret key for
user: "Krzysztof Ksiazek (Backup key) <[email protected]>"
4096-bit RSA key, ID E047CD69, created 2018-11-19 (main key ID BC341551)

gpg: gpg-agent is not available in this session
gpg: encrypted with 4096-bit RSA key, ID E047CD69, created 2018-11-19
      "Krzysztof Ksiazek (Backup key) <[email protected]>"

Rotieren Sie Ihre Verschlüsselungsschlüssel

Egal, welche Art von Verschlüsselung Sie implementiert haben, symmetrisch oder asymmetrisch, Sie müssen über die Schlüsselrotation nachdenken. Zunächst einmal ist es sehr wichtig, einen Mechanismus zum Drehen der Tasten zu haben. Dies kann im Falle einer Sicherheitsverletzung nützlich sein, und Sie müssten schnell Schlüssel ändern, die Sie für die Sicherungsverschlüsselung und -entschlüsselung verwenden. Natürlich müssen Sie im Falle einer Sicherheitsverletzung bedenken, was mit den alten Backups passieren wird, die mit kompromittierten Schlüsseln verschlüsselt wurden. Sie wurden kompromittiert, obwohl sie möglicherweise immer noch nützlich und gemäß dem Wiederherstellungspunktziel erforderlich sind. Es gibt einige Optionen, darunter das erneute Verschlüsseln oder das Verschieben in eine nicht kompromittierte Lokalisierung.

Beschleunigen Sie den Verschlüsselungsprozess durch Parallelisierung

Wenn Sie die Möglichkeit haben, die Parallelisierung des Verschlüsselungsprozesses zu implementieren, sollten Sie dies in Betracht ziehen. Die Verschlüsselungsleistung hängt hauptsächlich von der CPU-Leistung ab, sodass mehr CPU-Kerne parallel arbeiten können, um die Datei zu verschlüsseln, was zu viel kürzeren Verschlüsselungszeiten führen sollte. Einige der Verschlüsselungstools bieten eine solche Option. Eines davon ist xtrabackup, das eine Option zur Verwendung eingebetteter Verschlüsselung und zur Parallelisierung des Prozesses bietet.

Was Sie suchen, sind entweder die Optionen „--encrypt-key“ oder „--encrypt-key-file“, die die eingebettete Verschlüsselung aktivieren. Dabei können Sie auch „--encrypt-threads“ und „--encrypt-chunk-size“ definieren. Zweitens erhöht einen Arbeitspuffer für die Verschlüsselung, erstens definiert, wie viele Threads für die Verschlüsselung verwendet werden sollen.

Dies ist natürlich nur eine der Lösungen, die Sie implementieren können. Sie können dies mit Shell-Tools erreichen. Ein Beispiel unten:

[email protected]:~# files=2 ; mariabackup --user=root --backup --pass=pass --stream=xbstream  |split -b 60M - backup ; ls backup* |  parallel -j ${files} --workdir "$(pwd)" 'echo "encrypting {}" ; openssl  enc -aes-256-cbc -salt -in "{}" -k mypass > "111{}"'

Dies ist keineswegs eine perfekte Lösung, da Sie im Voraus wissen müssen, wie groß oder kleiner das Backup sein wird, um es auf eine vordefinierte Anzahl von Dateien aufzuteilen, die dem gewünschten Parallelisierungsgrad entsprechen (wenn Sie 2 CPU verwenden möchten). Kerne, sollten Sie zwei Dateien haben, wenn Sie 4 Kerne, 4 Dateien usw. verwenden möchten). Es erfordert auch Speicherplatz, der doppelt so groß ist wie das Backup, da es zuerst mehrere Dateien mit Split generiert und dann die Verschlüsselung einen weiteren Satz verschlüsselter Dateien erstellt. Wenn Ihre Datensatzgröße andererseits akzeptabel ist und Sie die Verschlüsselungsleistung verbessern möchten, ist dies eine Option, die Sie in Betracht ziehen können. Um das Backup zu entschlüsseln, müssen Sie jede der einzelnen Dateien entschlüsseln und sie dann mit „cat“ zusammenfügen.

Testen Sie Ihre Sicherungen

Unabhängig davon, wie Sie die Backup-Verschlüsselung implementieren, müssen Sie sie testen. Zunächst einmal müssen alle Backups getestet werden, ob verschlüsselt oder nicht. Sicherungen sind möglicherweise nicht vollständig oder weisen eine Art von Beschädigung auf. Sie können nicht sicher sein, dass Ihre Sicherung wiederhergestellt werden kann, bis Sie die Wiederherstellung tatsächlich durchführen. Aus diesem Grund ist eine regelmäßige Backup-Überprüfung ein Muss. Die Verschlüsselung erhöht die Komplexität des Backup-Prozesses. Zum Zeitpunkt der Verschlüsselung können erneut Probleme auftreten – Fehler oder Störungen können die verschlüsselten Dateien beschädigen. Einmal verschlüsselt, stellt sich die Frage, ob es möglich ist, es zu entschlüsseln und wiederherzustellen?

Sie sollten einen Wiederherstellungstestprozess eingerichtet haben. Idealerweise wird der Wiederherstellungstest nach jeder Sicherung durchgeführt. Sie sollten Ihre Backups mindestens ein paar Mal im Jahr testen. Auf jeden Fall müssen Sie es testen, sobald eine Änderung im Backup-Prozess eingeführt wurde. Haben Sie das Backup komprimiert? Haben Sie die Verschlüsselungsmethode geändert? Haben Sie den Verschlüsselungsschlüssel rotiert? Alle diese Aktionen können sich auf Ihre Fähigkeit auswirken, Ihre Sicherung tatsächlich wiederherzustellen. Daher sollten Sie nach jeder Änderung den gesamten Prozess testen.

ClusterControl kann den Überprüfungsprozess automatisieren, sowohl bei Bedarf als auch nach jedem Backup geplant.

Um ein vorhandenes Backup zu überprüfen, müssen Sie es nur aus der Liste auswählen, auf die Option „Wiederherstellen“ klicken und dann den Wiederherstellungsassistenten durchlaufen. Zuerst müssen Sie überprüfen, welche Sicherung Sie wiederherstellen möchten.

Dann sollten Sie im nächsten Schritt die Wiederherstellungs- und Überprüfungsoption auswählen.

Sie müssen einige Informationen über den Host übergeben, auf dem Sie die Wiederherstellung testen möchten. Es muss über SSH von der ClusterControl-Instanz aus erreichbar sein. Sie können sich entscheiden, den Testserver für die Wiederherstellung am Laufen zu halten (und dann einige Teildaten davon abzuspeichern, wenn Sie eine Teilwiederherstellung durchführen möchten) oder ihn herunterzufahren.

Im letzten Schritt geht es darum, zu überprüfen, ob Sie die richtigen Entscheidungen getroffen haben. Wenn ja, können Sie den Backup-Überprüfungsjob starten.

Wenn die Überprüfung erfolgreich abgeschlossen wurde, sehen Sie, dass das Backup in der Liste der Backups als verifiziert markiert ist.

Wenn Sie diesen Vorgang automatisieren möchten, ist dies auch mit ClusterControl möglich. Beim Planen der Sicherung können Sie die Sicherungsüberprüfung aktivieren:

Dadurch wird ein weiterer Schritt im Assistenten für die Sicherungsplanung hinzugefügt.

Hier müssen Sie wieder den Host definieren, den Sie für Backup-Wiederherstellungstests verwenden möchten, entscheiden, ob Sie die Software darauf installieren möchten (oder vielleicht bereits getan haben), ob Sie den Wiederherstellungsserver am Laufen halten möchten und ob Sie Sie möchten das Backup sofort nach Abschluss testen oder vielleicht etwas warten.