PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Automatyzacja audytów bezpieczeństwa dla PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsze narzędzia do tworzenia kopii zapasowych dla PostgreSQL

  2. Symbol wieloznaczny PostgreSQL LIKE dla dowolnej listy słów

  3. Opcje przełączania awaryjnego klastra pełnej bazy danych w wielu chmurach dla PostgreSQL

  4. Najlepsze materiały szkoleniowe i szkoleniowe dotyczące PostgreSQL

  5. Jak clock_timestamp() działa w PostgreSQL