Bezpieczne środowisko bazy danych jest trudne do osiągnięcia, ale niezwykle ważne, aby uniknąć naruszeń danych, oprogramowania ransomware i innych złośliwych działań. Bezpieczeństwo danych jest najwyższym priorytetem z biznesowego punktu widzenia. Kiedy działasz w prywatnym centrum danych, Twoja sieć jest zwykle pierwszą warstwą ochrony. Jednak w środowisku chmury rozproszonej hybrydowej bazy danych, w której wewnętrzne części topologii bazy danych oraz aplikacje są rozproszone w centrach danych, sieć stanowi większą powierzchnię przyłączenia. Szyfrowanie przesyłanego ruchu danych jest jednym z powszechnych środków ochrony przed podsłuchiwaniem sieci. W tym blogu zobaczymy, jak możemy szyfrować ruch bazy danych mysql w chmurze hybrydowej.
Dlaczego musimy szyfrować ruch w bazie danych?
Głównym powodem jest to, że połączenia między instancjami bazy danych a dowolnymi aplikacjami klienckimi powinny być szyfrowane i zapewniać tylko autoryzowaną komunikację. Ta warstwa bezpieczeństwa może zapobiegać niechcianemu wyciekowi danych wrażliwych lub wykluczyć możliwość jakiegokolwiek ataku typu SQL injection itp. Dane w drodze mogą również oznaczać ruch replikacji między węzłami bazy danych lub ruch między modułami równoważenia obciążenia/serwerami proxy a instancjami bazy danych.
Aktywacja SSL na węzłach MySQL
Nowe wersje MySQL są dostarczane z certyfikatami z podpisem własnym i włączonym SSL. Z drugiej strony, jeśli chcesz dodać kolejną warstwę bezpieczeństwa, możesz użyć własnych certyfikatów, ClusterControl umożliwia zmianę certyfikatu SSL. W tym blogu wyjaśniliśmy, jak to zrobić za pomocą ClusterControl.
Aktywacja SSL na klientach
MySQL wykonuje szyfrowanie dla każdego połączenia, a użycie szyfrowania dla danego użytkownika może być opcjonalne lub obowiązkowe. Aby połączyć się z węzłami mysql przez SSL, upewnij się, że ustawiłeś uprawnienia użytkownika za pomocą składni „REQUIRE SSL”, podobnej do poniższej:
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)
Pozwala to wybrać połączenie szyfrowane lub nieszyfrowane zgodnie z wymaganiami poszczególnych aplikacji.
Aby upewnić się, że klienci muszą korzystać z połączeń szyfrowanych, musimy włączyć parametr „require_secure_transport” w pliku my.cnf. Domyślnie ten parametr jest WYŁĄCZONY.
Weryfikacja połączeń z bazą danych
Domyślnie klient mysql próbuje nawiązać szyfrowane połączenie, jeśli serwer obsługuje szyfrowane połączenia, z dalszą kontrolą dostępną na przykład za pomocą opcji --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
Protokół SSL wykorzystuje różne algorytmy szyfrowania, aby zapewnić dane otrzymywane w sieciach publicznych i prywatnych. Posiada mechanizmy wykrywania wszelkich zmian lub utraty danych.
[[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)
Wnioski
Szyfrowanie połączeń z bazą danych nie jest i nie powinno być wielkim problemem, jest to domyślnie wykonywane w niektórych nowszych wersjach MySQL. Ponieważ bezpieczeństwo bazy danych staje się coraz większym problemem biznesowym i regulacyjnym, w celu zabezpieczenia środowiska chmury hybrydowej jest o wiele więcej do przemyślenia niż tylko szyfrowanie danych podczas przesyłania. Należy pamiętać, że podczas hostowania bazy danych obowiązują inne warstwy zabezpieczeń, takie jak bezpieczeństwo sieci i systemu operacyjnego.