Les audits de sécurité sont indispensables dans toutes les entreprises pour protéger les données et éviter d'éventuelles failles de sécurité, mais c'est aussi une tâche qui prend du temps car vous devez vérifier beaucoup de choses périodiquement. Le résultat est qu'en général, les entreprises suivent une liste de contrôle de sécurité et configurent tout pour la couvrir, mais elles n'ont pas d'audits de sécurité. Vous pouvez dire :« Si tout fonctionne bien, gardez-le tel quel ». Eh bien, en fait, vous ne pouvez pas croire que les politiques de sécurité que vous configurez maintenant seront utiles à l'avenir, et que rien ne changera pour les affecter. La solution pourrait être d'automatiser ces audits de sécurité ou d'avoir un moyen de le faire périodiquement de manière conviviale.
Dans ce blog, nous verrons comment effectuer différents audits de sécurité pour PostgreSQL et les automatiser à l'aide de ClusterControl.
De quoi avez-vous besoin pour faire un audit de sécurité sur PostgreSQL ?
Regardons quelques-uns des éléments les plus importants à auditer à des fins de sécurité dans une base de données PostgreSQL :
-
Communications :la communication dans tous vos systèmes doit être chiffrée et vous devez limiter le trafic à celui qui vient uniquement provenant de sources connues pour réduire le risque d'accès non autorisé à vos données.
-
Accès à la base de données :vous devez limiter l'accès physique et à distance à vos bases de données. L'accès à distance peut être limité en n'autorisant que les connexions à partir de sources connues pour chaque utilisateur, ou même en utilisant des connexions SSH ou VPN.
-
Comptes d'utilisateurs :il existe de nombreuses façons d'améliorer la sécurité de vos comptes d'utilisateurs dans PostgreSQL, comme la suppression des utilisateurs inactifs , n'accordant que les privilèges nécessaires, etc.
-
Installation et configuration :il y a quelques changements à faire pour sécuriser votre installation PostgreSQL, comme installer uniquement le nécessaire packages, modification des informations d'identification et de la configuration par défaut, etc.
-
Audit et journalisation :les instructions de journalisation peuvent vous aider à détecter les problèmes de sécurité ou à les éviter si vous les détectez à temps . Vous pouvez utiliser la fonction de journalisation standard de PostgreSQL, mais vous pouvez également utiliser une extension comme pgAudit pour avoir une journalisation plus détaillée.
-
Mises à niveau :gardez votre système d'exploitation et votre base de données aussi à jour que possible en appliquant des correctifs et des mises à niveau de sécurité.
-
Moniteur de requête :vous devez vérifier le trafic pour détecter les requêtes anormales ou les attaques DoS.
-
Surveillance :pour connaître l'état de vos systèmes, vous devez disposer d'un bon système de surveillance. Cela peut être utile pour trouver des problèmes de sécurité ou même pour les éviter.
Maintenant que nous savons ce qu'il faut vérifier, regardons une option pour automatiser ces tâches - ClusterControl.
Audits de sécurité pour PostgreSQL avec ClusterControl
Pour les audits de sécurité PostgreSQL, ClusterControl est une bonne option car il s'agit d'un système de gestion et de surveillance qui vous aide à déployer, gérer, surveiller et faire évoluer vos bases de données à partir d'une interface conviviale. Il prend en charge les meilleures technologies de base de données open source et vous pouvez automatiser de nombreuses tâches de base de données que vous devez effectuer régulièrement, telles que l'ajout et la mise à l'échelle de nouveaux nœuds, l'exécution de sauvegardes et de restaurations, etc.
Voyons comment vous pouvez couvrir les contrôles de sécurité mentionnés précédemment à l'aide de ClusterControl.
Communication
Dans la section de sécurité (ClusterControl -> Sélectionner le cluster -> onglet Sécurité), vous pouvez activer le chiffrement SSL pour chiffrer les connexions entre les clients et le serveur.
L'accès de ClusterControl aux nœuds est également sécurisé à l'aide de SSH sans mot de passe avec une paire de clés.
Accès à la base de données
Vous pouvez restreindre l'accès à votre base de données PostgreSQL en modifiant le fichier de configuration pg_hba.conf à partir de l'interface utilisateur de ClusterControl (ClusterControl -> Select Cluster -> Manage -> Configurations). De cette manière, vous pouvez spécifier les options suivantes :
-
Type :les options les plus utilisées ici sont "local" pour un socket de domaine Unix et "host" pour un socket TCP/IP simple ou crypté SSL, mais il existe d'autres options comme "hostssl", et plus encore.
-
Base de données :il peut s'agir de "all", "sameuser", "samerole", "replication", a nom de la base de données ou une liste de noms de bases de données séparés par des virgules.
-
Utilisateur :il peut s'agir de "tous", d'un nom d'utilisateur, d'un nom de groupe préfixé par "+", ou une liste séparée par des virgules.
-
Adresse :nom d'hôte, ou une adresse IP et un masque CIDR.
-
Méthode :les plus utilisées ici sont "trust", "reject", "md5", "ident" , et "peer", mais il y a plus d'options comme "scram-sha-256" ou "ldap".
Exemple :
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Comptes d'utilisateurs
Vous pouvez gérer les utilisateurs de votre base de données à partir de l'interface utilisateur de ClusterControl (ClusterControl -> Sélectionner le cluster -> Gérer -> Gestion des utilisateurs). Vous pouvez créer de nouveaux utilisateurs, ou modifier et supprimer des utilisateurs existants, et leur attribuer les privilèges correspondants.
Installation et configuration
Vous pouvez déployer un nouveau cluster PostgreSQL ou en importer un existant. Avec votre cluster PostgreSQL ajouté dans ClusterControl, vous pouvez gérer la configuration actuelle (ClusterControl -> Sélectionner le cluster -> Gérer -> Configuration), ou même ajouter de nouveaux nœuds au cluster.
Pendant le déploiement, vous pouvez modifier la configuration de la base de données comme le port de la base de données ou les informations d'identification, puis ClusterControl n'installera que les packages nécessaires pour déployer votre nouveau cluster.
Audit et journalisation
Vous pouvez vérifier la journalisation PostgreSQL standard dans l'interface utilisateur de ClusterControl (ClusterControl -> Sélectionner un cluster -> Journaux -> Journaux système) ou même activer l'extension pgAudit de ClusterControl et vérifier la journalisation d'audit au même endroit .
Mises à niveau
Dans le cas de mises à niveau mineures, vous pouvez utiliser ClusterControl pour cette tâche. Vous pouvez accéder à l'interface utilisateur et exécuter la mise à niveau (ClusterControl -> Sélectionner le cluster -> Gérer -> Mises à niveau), ou utiliser le rapport opérationnel "Mises à niveau des packages" de ClusterControl, pour recevoir les packages disponibles par e-mail ou les vérifier dans l'interface utilisateur de ClusterControl.
Moniteur de requête
Dans la section du moniteur de requêtes, vous pouvez trouver les principales requêtes, les requêtes en cours d'exécution, les valeurs aberrantes des requêtes et les statistiques des requêtes pour surveiller le trafic de votre base de données.
Surveillance
ClusterControl vous permet de surveiller vos serveurs en temps réel avec un ensemble prédéfini de tableaux de bord pour analyser certaines des métriques les plus courantes.
ClusterControl vous permet de personnaliser les graphiques disponibles dans le cluster, et vous pouvez activer la surveillance basée sur l'agent pour générer des tableaux de bord plus détaillés.
Vous pouvez également créer des alertes, qui vous informent des événements dans votre cluster, ou s'intégrer à différents services tels que PagerDuty ou Slack.
Rapports opérationnels
Si vous ne souhaitez pas accéder à l'interface utilisateur de ClusterControl pour vérifier l'état de vos clusters, vous pouvez créer ou planifier des rapports opérationnels.
Les rapports opérationnels vous donnent des informations sur l'état de votre base de données, que vous pouvez utiliser pour auditer votre environnement. Ces rapports consistent en différentes vérifications et traitent de diverses tâches DBA quotidiennes. L'idée derrière ClusterControl Operational Reporting est de mettre toutes les données les plus pertinentes dans un seul document qui peut être rapidement analysé afin d'avoir une compréhension claire de l'état des bases de données et de leurs processus.
Vous pouvez programmer des rapports tels que "Daily System Report", "Package Upgrade Report", "Schema Change Report", "Backups" et "Disponibilité", et vous pouvez les recevoir dans plusieurs e-mails adresse.
Utilisation de la CLI de ClusterControl pour automatiser les audits de sécurité
ClusterControl CLI, également connu sous le nom de s9s, est un outil de ligne de commande introduit dans ClusterControl version 1.4.1 pour interagir, contrôler et gérer les clusters de bases de données à l'aide du système ClusterControl. ClusterControl CLI ouvre une nouvelle porte pour l'automatisation de cluster où vous pouvez facilement l'intégrer aux outils d'automatisation de déploiement existants comme Ansible, Puppet, Chef, etc. L'outil de ligne de commande est appelé en exécutant un binaire appelé s9s ajouté par défaut dans l'installation de ClusterControl.
Regardons quelques exemples de cet outil puissant. Pour cela, nous verrons comment effectuer les tâches d'audit de sécurité mentionnées à l'aide de la CLI ClusterControl.
Communication
Vous pouvez activer le chiffrement SSL dans votre cluster à l'aide de la commande suivante :
$ s9s cluster --enable-ssl --cluster-id=ID
Où ID est le numéro d'identification du cluster :vous pouvez surveiller la progression de cette tâche (et du reste des tâches) en répertoriant le processus de travail.
$ s9s job --list
Accès à la base de données
Vous pouvez vérifier la configuration de la base de données pour valider l'accès autorisé :
$ 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'
...
Où ID est le numéro d'identification du cluster, IP_ADDRESS et PORT sont l'adresse IP et le port de votre base de données.
Comptes d'utilisateurs
Vous pouvez répertorier les comptes d'utilisateurs qui se trouvent dans le cluster :
$ 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
Où ID est le numéro d'identification du cluster.
Installation et configuration
Vous pouvez créer de nouveaux clusters, ajouter de nouveaux nœuds de base de données ou même modifier les configurations existantes dans votre cluster :
$ 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
Où IP_ADDRESS est l'adresse IP de votre base de données, et vous devez remplacer DBUSER, DBPASSWORD et OSUSER pour vos identifiants de base de données et l'utilisateur du système d'exploitation respectivement.
Audit et journalisation
Vous pouvez activer la journalisation d'audit à partir de la ligne de commande à l'aide de la commande suivante :
$ s9s cluster --setup-audit-logging --cluster-id=ID
Où ID est le numéro d'identification du cluster :vous pouvez alors vérifier les journaux avec les informations de journalisation d'audit.
Mises à niveau
Vous pouvez créer des rapports pour voir si vous devez mettre à niveau vos bases de données ou vos packages de systèmes d'exploitation.
$ s9s report --cluster-id=ID --type=upgrade --create
Où ID est le numéro d'identification du cluster :sur la base de ce rapport, vous pouvez planifier des fenêtres de maintenance pour exécuter les mises à niveau, et cela peut également être fait à partir de ClusterControl.
Moniteur de requête
Vous pouvez vérifier le processus en cours d'exécution sur vos nœuds et les filtrer par requête, source, etc.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Surveillance
Vous avez différentes options pour surveiller vos systèmes à partir d'ici. Vous pouvez vérifier l'état de tous les clusters, vérifier l'un d'entre eux ou même vérifier les alarmes en temps réel.
$ 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
...
Rapports d'opération
Vous pouvez créer des rapports opérationnels et les vérifier à partir de la ligne de commande. Le même rapport est disponible dans l'interface utilisateur de ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Ce ne sont que quelques exemples de base pour voir le genre de choses que vous pouvez effectuer à l'aide de la CLI de ClusterControl. Pour plus d'informations sur l'outil, vous pouvez vous référer à la documentation officielle.
Conclusion
Il y a toujours un risque d'être piraté, mais vous pouvez combler l'écart de vulnérabilité sur votre cluster PostgreSQL en vérifiant les points mentionnés ci-dessus. Pour rendre cette tâche beaucoup plus facile, vous pouvez utiliser l'interface utilisateur de ClusterControl ou même automatiser les vérifications avec la CLI de ClusterControl. Il peut également être intégré à des outils externes tels qu'Ansible, Puppet, etc.