Audyty bezpieczeństwa są koniecznością we wszystkich firmach w celu ochrony danych i uniknięcia ewentualnych naruszeń bezpieczeństwa, ale jest to również czasochłonne zadanie, ponieważ trzeba okresowo sprawdzać wiele rzeczy. W rezultacie, ogólnie rzecz biorąc, firmy postępują zgodnie z listą kontrolną bezpieczeństwa i konfigurują wszystko, aby to uwzględnić, ale nie mają audytów bezpieczeństwa. Możesz powiedzieć:„Jeśli wszystko działa dobrze, po prostu zachowaj to tak, jak jest”. Cóż, w rzeczywistości nie można ufać, że konfigurowane teraz zasady bezpieczeństwa będą przydatne w przyszłości i że nic się nie zmieni, aby na nie wpłynąć. Rozwiązaniem może być zautomatyzowanie tych audytów bezpieczeństwa lub możliwość robienia tego okresowo w sposób przyjazny dla użytkownika.
W tym blogu zobaczymy, jak przeprowadzić różne audyty bezpieczeństwa dla PostgreSQL i zautomatyzować je za pomocą ClusterControl.
Czego potrzebujesz do przeprowadzenia audytu bezpieczeństwa w PostgreSQL?
Spójrzmy na niektóre z najważniejszych rzeczy do audytu ze względów bezpieczeństwa w bazie danych PostgreSQL:
-
Komunikacja:komunikacja we wszystkich Twoich systemach musi być zaszyfrowana i musisz ograniczyć ruch tylko do tego, który przychodzi ze znanych źródeł, aby zmniejszyć ryzyko nieuprawnionego dostępu do Twoich danych.
-
Dostęp do bazy danych:Musisz ograniczyć zarówno fizyczny, jak i zdalny dostęp do swoich baz danych. Zdalny dostęp można ograniczyć, zezwalając każdemu użytkownikowi na połączenia tylko ze znanych źródeł, a nawet za pomocą połączeń SSH lub VPN.
-
Konta użytkowników:Istnieje wiele sposobów na poprawę bezpieczeństwa kont użytkowników w PostgreSQL, takich jak usuwanie nieaktywnych użytkowników , nadawanie tylko niezbędnych uprawnień itp.
-
Instalacja i konfiguracja:należy wprowadzić pewne zmiany, aby zabezpieczyć instalację PostgreSQL, na przykład instalowanie tylko niezbędnych pakiety, zmiana domyślnych poświadczeń i konfiguracji itp.
-
Inspekcje i rejestrowanie:Instrukcje rejestrowania mogą pomóc w wykryciu problemów z bezpieczeństwem lub ich uniknięciu, jeśli wykryjesz je na czas . Możesz użyć standardowej funkcji rejestrowania PostgreSQL, ale możesz również użyć rozszerzenia, takiego jak pgAudit, aby uzyskać bardziej szczegółowe rejestrowanie.
-
Aktualizacje:Aktualizuj swój system operacyjny i bazę danych tak, jak to możliwe, stosując poprawki i aktualizacje zabezpieczeń.
-
Monitor zapytań:należy sprawdzić ruch w celu wykrycia nietypowych zapytań lub ataków DoS.
-
Monitorowanie:Aby poznać stan swoich systemów, musisz mieć dobry system monitorowania. Może to być przydatne do znalezienia problemów z bezpieczeństwem lub nawet ich uniknięcia.
Teraz wiemy, co sprawdzić, spójrzmy na opcję automatyzacji tych zadań - ClusterControl.
Audyty bezpieczeństwa dla PostgreSQL z ClusterControl
W przypadku audytów bezpieczeństwa PostgreSQL ClusterControl jest dobrym rozwiązaniem, ponieważ jest to system zarządzania i monitorowania, który pomaga we wdrażaniu, zarządzaniu, monitorowaniu i skalowaniu baz danych z poziomu przyjaznego dla użytkownika interfejsu. Obsługuje najlepsze technologie baz danych typu open source i możesz zautomatyzować wiele zadań związanych z bazą danych, które musisz regularnie wykonywać, takich jak dodawanie i skalowanie nowych węzłów, wykonywanie kopii zapasowych i przywracanie oraz wiele innych.
Spójrzmy, jak możesz pokryć wspomniane wcześniej kontrole bezpieczeństwa za pomocą ClusterControl.
Komunikacja
W sekcji bezpieczeństwa (ClusterControl -> Wybierz Cluster -> zakładka Security) możesz włączyć szyfrowanie SSL, aby szyfrować połączenia między klientami a serwerem.
Dostęp z ClusterControl do węzłów jest również zabezpieczony za pomocą bezhasłowego protokołu SSH z parą kluczy.
Dostęp do bazy danych
Możesz ograniczyć dostęp do bazy danych PostgreSQL, modyfikując plik konfiguracyjny pg_hba.conf w interfejsie użytkownika ClusterControl (ClusterControl -> Wybierz Cluster -> Zarządzaj -> Konfiguracje). W ten sposób możesz określić następujące opcje:
-
Typ:najczęściej używane opcje to „lokalny” dla gniazda domeny Unix i „host” dla zwykłego lub zaszyfrowanego SSL gniazda TCP/IP, ale są też inne opcje, takie jak „hostssl” i nie tylko.
-
Baza danych:może to być „wszystkie”, „sameuser”, „samerole”, „replikacja”, a nazwę bazy danych lub listę oddzielonych przecinkami nazw baz danych.
-
Użytkownik:Może to być "all", nazwa użytkownika, nazwa grupy poprzedzona "+", lub ich listę oddzieloną przecinkami.
-
Adres:nazwa hosta lub adres IP i maska CIDR.
-
Metoda:najczęściej używane są tutaj „zaufanie”, „odrzucenie”, „md5”, „ident” i „peer”, ale jest więcej opcji, takich jak „scram-sha-256” lub „ldap”.
Przykład:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Konta użytkowników
Możesz zarządzać użytkownikami bazy danych z interfejsu użytkownika ClusterControl (ClusterControl -> Wybierz Cluster -> Zarządzaj -> Zarządzanie użytkownikami). Możesz tworzyć nowych użytkowników lub edytować i usuwać istniejących oraz przypisywać im odpowiednie uprawnienia.
Instalacja i konfiguracja
Możesz wdrożyć nowy klaster PostgreSQL lub zaimportować już istniejący. Po dodaniu klastra PostgreSQL do ClusterControl możesz zarządzać bieżącą konfiguracją (ClusterControl -> Select Cluster -> Manage -> Configuration), a nawet dodawać nowe węzły do klastra.
Podczas wdrażania możesz zmodyfikować konfigurację bazy danych, taką jak port bazy danych lub poświadczenia, a następnie ClusterControl zainstaluje tylko pakiety niezbędne do wdrożenia nowego klastra.
Kontrola i rejestrowanie
Możesz sprawdzić standardowe logowanie PostgreSQL w ClusterControl UI (ClusterControl -> Select Cluster -> Logs -> System Logs) lub nawet włączyć rozszerzenie pgAudit z ClusterControl i sprawdzić logowanie audytu w tym samym miejscu .
Aktualizacje
W przypadku drobnych uaktualnień do tego zadania można użyć ClusterControl. Możesz uzyskać dostęp do interfejsu użytkownika i przeprowadzić aktualizację (ClusterControl -> Wybierz Cluster -> Zarządzaj -> Aktualizacje) lub skorzystać z raportu operacyjnego ClusterControl „Aktualizacje pakietów”, aby otrzymać dostępne pakiety pocztą e-mail lub sprawdzić je w interfejsie użytkownika ClusterControl.
Monitor zapytań
W sekcji monitora zapytań możesz znaleźć najpopularniejsze zapytania, uruchomione zapytania, wartości odstające zapytań i statystyki zapytań w celu monitorowania ruchu w bazie danych.
Monitorowanie
ClusterControl umożliwia monitorowanie serwerów w czasie rzeczywistym za pomocą wstępnie zdefiniowanego zestawu pulpitów nawigacyjnych w celu analizowania niektórych z najczęstszych wskaźników.
ClusterControl umożliwia dostosowanie wykresów dostępnych w klastrze oraz włączenie monitorowania opartego na agentach w celu generowania bardziej szczegółowych pulpitów nawigacyjnych.
Możesz także tworzyć alerty informujące o zdarzeniach w klastrze lub integrować się z różnymi usługami, takimi jak PagerDuty lub Slack.
Raporty operacyjne
Jeśli nie chcesz uzyskiwać dostępu do interfejsu użytkownika ClusterControl w celu sprawdzenia stanu swoich klastrów, możesz utworzyć lub zaplanować raporty operacyjne.
Raporty operacyjne dostarczają informacji o stanie bazy danych, które można wykorzystać do audytu środowiska. Raporty te składają się z różnych kontroli i dotyczą różnych codziennych zadań DBA. Ideą raportowania operacyjnego ClusterControl jest umieszczenie wszystkich najważniejszych danych w jednym dokumencie, który można szybko przeanalizować, aby uzyskać jasne zrozumienie stanu baz danych i ich procesów.
Możesz zaplanować raporty, takie jak „Codzienny raport systemowy”, „Raport uaktualnienia pakietu”, „Raport zmiany schematu”, „Kopie zapasowe” i „Dostępność”, i możesz je otrzymywać w więcej niż jednym e-mailu adres.
Korzystanie z ClusterControl CLI do automatyzacji audytów bezpieczeństwa
ClusterControl CLI, znany również jako s9s, to narzędzie wiersza poleceń wprowadzone w ClusterControl w wersji 1.4.1 do interakcji, kontroli i zarządzania klastrami baz danych za pomocą systemu ClusterControl. ClusterControl CLI otwiera nowe drzwi dla automatyzacji klastra, gdzie można go łatwo zintegrować z istniejącymi narzędziami do automatyzacji wdrażania, takimi jak Ansible, Puppet, Chef itp. Narzędzie wiersza poleceń jest wywoływane przez wykonanie pliku binarnego o nazwie s9s dodanego domyślnie w instalacji ClusterControl.
Przyjrzyjmy się kilku przykładom tego potężnego narzędzia. W tym celu zobaczymy, jak wykonać wspomniane zadania audytu bezpieczeństwa za pomocą ClusterControl CLI.
Komunikacja
Możesz włączyć szyfrowanie SSL w klastrze za pomocą następującego polecenia:
$ s9s cluster --enable-ssl --cluster-id=ID
Gdzie ID to numer identyfikacyjny klastra:możesz monitorować postęp tego zadania (i pozostałych zadań), wyświetlając proces zadania.
$ s9s job --list
Dostęp do bazy danych
Możesz sprawdzić konfigurację bazy danych, aby zweryfikować dozwolony dostęp:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Gdzie ID to numer identyfikacyjny klastra, IP_ADDRESS i PORT to adres IP i port bazy danych.
Konta użytkowników
Możesz wyświetlić listę kont użytkowników znajdujących się w klastrze:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Gdzie ID to numer identyfikacyjny klastra.
Instalacja i konfiguracja
Możesz tworzyć nowe klastry, dodawać nowe węzły bazy danych, a nawet zmieniać istniejące konfiguracje w klastrze:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Gdzie IP_ADDRESS to adres IP Twojej bazy danych i musisz zastąpić DBUSER, DBPASSWORD i OSUSER odpowiednio dla danych logowania bazy danych i użytkownika systemu operacyjnego.
Kontrola i rejestrowanie
Możesz włączyć rejestrowanie kontrolne z wiersza poleceń za pomocą następującego polecenia:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Gdzie ID to numer identyfikacyjny klastra:wtedy możesz sprawdzić logi z informacjami o logowaniu kontrolnym.
Aktualizacje
Możesz tworzyć raporty, aby sprawdzić, czy musisz zaktualizować swoje bazy danych lub pakiety systemów operacyjnych.
$ s9s report --cluster-id=ID --type=upgrade --create
Gdzie ID to numer identyfikacyjny klastra:na podstawie tego raportu można zaplanować okna konserwacji w celu uruchomienia uaktualnień i można to również zrobić z poziomu ClusterControl.
Monitor zapytań
Możesz sprawdzić proces działający w Twoich węzłach i filtrować go według zapytania, źródła i nie tylko.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Monitorowanie
Tutaj masz różne opcje monitorowania swoich systemów. Możesz sprawdzić stan wszystkich klastrów, jeden z nich, a nawet sprawdzić alarmy w czasie rzeczywistym.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Raporty operacyjne
Możesz tworzyć raporty operacyjne i sprawdzać je z wiersza poleceń. Ten sam raport jest dostępny w interfejsie użytkownika ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
To tylko kilka podstawowych przykładów pokazujących, jakie czynności można wykonać za pomocą ClusterControl CLI. Więcej informacji o narzędziu można znaleźć w oficjalnej dokumentacji.
Wnioski
Zawsze istnieje ryzyko włamania, ale możesz wypełnić lukę w zabezpieczeniach swojego klastra PostgreSQL, sprawdzając powyższe punkty. Aby znacznie ułatwić to zadanie, możesz użyć interfejsu użytkownika ClusterControl lub nawet zautomatyzować kontrole za pomocą interfejsu ClusterControl CLI. Można go również zintegrować z narzędziami zewnętrznymi, takimi jak Ansible, Puppet i nie tylko.