Sicherheit ist einer der wichtigsten Aspekte beim Betrieb einer Datenbank. Ob Sie ein Entwickler oder ein DBA sind, wenn Sie die Datenbank verwalten, liegt es in Ihrer Verantwortung, Ihre Daten zu schützen und sie vor jeglicher Art von unbefugtem Zugriff zu schützen. Leider schützen viele Organisationen ihre Daten nicht, wie wir bei der neuen Welle von MongoDB-Ransomware-Angriffen im September 2017 gesehen haben. Wir hatten zuvor einen Blog darüber veröffentlicht, wie man MongoDB-Datenbanken sichert.
In diesem Blogbeitrag werden wir uns ansehen, wie Sie Ihre Datenbanken mit ClusterControl sichern können. Alle hier beschriebenen Funktionen sind in Version 1.5.1 von ClusterControl (veröffentlicht am 23. Dezember 2017) verfügbar. Bitte beachten Sie, dass einige Funktionen nur für bestimmte Datenbanktypen verfügbar sind.
Backup-Verschlüsselung
ClusterControl 1.5.1 hat eine neue Funktion namens Backup-Verschlüsselung eingeführt. Alle verschlüsselten Backups sind mit einem Schlosssymbol daneben gekennzeichnet:
Sie können diese Funktion für alle von ClusterControl unterstützten Backup-Methoden (mysqldump, xtrabackup, mongodump, pg_dump) verwenden. Um die Verschlüsselung zu aktivieren, schalten Sie beim Planen oder Erstellen der Sicherung einfach den Schalter „Verschlüsselung aktivieren“ ein. ClusterControl generiert automatisch einen Schlüssel zur Verschlüsselung des Backups. Es verwendet den Verschlüsselungsalgorithmus AES-256 (CBC) und führt die Verschlüsselung on-the-fly auf dem Zielserver durch. Der folgende Befehl zeigt ein Beispiel dafür, wie ClusterControl eine mysqldump-Sicherung durchführt:
$ mysqldump --defaults-file=/etc/my.cnf --flush-privileges --hex-blob --opt --no-create-info --no-data --triggers --routines --events --single-transaction --skip-comments --skip-lock-tables --skip-add-locks --databases db1 | gzip -6 -c | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-094508-e0bc6ad658e88d93.tmp | socat - TCP4:192.168.55.170:9999'
Sie würden den folgenden Fehler sehen, wenn Sie versuchten, ein verschlüsseltes Backup zu dekomprimieren, ohne es zuerst mit dem richtigen Schlüssel zu entschlüsseln:
$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format
Der Schlüssel wird in der ClusterControl-Datenbank gespeichert und kann aus der Datei cmon_backup.metadata für einen bestimmten Sicherungssatz abgerufen werden. Es wird von ClusterControl bei der Wiederherstellung verwendet. Das Verschlüsseln von Backups wird dringend empfohlen, insbesondere wenn Sie Ihre Backups extern sichern möchten, z. B. durch Archivieren in der Cloud.
MySQL/PostgreSQL-Client-Server-Verschlüsselung
Abgesehen davon, dass Sie während der Bereitstellung die empfohlenen Sicherheitsschritte befolgen, können Sie die Zuverlässigkeit Ihres Datenbankdienstes erhöhen, indem Sie die Client-Server-SSL-Verschlüsselung verwenden. Mit ClusterControl können Sie diesen Vorgang mit einfachem Zeigen und Klicken ausführen:
Die generierten Schlüssel und Zertifikate können Sie dann direkt vom ClusterControl-Host unter
Verschlüsselung der Datenbankreplikation
Der Replikationsverkehr innerhalb eines Galera-Clusters kann mit nur einem Klick aktiviert werden. ClusterControl verwendet einen 2048-Bit-Standardschlüssel und ein Zertifikat, das auf dem ClusterControl-Knoten generiert und an alle Galera-Knoten übertragen wird:
Ein Cluster-Neustart ist erforderlich. ClusterControl führt einen fortlaufenden Neustartvorgang durch, wobei jeweils ein Knoten verwendet wird. Sobald die Verschlüsselung aktiviert ist, sehen Sie ein grünes Schlosssymbol neben dem Datenbankserver (Galera zeigt die Galera-Replikationsverschlüsselung an, während SSL die Client-Server-Verschlüsselung anzeigt) im Hosts-Raster der Übersichtsseite:
Alle Schlüssel und Zertifikate können direkt unter Key Management verwaltet werden, wie weiter unten beschrieben.
Schlüsselverwaltung
Alle generierten Schlüssel und Zertifikate können direkt über die ClusterControl-Benutzeroberfläche verwaltet werden. Mit der Schlüsselverwaltung können Sie SSL-Zertifikate und -Schlüssel verwalten, die auf Ihren Clustern bereitgestellt werden können:
Wenn das Zertifikat abgelaufen ist, können Sie einfach die Benutzeroberfläche verwenden, um ein neues Zertifikat mit dem richtigen Schlüssel und der richtigen Zertifizierungsstelle (CA) zu generieren, oder einen vorhandenen Schlüssel und ein Zertifikat in den ClusterControl-Host importieren.
Sicherheitsberater
Advisors sind Miniprogramme, die in ClusterControl ausgeführt werden. Sie führen bestimmte Aufgaben aus und geben Ratschläge, wie Probleme in Bereichen wie Leistung, Sicherheit, Protokollverwaltung, Konfiguration, Speicherplatz und anderen angegangen werden können. Jeder Advisor kann wie ein Cron-Job geplant und als eigenständige ausführbare Datei innerhalb der ClusterControl-Benutzeroberfläche ausgeführt werden. Es kann auch über den Kommandozeilen-Client 's9s' von ClusterControl ausgeführt werden.
ClusterControl aktiviert zwei Sicherheitsberater für MySQL-basierte Systeme:
- Zugriff von jedem Host ('%') - Identifiziert alle Benutzer, die einen Wildcard-Host aus der MySQL-Systemtabelle verwenden, und gibt Ihnen mehr Kontrolle darüber, welche Hosts sich mit den Servern verbinden können.
- Anzahl der Konten ohne Passwort prüfen – Identifiziert alle Benutzer, die kein Passwort in der MySQL-Systemtabelle haben.
Für MongoDB haben wir die folgenden Advisors:
- MongoDB-Authentifizierung aktiviert – Prüfen Sie, ob die MongoDB-Instanz mit aktiviertem Authentifizierungsmodus ausgeführt wird.
- Autorisierungsprüfung – Überprüfen Sie, ob MongoDB-Benutzer mit einer zu freizügigen Rolle für die Zugriffskontrolle autorisiert sind.
Weitere Einzelheiten darüber, wie ClusterControl die Sicherheitsprüfungen durchführt, finden Sie im JavaScript-ähnlichen Quellcode des Advisors unter
Mehrere Netzwerkschnittstellen
Wenn Sie mehrere NICs auf den Datenbankhosts haben, können Sie den Datenbankdatenverkehr vom Verwaltungsdatenverkehr trennen. Ein Netzwerk wird von den Datenbankknoten verwendet, um miteinander zu kommunizieren, und dieses Netzwerk ist keinem öffentlichen Netzwerk ausgesetzt. Das andere Netzwerk wird von ClusterControl zu Verwaltungszwecken verwendet. ClusterControl ist in der Lage, ein solches Setup mit mehreren Netzwerken bereitzustellen. Betrachten Sie das folgende Architekturdiagramm:
Um den obigen Datenbank-Cluster in ClusterControl zu importieren, würde man die primäre IP-Adresse der Datenbank-Hosts angeben. Dann ist es möglich, das Verwaltungsnetzwerk sowie das Datennetzwerk auszuwählen:
ClusterControl kann auch in einer Umgebung ohne Internetzugang arbeiten, wobei die Datenbanken vollständig vom öffentlichen Netzwerk isoliert sind. Die Mehrheit der Funktionen wird gut funktionieren. Wenn der ClusterControl-Host mit Internet konfiguriert ist, kann er auch das Repository des Datenbankanbieters für die internetlosen Datenbankserver klonen. Gehen Sie einfach zu
Die Spiegelung kann je nach Internetverbindung ca. 10 bis 20 Minuten dauern, später sehen Sie den neuen Eintrag in der Liste. Sie können dann stattdessen dieses Repository auswählen, wenn Sie einen neuen Cluster skalieren oder bereitstellen, ohne dass die Datenbankhosts über eine Internetverbindung verfügen müssen (beachten Sie, dass das Offline-Repository des Betriebssystems ebenfalls vorhanden sein sollte).
MySQL-Benutzerverwaltung
Das MySQL-Berechtigungssystem stellt sicher, dass alle Benutzer nur die Operationen ausführen können, zu denen sie berechtigt sind. Die Gewährung ist von entscheidender Bedeutung, da Sie nicht allen Benutzern vollständigen Zugriff auf Ihre Datenbank gewähren möchten, aber Benutzer müssen die erforderlichen Berechtigungen haben, um Abfragen auszuführen und tägliche Aufgaben auszuführen.
ClusterControl bietet eine interaktive Benutzeroberfläche zum Verwalten der Datenbankschemata und -berechtigungen. Es vereinheitlicht die Konten auf allen MySQL-Servern im Cluster und vereinfacht den Gewährungsprozess. Sie können die Datenbankbenutzer einfach visualisieren, um Fehler zu vermeiden.
Wie Sie im obigen Screenshot sehen können, hat ClusterControl unnötige Berechtigungen ausgegraut, wenn Sie einem Benutzer nur eine Datenbank (shopdb) gewähren möchten. "SSL erforderlich?" ist nur aktiviert, wenn die Client/Server-SSL-Verschlüsselung aktiviert ist, während die Kontrollkästchen für Administratorrechte vollständig deaktiviert sind, wenn eine bestimmte Datenbank definiert ist. Sie können auch die generierte GRANT-Anweisung unten im Assistenten überprüfen, um die Anweisung anzuzeigen, die ClusterControl ausführen wird, um diesen Benutzer zu erstellen. Dieser Helfer sieht ziemlich einfach aus, aber das Erstellen von Benutzern und das Gewähren von Privilegien kann fehleranfällig sein.
ClusterControl stellt auch eine Liste inaktiver Benutzer für alle Datenbankknoten im Cluster bereit und zeigt die Konten an, die seit dem letzten Serverneustart nicht verwendet wurden:
Dies warnt den Administrator vor unnötigen Konten, die vorhanden sind und den Server möglicherweise beschädigen könnten. Der nächste Schritt besteht darin, zu überprüfen, ob die Konten nicht mehr aktiv sind, und Sie können einfach die Option „Ausgewählten Benutzer löschen“ verwenden, um sie zu entfernen. Stellen Sie sicher, dass genügend Datenbankaktivität vorhanden ist, um sicherzustellen, dass die von ClusterControl generierte Liste korrekt ist. Je länger die Betriebszeit des Servers, desto besser.
Immer auf dem Laufenden bleiben
Für den Produktionseinsatz wird dringend empfohlen, die datenbankbezogenen Pakete aus dem Repository des Anbieters zu installieren. Verlassen Sie sich nicht auf das standardmäßige Betriebssystem-Repository, wo die Pakete normalerweise veraltet sind. Wenn Sie in einer Cluster-Umgebung wie Galera Cluster oder sogar MySQL Replication arbeiten, haben Sie immer die Wahl, das System mit minimaler Ausfallzeit zu patchen.
ClusterControl unterstützt automatische Nebenversions-Rolling-Upgrades für MySQL/MariaDB mit einem einzigen Klick. Gehen Sie einfach zu
Upgrades von Hauptversionen (z. B. von MySQL 5.6 auf MySQL 5.7) werden absichtlich nicht automatisiert. Größere Upgrades erfordern normalerweise die Deinstallation der vorhandenen Pakete, was eine riskante Aufgabe zur Automatisierung darstellt. Für solche Upgrades ist eine sorgfältige Planung und Prüfung erforderlich.
Die Datenbanksicherheit ist ein wichtiger Aspekt beim Ausführen Ihrer Datenbank in der Produktion. Aus all den Vorfällen, von denen wir häufig in den Nachrichten lesen (und es gibt wahrscheinlich viele andere, die nicht veröffentlicht werden), ist klar, dass es da draußen Gruppen gibt, die mit schlechten Absichten beschäftigt sind. Stellen Sie also sicher, dass Ihre Datenbanken gut geschützt sind.