Een veilige databaseomgeving is moeilijk te realiseren, maar uiterst belangrijk om datalekken, ransomware en andere kwaadaardige activiteiten te voorkomen. Beveiliging van gegevens is een topprioriteit vanuit zakelijk oogpunt. Wanneer u in een privédatacenter draait, is uw netwerk meestal de eerste verdedigingslaag. Maar in een gedistribueerde hybride database-cloudomgeving, waar zowel interne delen van de databasetopologie als applicaties over datacenters zijn verdeeld, vertegenwoordigt het netwerk een groter verbindingsoppervlak. Versleuteling van in-transit dataverkeer is een van de gebruikelijke maatregelen ter bescherming tegen afluisteren van netwerken. In deze blog zullen we zien hoe we hybride cloud mysql-databaseverkeer kunnen versleutelen.
Waarom moeten we databaseverkeer versleutelen?
De belangrijkste reden is dat verbindingen tussen database-instances en eventuele client-applicaties versleuteld moeten zijn en alleen geautoriseerde communicatie moeten garanderen. Deze beveiligingslaag kan ongewenst lekken van gevoelige gegevens voorkomen of de mogelijkheid van een SQL-injectie-aanval enz. uitsluiten. In-transit gegevens kunnen ook het replicatieverkeer tussen de databaseknooppunten of verkeer tussen load balancers/proxy's en de database-instanties betekenen.
SSL activeren op MySQL-knooppunten
Nieuwere versies van MySQL worden geleverd met zelfondertekende certificaten en SSL ingeschakeld. Aan de andere kant, als u nog een beveiligingslaag wilt toevoegen, wilt u misschien uw eigen certificaten gebruiken. Met ClusterControl kunt u het SSL-certificaat wijzigen. In deze blog hebben we uitgelegd hoe je dit doet met ClusterControl.
SSL activeren op clients
MySQL voert codering uit per verbinding en het gebruik van codering voor een bepaalde gebruiker kan optioneel of verplicht zijn. Om verbinding te maken met de mysql-knooppunten via SSL, moet u ervoor zorgen dat u de gebruikerstoekenning hebt ingesteld met de syntaxis "VEREIST SSL", zoals hieronder:
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)
Hiermee kunt u een versleutelde of niet-versleutelde verbinding kiezen volgens de vereisten van individuele applicaties.
Om ervoor te zorgen dat clients versleutelde verbindingen moeten gebruiken, moeten we de parameter 'require_secure_transport' in het my.cnf-bestand inschakelen. Standaard is deze parameter UIT.
DB-verbindingen verifiëren
Standaard probeert de mysql-client een versleutelde verbinding tot stand te brengen als de server versleutelde verbindingen ondersteunt, met verdere controle die bijvoorbeeld beschikbaar is via de optie --ssl-mode,
[[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
Het SSL-protocol gebruikt verschillende coderingsalgoritmen om ervoor te zorgen dat de gegevens worden ontvangen via openbare en particuliere netwerken. Het heeft mechanismen om elke wijziging of verlies van gegevens te detecteren.
[[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)
Conclusie
Het versleutelen van databaseverbindingen is niet erg en zou geen probleem moeten zijn, het wordt standaard gedaan in sommige van de nieuwere versies van MySQL. Nu databasebeveiliging een steeds groter zakelijk en regelgevend probleem wordt, is er veel meer om over na te denken dan alleen gegevensversleuteling tijdens het transport om uw hybride cloudomgeving te beveiligen. Het is belangrijk om in gedachten te houden dat er andere beveiligingslagen van toepassing zijn bij het hosten van een database, zoals netwerk- en besturingssysteembeveiliging.