Sicherheitsaudits sind in allen Unternehmen ein Muss, um Daten zu schützen und mögliche Sicherheitsverletzungen zu vermeiden, aber es ist auch eine zeitaufwändige Aufgabe, da Sie viele Dinge regelmäßig überprüfen müssen. Das Ergebnis ist, dass Unternehmen im Allgemeinen einer Sicherheitscheckliste folgen und alles so konfigurieren, dass sie diese abdeckt, aber sie haben keine Sicherheitsaudits. Sie können sagen:„Wenn alles gut funktioniert, lassen Sie es einfach so, wie es ist“. Nun, eigentlich können Sie nicht darauf vertrauen, dass die Sicherheitsrichtlinien, die Sie jetzt konfigurieren, in Zukunft nützlich sein werden und dass sich nichts ändern wird, um sie zu beeinflussen. Die Lösung dafür könnte darin bestehen, diese Sicherheitsüberprüfungen zu automatisieren oder eine Möglichkeit zu haben, dies regelmäßig auf benutzerfreundliche Weise durchzuführen.
In diesem Blog werden wir sehen, wie man verschiedene Sicherheitsaudits für PostgreSQL durchführt und sie mit ClusterControl automatisiert.
Was benötigen Sie, um ein Sicherheitsaudit für PostgreSQL durchzuführen?
Schauen wir uns einige der wichtigsten Dinge an, die zu Sicherheitszwecken in einer PostgreSQL-Datenbank geprüft werden müssen:
-
Kommunikation:Die Kommunikation in all Ihren Systemen muss verschlüsselt sein, und Sie müssen den Datenverkehr auf das beschränken, was kommt aus bekannten Quellen, um das Risiko eines unbefugten Zugriffs auf Ihre Daten zu verringern.
-
Datenbankzugriff:Sie müssen sowohl den physischen als auch den Fernzugriff auf Ihre Datenbanken einschränken. Der Fernzugriff kann eingeschränkt werden, indem für jeden Benutzer nur Verbindungen von bekannten Quellen zugelassen werden oder sogar SSH- oder VPN-Verbindungen verwendet werden.
-
Benutzerkonten:Es gibt viele Möglichkeiten, die Sicherheit Ihrer Benutzerkonten in PostgreSQL zu verbessern, wie z. B. das Entfernen inaktiver Benutzer , Gewährung nur notwendiger Berechtigungen usw.
-
Installation und Konfiguration:Es müssen einige Änderungen vorgenommen werden, um Ihre PostgreSQL-Installation zu sichern, z. B. nur das Notwendige zu installieren Pakete, Ändern der Standardanmeldeinformationen und -konfiguration usw.
-
Überwachung und Protokollierung:Protokollierungsanweisungen können Ihnen helfen, Sicherheitsprobleme zu erkennen oder zu vermeiden, wenn Sie sie rechtzeitig erkennen . Sie können die standardmäßige PostgreSQL-Protokollierungsfunktion verwenden, aber Sie können auch eine Erweiterung wie pgAudit verwenden, um eine detailliertere Protokollierung zu erhalten.
-
Upgrades:Halten Sie Ihr Betriebssystem und Ihre Datenbank so aktuell wie möglich, indem Sie Patches und Sicherheitsupgrades anwenden.
-
Abfrageüberwachung:Sie sollten den Datenverkehr überprüfen, um ungewöhnliche Abfragen oder DoS-Angriffe zu erkennen.
-
Überwachung:Um den Status Ihrer Systeme zu kennen, benötigen Sie ein gutes Überwachungssystem. Dies kann nützlich sein, um Sicherheitsprobleme zu finden oder sogar zu vermeiden.
Jetzt wissen wir, was zu überprüfen ist, schauen wir uns eine Option an, um diese Aufgaben zu automatisieren - ClusterControl.
Sicherheitsaudits für PostgreSQL mit ClusterControl
Für PostgreSQL-Sicherheitsaudits ist ClusterControl eine gute Option, da es ein Verwaltungs- und Überwachungssystem ist, das Ihnen hilft, Ihre Datenbanken über eine benutzerfreundliche Oberfläche bereitzustellen, zu verwalten, zu überwachen und zu skalieren. Es unterstützt die besten Open-Source-Datenbanktechnologien und Sie können viele der Datenbankaufgaben automatisieren, die Sie regelmäßig durchführen müssen, wie z. B. das Hinzufügen und Skalieren neuer Knoten, das Ausführen von Sicherungen und Wiederherstellungen und mehr.
Schauen wir uns an, wie Sie die zuvor erwähnten Sicherheitsprüfungen mit ClusterControl abdecken können.
Kommunikation
Im Sicherheitsbereich (ClusterControl -> Cluster auswählen -> Registerkarte Sicherheit) können Sie die SSL-Verschlüsselung aktivieren, um die Verbindungen zwischen den Clients und dem Server zu verschlüsseln.
Der Zugriff von ClusterControl auf die Nodes ist ebenfalls über passwortloses SSH mit einem Schlüsselpaar gesichert.
Datenbankzugriff
Sie können den Zugriff auf Ihre PostgreSQL-Datenbank einschränken, indem Sie die Konfigurationsdatei pg_hba.conf über die ClusterControl-Benutzeroberfläche ändern (ClusterControl -> Cluster auswählen -> Verwalten -> Konfigurationen). Auf diese Weise können Sie die folgenden Optionen angeben:
-
Type:Die am häufigsten verwendeten Optionen hier sind „local“ für einen Unix-Domain-Socket und „host“ für einen einfachen oder SSL-verschlüsselten TCP/IP-Socket, aber es gibt auch andere Optionen wie "hostssl" und mehr.
-
Datenbank:Es kann "all", "sameuser", "samerole", "replication", a Datenbankname oder eine durch Kommas getrennte Liste von Datenbanknamen.
-
Benutzer:Es kann "all" sein, ein Benutzername, ein Gruppenname mit vorangestelltem "+", oder eine durch Kommas getrennte Liste davon.
-
Adresse:Hostname oder eine IP-Adresse und eine CIDR-Maske.
-
Methode:Die hier am häufigsten verwendeten sind "trust", "reject", "md5", "ident" , und "peer", aber es gibt noch weitere Optionen wie "scram-sha-256" oder "ldap".
Beispiel:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Benutzerkonten
Sie können Ihre Datenbankbenutzer über die ClusterControl-Benutzeroberfläche verwalten (ClusterControl -> Cluster auswählen -> Verwalten -> Benutzerverwaltung). Sie können neue Benutzer erstellen oder vorhandene bearbeiten und löschen und ihnen die entsprechenden Berechtigungen zuweisen.
Installation und Konfiguration
Sie können einen neuen PostgreSQL-Cluster bereitstellen oder einen vorhandenen importieren. Wenn Ihr PostgreSQL-Cluster zu ClusterControl hinzugefügt wurde, können Sie die aktuelle Konfiguration verwalten (ClusterControl -> Cluster auswählen -> Verwalten -> Konfiguration) oder sogar neue Knoten zum Cluster hinzufügen.
Während der Bereitstellung können Sie die Datenbankkonfiguration wie Datenbankport oder Anmeldeinformationen ändern, und dann installiert ClusterControl nur die erforderlichen Pakete, um Ihren neuen Cluster bereitzustellen.
Prüfung und Protokollierung
Sie können die standardmäßige PostgreSQL-Protokollierung in der ClusterControl-Benutzeroberfläche überprüfen (ClusterControl -> Cluster auswählen -> Protokolle -> Systemprotokolle) oder sogar die pgAudit-Erweiterung von ClusterControl aktivieren und die Audit-Protokollierung an derselben Stelle überprüfen .
Upgrades
Bei kleineren Upgrades können Sie ClusterControl für diese Aufgabe verwenden. Sie können auf die Benutzeroberfläche zugreifen und das Upgrade ausführen (ClusterControl -> Cluster auswählen -> Verwalten -> Upgrades) oder den ClusterControl-Betriebsbericht „Paket-Upgrades“ verwenden, um die verfügbaren Pakete per E-Mail zu erhalten oder sie in der ClusterControl-Benutzeroberfläche zu überprüfen.
Abfragemonitor
Im Bereich Abfrageüberwachung finden Sie die häufigsten Abfragen, laufende Abfragen, Abfrageausreißer und Abfragestatistiken zur Überwachung Ihres Datenbankverkehrs.
Überwachung
ClusterControl ermöglicht es Ihnen, Ihre Server in Echtzeit mit einem vordefinierten Satz von Dashboards zu überwachen, um einige der häufigsten Metriken zu analysieren.
ClusterControl ermöglicht es Ihnen, die im Cluster verfügbaren Diagramme anzupassen, und Sie können die agentenbasierte Überwachung aktivieren, um detailliertere Dashboards zu generieren.
Sie können auch Benachrichtigungen erstellen, die Sie über Ereignisse in Ihrem Cluster informieren, oder sich in verschiedene Dienste wie PagerDuty oder Slack integrieren.
Betriebsberichte
Wenn Sie nicht auf die ClusterControl-Benutzeroberfläche zugreifen möchten, um den Status Ihrer Cluster zu überprüfen, können Sie Betriebsberichte erstellen oder planen.
Die Betriebsberichte geben Ihnen Informationen über Ihren Datenbankstatus, die Sie verwenden können, um Ihre Umgebung zu prüfen. Diese Berichte bestehen aus verschiedenen Prüfungen und behandeln verschiedene tägliche DBA-Aufgaben. Die Idee hinter ClusterControl Operational Reporting ist es, alle relevantesten Daten in einem einzigen Dokument zusammenzufassen, das schnell analysiert werden kann, um ein klares Verständnis des Status der Datenbanken und ihrer Prozesse zu erhalten.
Sie können Berichte wie „Täglicher Systembericht“, „Paket-Upgrade-Bericht“, „Schemaänderungsbericht“, „Sicherungen“ und „Verfügbarkeit“ planen und sie in mehr als einer E-Mail erhalten Adresse.
ClusterControl CLI zur Automatisierung von Sicherheitsaudits verwenden
ClusterControl CLI, auch bekannt als s9s, ist ein in ClusterControl Version 1.4.1 eingeführtes Befehlszeilentool zur Interaktion, Steuerung und Verwaltung von Datenbank-Clustern mithilfe des ClusterControl-Systems. Die ClusterControl-CLI öffnet eine neue Tür für die Cluster-Automatisierung, wo Sie sie einfach in vorhandene Bereitstellungsautomatisierungstools wie Ansible, Puppet, Chef usw. integrieren können. Das Befehlszeilentool wird durch Ausführen einer Binärdatei namens s9s aufgerufen, die standardmäßig in der ClusterControl-Installation hinzugefügt wird.
Sehen wir uns einige Beispiele dieses leistungsstarken Tools an. Dazu werden wir sehen, wie die erwähnten Sicherheitsüberprüfungsaufgaben mit der ClusterControl-CLI durchgeführt werden.
Kommunikation
Sie können die SSL-Verschlüsselung in Ihrem Cluster mit dem folgenden Befehl aktivieren:
$ s9s cluster --enable-ssl --cluster-id=ID
Wobei ID die Cluster-ID-Nummer ist:Sie können den Fortschritt dieser Aufgabe (und der restlichen Aufgaben) überwachen, indem Sie den Jobprozess auflisten.
$ s9s job --list
Datenbankzugriff
Sie können die Datenbankkonfiguration überprüfen, um den erlaubten Zugriff zu validieren:
$ 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'
...
Dabei ist ID die Cluster-ID-Nummer, IP_ADDRESS und PORT sind Ihre Datenbank-IP-Adresse und Ihr Port.
Benutzerkonten
Sie können die Benutzerkonten auflisten, die sich im Cluster befinden:
$ 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
Wobei ID die Cluster-ID-Nummer ist.
Installation und Konfiguration
Sie können neue Cluster erstellen, neue Datenbankknoten hinzufügen oder sogar die bestehenden Konfigurationen in Ihrem Cluster ändern:
$ 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
Wobei IP_ADDRESS Ihre Datenbank-IP-Adresse ist und Sie DBUSER, DBPASSWORD und OSUSER für Ihre Datenbankanmeldeinformationen bzw. den Betriebssystembenutzer ersetzen müssen.
Prüfung und Protokollierung
Sie können die Audit-Protokollierung über die Befehlszeile mit dem folgenden Befehl aktivieren:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Wobei ID die Cluster-ID-Nummer ist:Dann können Sie die Protokolle mit den Audit-Protokollierungsinformationen überprüfen.
Upgrades
Sie können Berichte erstellen, um zu sehen, ob Sie Ihre Datenbanken oder Betriebssystempakete aktualisieren müssen.
$ s9s report --cluster-id=ID --type=upgrade --create
Wobei ID die Cluster-ID-Nummer ist:Basierend auf diesem Bericht können Sie Wartungsfenster planen, um die Upgrades auszuführen, und dies kann auch von ClusterControl aus erfolgen.
Abfragemonitor
Sie können den Prozess überprüfen, der auf Ihren Knoten läuft, und sie nach Abfrage, Quelle und mehr filtern.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Überwachung
Von hier aus haben Sie verschiedene Möglichkeiten, Ihre Systeme zu überwachen. Sie können den Status für alle Cluster überprüfen, einen von ihnen überprüfen oder sogar die Alarme in Echtzeit überprüfen.
$ 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
...
Betriebsberichte
Sie können Betriebsberichte erstellen und sie von der Befehlszeile aus überprüfen. Derselbe Bericht ist in der ClusterControl-Benutzeroberfläche verfügbar.
$ s9s report --cluster-id=ID --type=default --create
Dies waren nur einige grundlegende Beispiele, um zu sehen, welche Dinge Sie mit der ClusterControl-CLI ausführen können. Weitere Informationen zum Tool finden Sie in der offiziellen Dokumentation.
Fazit
Es besteht immer die Gefahr, gehackt zu werden, aber Sie können die Sicherheitslücke auf Ihrem PostgreSQL-Cluster schließen, indem Sie die oben genannten Punkte überprüfen. Um diese Aufgabe erheblich zu vereinfachen, können Sie die ClusterControl-Benutzeroberfläche verwenden oder die Prüfungen sogar mit der ClusterControl-CLI automatisieren. Es kann auch in externe Tools wie Ansible, Puppet und mehr integriert werden.