DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Costruire una Solida Fondazione di Sicurezza PostgreSQL con l’Autenticazione

Costruire una Solida Fondazione di Sicurezza PostgreSQL con l’Autenticazione

autenticazione postgresql

PostgreSQL è un potente sistema di gestione di database relazionali open-source noto per la sua affidabilità, robustezza delle funzionalità e performance. Organizzazioni di tutte le dimensioni lo utilizzano per molteplici applicazioni, dalle piccole applicazioni web ai grandi sistemi aziendali. Un database robusto può comunque essere vulnerabile se l’autenticazione è debole. PostgreSQL fornisce un set completo di metodi di autenticazione per controllare l’accesso al database e proteggere i tuoi dati sensibili.

Metodi di Autenticazione PostgreSQL

Il database supporta un’ampia gamma di metodi di autenticazione, ciascuno con i propri punti di forza e casi d’uso. Questi metodi sono configurati nel file `pg_hba.conf`, che determina come i client possono connettersi al server del database. Il file `pg_hba.conf` ha regole che possono essere utilizzate per specificare diversi metodi di autenticazione per database, utenti e tipi di connessione.

I principali metodi di autenticazione in PostgreSQL sono:

  1. Trust – Questo metodo consente a chiunque di connettersi senza richiedere una password. È raccomandato solo per ambienti di sviluppo e testing locali dove la sicurezza non è una preoccupazione.
  2. Password – Questo metodo richiede all’utente di fornire una password per connettersi. Per impostazione predefinita, la password è trasmessa in chiaro, quindi è importante utilizzare la crittografia SSL/TLS per proteggere la connessione.
  3. MD5 – Simile al metodo password, ma la password è hashata utilizzando l’algoritmo MD5 prima di essere inviata sulla rete. Sebbene più sicuro del testo in chiaro, l’MD5 non è considerato un algoritmo di hashing forte dagli standard moderni.
  4. SCRAM-SHA-256 – Questo è il metodo di autenticazione basato su password più sicuro in PostgreSQL. Utilizza il meccanismo di autenticazione SCRAM con la funzione di hashing SHA-256 per fornire una forte sicurezza delle password.
  5. Ident – Questo metodo utilizza il servizio ident del sistema operativo per ottenere il nome utente del sistema operativo del client, che viene poi utilizzato per l’autenticazione. È utile per i sistemi dove gli utenti del database riflettono gli utenti del sistema operativo.
  6. PostgreSQL utilizza metodi come GSSAPI, SSPI, Kerberos, LDAP, RADIUS, Certificate e PAM per connettersi con vari sistemi di autenticazione. Questi metodi consentono il single sign-on e la gestione degli utenti.

Ogni metodo di autenticazione ha le proprie opzioni e requisiti di configurazione. Il file `pg_hba.conf` consente di combinare questi metodi in base alle specifiche esigenze di sicurezza e usabilità.

Implementazione dell’Autenticazione con Password

Per la maggior parte delle applicazioni, l’autenticazione basata su password è la scelta preferita e molti client e connettori PostgreSQL la supportano. Fornisce un buon equilibrio tra sicurezza e usabilità. Per abilitare l’autenticazione con password, è necessario:

  • Creare un utente con una password:

CREATE USER myuser WITH PASSWORD 'secret123';
  • Configurare `pg_hba.conf` per utilizzare il metodo di autenticazione `scram-sha-256` per questo utente:

# TYPE DATABASE USER ADDRESS METHOD
host mydb  myuser 0.0.0.0/0 scram-sha-256

Questa voce consente all’utente “myuser” di accedere al database “mydb” da qualsiasi indirizzo IP utilizzando SCRAM-SHA-256 per l’autenticazione.

  • Riavviare il server PostgreSQL per rendere effettive le modifiche.

Ora, quando “myuser” tenta di connettersi a “mydb”, verrà richiesta la password. Il server verificherà la password utilizzando il metodo SCRAM-SHA-256.

È cruciale utilizzare password forti e uniche e cambiarle regolarmente. PostgreSQL fornisce il comando `ALTER USER` per modificare la password di un utente:

ALTER USER myuser WITH PASSWORD 'new_secret';

Evita di utilizzare password facilmente indovinabili o comuni e considera di implementare una politica per le password che richieda una lunghezza minima, complessità e scadenza regolare.

Protezione delle Connessioni con SSL/TLS

L’autenticazione con password su una connessione non criptata è vulnerabile agli attacchi di intercettazione. Per stare sicuri, è raccomandato utilizzare SSL/TLS per proteggere la comunicazione tra client e server.

Per abilitare SSL in PostgreSQL:

  • Genera un certificato e una chiave del server utilizzando uno strumento come OpenSSL. Per i test, utilizza un certificato autofirmato. Per la produzione, utilizza un certificato firmato da un’Autorità di Certificazione (CA) fidata.
  • Posiziona i file del certificato e della chiave in una posizione sicura sul server e imposta i permessi di file appropriati.
  • Modifica il file `postgresql.conf` per abilitare SSL e puntare ai file del certificato e della chiave:

ssl = on
ssl_cert_file = '/path/to/server.crt'
ssl_key_file = '/path/to/server.key'
  • Riavviare il server PostgreSQL per rendere effettive le modifiche.
  • Configurare `pg_hba.conf` per richiedere SSL per le connessioni desiderate:

# TYPE DATABASE USER ADDRESS METHOD
hostssl mydb  myuser 0.0.0.0/0 scram-sha-256

Il tipo `hostssl` è simile a `host`, ma richiede una connessione SSL.

  • Configura i tuoi client PostgreSQL per utilizzare SSL. Ad esempio, con il client della riga di comando `psql`:

psql "dbname=mydb user=myuser sslmode=require"

Il parametro `sslmode` può essere `require` (usa sempre SSL), `verify-ca` (come require, ma verifica anche il certificato del server) o `verify-full` (come verify-ca, ma verifica anche che il nome host del server corrisponda al certificato).

Quando SSL è abilitato, cifra tutti i dati trasmessi tra client e server, comprese le password e i risultati delle query. Questo riduce notevolmente il rischio che dati sensibili vengano intercettati sulla rete.

Implementazione del Controllo di Accesso Basato sui Ruoli

Oltre all’autenticazione degli utenti, PostgreSQL consente di autorizzare le loro azioni utilizzando il controllo di accesso basato sui ruoli (RBAC). Con RBAC, si definiscono ruoli che rappresentano diversi tipi di utenti o livelli di permessi, e si concedono poi privilegi a quei ruoli.

Ad esempio, potresti avere ruoli come “readonly”, “readwrite” e “admin”:

CREATE ROLE readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
CREATE ROLE readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO readwrite;
CREATE ROLE admin;
GRANT ALL PRIVILEGES ON DATABASE mydb TO admin;

È possibile poi assegnare utenti a questi ruoli:

CREATE USER user1 WITH PASSWORD 'secret1';
GRANT readonly TO user1;
CREATE USER user2 WITH PASSWORD 'secret2';
GRANT readwrite TO user2;
CREATE USER dba WITH PASSWORD 'secret_admin';
GRANT admin TO dba;

Gli utenti erediteranno i privilegi dei ruoli che vengono loro concessi. Questo rende facile gestire i permessi per un gran numero di utenti.

RBAC consente di implementare il principio del minor privilegio, dove agli utenti sono concessi solo i permessi minimi necessari per svolgere i loro compiti. Ciò riduce il rischio di uso accidentale o intenzionale dei privilegi.

Tecniche Avanzate di Autenticazione

L’autenticazione con password è solitamente sufficiente per la maggior parte delle applicazioni, ma a volte potrebbe essere necessario utilizzare metodi più avanzati o personalizzati per l’autenticazione. PostgreSQL fornisce diverse funzionalità per supportare questo:

  1. Hook di Autenticazione – PostgreSQL consente di scrivere plugin di autenticazione personalizzati in C per gestire le richieste di autenticazione. Questo permette di integrare sistemi di autenticazione personalizzati o implementare la propria logica di autenticazione.
  2. Autenticazione con Certificato – PostgreSQL supporta l’autenticazione con certificato del client, dove gli utenti si autenticano utilizzando certificati SSL/TLS piuttosto che password. Questo può essere utile per la comunicazione tra macchine o per sistemi con requisiti di sicurezza elevati.
  3. Per aggiungere un ulteriore livello di sicurezza in PostgreSQL, è possibile utilizzare l’autenticazione a due fattori (2FA). Questo significa combinare la password con un altro fattore come una password monouso (OTP) o un token hardware. È possibile farlo utilizzando sistemi di autenticazione esterni come RADIUS o plugin di autenticazione personalizzati.
  4. Single Sign-On (SSO) – PostgreSQL può integrarsi con sistemi SSO esterni come Kerberos, GSSAPI o SAML per fornire autenticazione centralizzata e gestione degli utenti. Questo consente agli utenti di autenticarsi utilizzando le proprie identità aziendali o sociali esistenti.

I metodi di autenticazione avanzata richiedono un setup maggiore rispetto alle semplici password, ma offrono una migliore sicurezza e esperienza utente per le situazioni specifiche.

Migliori Pratiche di Autenticazione

Per garantire la sicurezza del tuo database PostgreSQL, segui queste migliori pratiche di autenticazione:

  • Utilizza metodi di autenticazione forti e sicuri come SCRAM-SHA-256. Evita i metodi trust e password a meno che non siano necessari.
  • Abilita SSL/TLS e richiedilo per tutte le connessioni remote. Utilizza impostazioni di crittografia forti e mantieni aggiornati i tuoi certificati.
  • Implementa RBAC per applicare il principio del minor privilegio. Concedi agli utenti solo i permessi minimi necessari.
  • Regolarmente audita il tuo `pg_hba.conf` e i permessi di utenti/ruoli per assicurarti che siano in linea con le tue politiche di sicurezza.
  • Monitora i tentativi di login e l’attività del database per segni di accesso non autorizzato o comportamento sospetto.
  • Mantieni la tua versione di PostgreSQL e tutte le estensioni aggiornate per ottenere le ultime patch di sicurezza e funzionalità.
  • Utilizza password forti e uniche e considera di implementare una politica per le password. Evita di inserire hardcoded le password nel tuo codice applicativo.
  • Considera di utilizzare tecniche avanzate di autenticazione come 2FA o SSO per ambienti ad alta sicurezza.
  • Educa i tuoi utenti sulle migliori pratiche di sicurezza, come scegliere password forti e non condividere le proprie credenziali.
  • Abbi un piano di risposta agli incidenti per gestire potenziali violazioni della sicurezza o perdite di dati.

Seguendo queste migliori pratiche e sfruttando le capacità di autenticazione e autorizzazione di PostgreSQL, si può costruire una solida fondazione di sicurezza per il proprio database e le proprie applicazioni.

Conclusione

PostgreSQL ha funzionalità di sicurezza potenti per proteggere i tuoi dati e gestire chi può accedere al tuo database. Imparando e configurando correttamente queste funzionalità, puoi assicurarti che solo gli utenti approvati possano accedere al tuo database. Inoltre, puoi garantire che gli utenti possano eseguire solo le azioni che sono autorizzati a fare.

Tuttavia, l’autenticazione è solo un aspetto della sicurezza del database. È importante progettare correttamente il database. Devi anche utilizzare codice sicuro nelle tue applicazioni. Inoltre, è cruciale seguire le migliori pratiche per il backup, il recupero e il monitoraggio.

Man mano che crescono le tue applicazioni PostgreSQL, controlla e aggiorna regolarmente le impostazioni di sicurezza per il giusto equilibrio tra sicurezza e usabilità. Tieniti aggiornato sulle funzionalità di sicurezza di PostgreSQL e sulle migliori pratiche. Adatta le strategie di autenticazione e autorizzazione secondo necessità.

Per mantenere i dati degli utenti al sicuro e proteggere la reputazione della tua azienda, utilizza misure di sicurezza robuste e gestisci la sicurezza in modo coerente. Questo aiuterà anche a garantire che le tue applicazioni siano conformi alle normative. PostgreSQL fornisce gli strumenti: sta a te usarli in modo efficace.

Successivo

Migliori Pratiche per Mantenere l’Integrità dei Dati in PostgreSQL

Migliori Pratiche per Mantenere l’Integrità dei Dati in PostgreSQL

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]