Eine sichere Datenbankumgebung ist schwer zu erreichen, aber äußerst wichtig, um Datenschutzverletzungen, Ransomware und andere böswillige Aktivitäten zu vermeiden. Die Sicherheit von Daten hat aus geschäftlicher Sicht höchste Priorität. Beim Betrieb in einem privaten Rechenzentrum ist Ihr Netzwerk normalerweise die erste Verteidigungsebene. Aber in einer verteilten hybriden Datenbank-Cloud-Umgebung, in der interne Teile der Datenbanktopologie sowie Anwendungen über Rechenzentren verteilt sind, stellt das Netzwerk eine größere Angriffsfläche dar. Die Verschlüsselung des Datenverkehrs während der Übertragung ist eine der gängigen Maßnahmen zum Schutz vor Netzwerkabhörungen. In diesem Blog werden wir sehen, wie wir Hybrid-Cloud-Mysql-Datenbankverkehr verschlüsseln können.
Warum müssen wir den Datenbankverkehr verschlüsseln?
Der Hauptgrund dafür ist, dass Verbindungen zwischen Datenbankinstanzen und allen Client-Anwendungen verschlüsselt werden sollten und nur autorisierte Kommunikation sicherstellen. Diese Sicherheitsebene kann ein unerwünschtes Leck sensibler Daten verhindern oder die Möglichkeit eines SQL-Injection-Angriffs usw. ausschließen. Daten während der Übertragung können auch den Replikationsdatenverkehr zwischen den Datenbankknoten oder den Datenverkehr zwischen Load Balancern/Proxys und den Datenbankinstanzen bedeuten. P>
Aktivieren von SSL auf MySQL-Knoten
Neuere Versionen von MySQL werden mit selbstsignierten Zertifikaten und aktiviertem SSL geliefert. Wenn Sie andererseits eine weitere Sicherheitsebene hinzufügen möchten, möchten Sie möglicherweise Ihre eigenen Zertifikate verwenden. ClusterControl ermöglicht Ihnen, das SSL-Zertifikat zu ändern. In diesem Blog haben wir erklärt, wie man das mit ClusterControl macht.
SSL auf Clients aktivieren
MySQL führt die Verschlüsselung pro Verbindung durch, und die Verwendung der Verschlüsselung für einen bestimmten Benutzer kann optional oder obligatorisch sein. Um eine Verbindung zu den mysql-Knoten über SSL herzustellen, stellen Sie sicher, dass Sie die Benutzerberechtigung mit der Syntax „REQUIRE SSL“ eingerichtet haben, ähnlich wie unten:
mysql> create user 'app_user'@'192.168.%.%' identified by '[email protected]' REQUIRE SSL;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to 'app_user'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec)
Hiermit haben Sie die Möglichkeit, entsprechend den Anforderungen der einzelnen Anwendungen eine verschlüsselte oder unverschlüsselte Verbindung zu wählen.
Um sicherzustellen, dass Clients verschlüsselte Verbindungen verwenden müssen, müssen wir den Parameter "require_secure_transport" in der Datei my.cnf aktivieren. Standardmäßig ist dieser Parameter AUS.
DB-Verbindungen überprüfen
Standardmäßig versucht der mysql-Client, eine verschlüsselte Verbindung herzustellen, wenn der Server verschlüsselte Verbindungen unterstützt, wobei eine weitere Kontrolle beispielsweise über die Option --ssl-mode verfügbar ist
[[email protected] vagrant]# mysql -u app_user -p -h 192.168.xx.xx -P3306 --ssl=1 -e "status;" | grep -i SSL
SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384
Das SSL-Protokoll verwendet verschiedene Verschlüsselungsalgorithmen, um sicherzustellen, dass die Daten über öffentliche und private Netzwerke empfangen werden. Es verfügt über Mechanismen, um Datenänderungen oder -verluste zu erkennen.
[[email protected] vagrant]# mysql -u app_user -p -h 192.168.xx.xx -P3306 --ssl=1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 12656
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| Ssl_cipher | ECDHE-RSA-AES256-GCM-SHA384 |
+---------------+-----------------------------+
1 row in set (0.00 sec)
MySQL [(none)]> show status like 'Ssl_version';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Ssl_version | TLSv1.2 |
+---------------+---------+
1 row in set (0.00 sec)
Schlussfolgerung
Das Verschlüsseln von Datenbankverbindungen ist keine große Sache und sollte keine große Sache sein, es wird standardmäßig in einigen der neueren Versionen von MySQL gemacht. Da die Datenbanksicherheit zunehmend zu einem geschäftlichen und behördlichen Anliegen wird, müssen Sie an viel mehr denken als nur an die Verschlüsselung von Daten während der Übertragung, um Ihre hybride Cloud-Umgebung zu schützen. Beachten Sie unbedingt, dass beim Hosten einer Datenbank andere Sicherheitsebenen gelten, z. B. Netzwerk- und Betriebssystemsicherheit.