PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Automatizzare gli audit di sicurezza per PostgreSQL

Gli audit di sicurezza sono un must in tutte le aziende per proteggere i dati ed evitare possibili violazioni della sicurezza, ma sono anche un'attività che richiede tempo poiché è necessario controllare molte cose periodicamente. Il risultato è che, in generale, le aziende seguono una checklist di sicurezza e configurano tutto per coprirla, ma non hanno audit di sicurezza. Potresti dire:"Se tutto funziona bene, mantienilo così com'è". Bene, in realtà, non puoi fidarti che le politiche di sicurezza che stai configurando ora saranno utili in futuro e che nulla cambierà per influenzarle. La soluzione potrebbe essere automatizzare questi controlli di sicurezza o avere un modo per farlo periodicamente in modo intuitivo.

In questo blog, vedremo come eseguire diversi Security Audit per PostgreSQL e automatizzarli utilizzando ClusterControl.

Di cosa hai bisogno per eseguire un audit di sicurezza su PostgreSQL?

Diamo un'occhiata ad alcune delle cose più importanti da controllare per motivi di sicurezza in un database PostgreSQL:

  • Comunicazioni:la comunicazione in tutti i tuoi sistemi deve essere crittografata e devi limitare il traffico a quello che arriva solo da fonti note per ridurre il rischio di accesso non autorizzato ai tuoi dati.

  • Accesso al database:è necessario limitare l'accesso fisico e remoto ai database. L'accesso remoto può essere limitato consentendo connessioni solo da origini note per ciascun utente o anche utilizzando connessioni SSH o VPN.

  • Account utente:ci sono molti modi per migliorare la sicurezza degli account utente in PostgreSQL, come rimuovere gli utenti inattivi , concedendo solo i privilegi necessari, ecc.

  • Installazione e configurazione:ci sono alcune modifiche da fare per proteggere l'installazione di PostgreSQL, come installare solo il necessario pacchetti, modifica delle credenziali e della configurazione predefinite, ecc.

  • Auditing e registrazione:le istruzioni di registrazione possono aiutarti a rilevare problemi di sicurezza o evitarli se li intervieni in tempo . Puoi utilizzare la funzione di registrazione standard di PostgreSQL, ma puoi anche utilizzare un'estensione come pgAudit per avere una registrazione più dettagliata.

  • Aggiornamenti:mantieni il tuo sistema operativo e database il più aggiornati possibile applicando patch e aggiornamenti di sicurezza.

  • Query Monitor:dovresti controllare il traffico per rilevare query anomale o attacchi DoS.

  • Monitoraggio:per conoscere lo stato dei tuoi sistemi, dovrai disporre di un buon sistema di monitoraggio. Questo potrebbe essere utile per trovare problemi di sicurezza o addirittura per evitarli.

Ora sappiamo cosa controllare, diamo un'occhiata a un'opzione per automatizzare queste attività:ClusterControl.

Controlli di sicurezza per PostgreSQL con ClusterControl

Per gli audit di sicurezza PostgreSQL, ClusterControl è una buona opzione in quanto è un sistema di gestione e monitoraggio che consente di distribuire, gestire, monitorare e ridimensionare i database da un'interfaccia intuitiva. Supporta le migliori tecnologie di database open source e puoi automatizzare molte delle attività del database che devi eseguire regolarmente, come l'aggiunta e il ridimensionamento di nuovi nodi, l'esecuzione di backup e ripristini e altro ancora.

Vediamo come coprire i controlli di sicurezza menzionati in precedenza utilizzando ClusterControl.

Comunicazioni

Nella sezione sicurezza (ClusterControl -> Seleziona Cluster -> scheda Sicurezza), puoi abilitare la crittografia SSL per crittografare le connessioni tra i client e il server.

 

Anche l'accesso da ClusterControl ai nodi è protetto utilizzando SSH senza password con una coppia di chiavi.

Accesso al database

Puoi limitare l'accesso al tuo database PostgreSQL modificando il file di configurazione pg_hba.conf dall'interfaccia utente di ClusterControl (ClusterControl -> Seleziona Cluster -> Gestisci -> Configurazioni). In questo modo puoi specificare le seguenti opzioni:

  • Tipo:le opzioni più utilizzate qui sono "local" per un socket di dominio Unix e "host" per un socket TCP/IP semplice o crittografato con SSL, ma ci sono altre opzioni come "hostssl" e altro.

  • Database:può essere "all", "sameuser", "samerole", "replication", un nome del database o un elenco di nomi di database separati da virgole.

  • Utente:può essere "tutto", un nome utente, un nome di gruppo preceduto da "+", o un elenco separato da virgole.

  • Indirizzo:nome host o un indirizzo IP e una maschera CIDR.

  • Metodo:i più usati qui sono "trust", "reject", "md5", "ident" e "peer", ma ci sono più opzioni come "scram-sha-256" o "ldap".

Esempio:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
  host  all             admindb         10.10.10.121/32         md5

Account utente

Puoi gestire gli utenti del database dall'interfaccia utente di ClusterControl (ClusterControl -> Seleziona cluster -> Gestisci -> Gestione utenti). Puoi creare nuovi utenti o modificare ed eliminare quelli esistenti e assegnare loro i privilegi corrispondenti.

Installazione e configurazione

Puoi distribuire un nuovo cluster PostgreSQL o importarne uno esistente. Con il tuo cluster PostgreSQL aggiunto in ClusterControl, puoi gestire la configurazione corrente (ClusterControl -> Seleziona cluster -> Gestisci -> Configurazione), o anche aggiungere nuovi nodi al cluster.

Durante la distribuzione, puoi modificare la configurazione del database come la porta del database o le credenziali, quindi ClusterControl installerà solo i pacchetti necessari per distribuire il tuo nuovo cluster.

Controllo e registrazione

Puoi controllare la registrazione PostgreSQL standard nell'interfaccia utente di ClusterControl (ClusterControl -> Seleziona cluster -> Registri -> Registri di sistema) o anche abilitare l'estensione pgAudit da ClusterControl e controllare la registrazione di audit nello stesso posto .

Aggiornamenti

In caso di aggiornamenti minori, è possibile utilizzare ClusterControl per questa attività. È possibile accedere all'interfaccia utente ed eseguire l'aggiornamento (ClusterControl -> Seleziona cluster -> Gestisci -> Aggiornamenti), oppure utilizzare il report operativo ClusterControl "Aggiornamenti pacchetti", per ricevere i pacchetti disponibili via e-mail o verificarli nell'interfaccia utente di ClusterControl.

Monitoraggio query

Nella sezione di monitoraggio delle query, puoi trovare le query principali, le query in esecuzione, i valori anomali delle query e le statistiche delle query per monitorare il traffico del database.

Monitoraggio

ClusterControl ti consente di monitorare i tuoi server in tempo reale con un set predefinito di dashboard per analizzare alcune delle metriche più comuni.

ClusterControl consente di personalizzare i grafici disponibili nel cluster e di abilitare il monitoraggio basato sugli agenti per generare dashboard più dettagliati.

Puoi anche creare avvisi, che ti informano di eventi nel tuo cluster, o integrarti con diversi servizi come PagerDuty o Slack.

Rapporti operativi

Se non vuoi accedere all'interfaccia utente di ClusterControl per verificare lo stato dei tuoi cluster, puoi creare o pianificare Report operativi.

I rapporti operativi forniscono informazioni sullo stato del database, che puoi utilizzare per controllare il tuo ambiente. Questi report consistono in diversi controlli e affrontano varie attività DBA quotidiane. L'idea alla base di ClusterControl Operational Reporting è quella di mettere tutti i dati più rilevanti in un unico documento che può essere rapidamente analizzato al fine di ottenere una chiara comprensione dello stato dei database e dei loro processi.

Puoi pianificare rapporti come "Rapporto di sistema giornaliero", "Rapporto di aggiornamento del pacchetto", "Rapporto di modifica dello schema", "Backup" e "Disponibilità" e puoi riceverli in più di un'e-mail indirizzo.

Utilizzo della CLI ClusterControl per l'automazione degli audit di sicurezza

ClusterControl CLI, noto anche come s9s, è uno strumento da riga di comando introdotto in ClusterControl versione 1.4.1 per interagire, controllare e gestire i cluster di database utilizzando il sistema ClusterControl. ClusterControl CLI apre una nuova porta per l'automazione del cluster in cui è possibile integrarla facilmente con gli strumenti di automazione della distribuzione esistenti come Ansible, Puppet, Chef, ecc. Lo strumento della riga di comando viene richiamato eseguendo un binario chiamato s9s aggiunto per impostazione predefinita nell'installazione di ClusterControl.

Diamo un'occhiata ad alcuni esempi di questo potente strumento. Per questo, vedremo come eseguire le attività di Security Audit menzionate utilizzando ClusterControl CLI.

Comunicazioni

Puoi abilitare la crittografia SSL nel tuo cluster utilizzando il seguente comando:

$ s9s cluster --enable-ssl --cluster-id=ID

Dove ID è il numero ID del cluster:puoi monitorare lo stato di avanzamento di questa attività (e del resto delle attività) elencando il processo di lavoro.

$ s9s job --list

Accesso al database

Puoi controllare la configurazione del database per convalidare l'accesso consentito:

$ 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'
...

Dove ID è il numero ID del cluster, IP_ADDRESS e PORT sono l'indirizzo IP e la porta del database.

Account utente

Puoi elencare gli account utente che sono nel 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

Dove ID è il numero ID del cluster.

Installazione e configurazione

Puoi creare nuovi cluster, aggiungere nuovi nodi di database o persino modificare le configurazioni esistenti nel tuo 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

Dove IP_ADDRESS è l'indirizzo IP del database e devi sostituire DBUSER, DBPASSWORD e OSUSER rispettivamente per le credenziali del database e l'utente del sistema operativo.

Controllo e registrazione

Puoi abilitare la registrazione di controllo dalla riga di comando usando il seguente comando:

$ s9s cluster --setup-audit-logging --cluster-id=ID

Dove ID è il numero ID del cluster:quindi, puoi controllare i log con le informazioni di registrazione dell'audit.

Aggiornamenti

Puoi creare rapporti per vedere se hai bisogno di aggiornare i tuoi database o pacchetti di sistemi operativi.

$ s9s report --cluster-id=ID --type=upgrade --create

Dove ID è il numero ID del cluster:in base a questo report, puoi pianificare le finestre di manutenzione per eseguire gli aggiornamenti, e può essere fatto anche da ClusterControl.

Monitoraggio query

Puoi controllare il processo in esecuzione sui tuoi nodi e filtrarli in base alla query, all'origine e altro.

$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'


$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'

Monitoraggio

Hai diverse opzioni per monitorare i tuoi sistemi da qui. Puoi controllare lo stato di tutti i cluster, controllarne uno o persino controllare gli allarmi in tempo reale.

$  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
...

Rapporti operativi

Puoi creare rapporti operativi e controllarli dalla riga di comando. Lo stesso report è disponibile nell'interfaccia utente di ClusterControl.

$ s9s report --cluster-id=ID --type=default --create

Questi erano solo alcuni esempi di base per vedere il tipo di cose che puoi eseguire usando ClusterControl CLI. Per ulteriori informazioni sullo strumento, puoi fare riferimento alla documentazione ufficiale.

Conclusione

C'è sempre il rischio di essere violato, ma puoi colmare il divario di vulnerabilità sul tuo cluster PostgreSQL controllando i punti sopra menzionati. Per semplificare notevolmente questo compito, è possibile utilizzare l'interfaccia utente di ClusterControl o addirittura automatizzare i controlli con ClusterControl CLI. Può anche essere integrato con strumenti esterni come Ansible, Puppet e altri.