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

ABAC in PostgreSQL

ABAC in PostgreSQL

abac in postgresql

Proteggere dati sensibili nei database PostgreSQL richiede controllo granulare degli accessi. ABAC è un metodo per impostare e applicare regole di accesso. Queste regole si basano su attributi di utenti, risorse e ambienti. In questo articolo, discuteremo come utilizzare ABAC in PostgreSQL per controllare l’accesso ai Suoi dati con esempi.

Comprendere ABAC

ABAC è un modello di controllo degli accessi che determina i diritti di accesso basati su attributi. Gli utenti possono collegare questi tratti a titoli di lavoro, squadre, risorse come dati, registri, e ambienti come tempo e luogo. ABAC offre un modo flessibile e dinamico per impostare le politiche di accesso. Ciò consente un controllo più dettagliato rispetto ai tradizionali modelli basati sui ruoli.

In PostgreSQL, è possibile utilizzare diversi metodi come la sicurezza a livello di riga e le etichette di sicurezza per implementare ABAC. Esploriamo ciascuna di queste tecniche e vediamo come applicarle per far rispettare ABAC nel Suo database PostgreSQL.

Sicurezza a Livello di Riga

La sicurezza a livello di riga in PostgreSQL consente di controllare l’accesso a specifiche righe in una tabella basandosi sugli attributi dell’utente. Le politiche RLS sono regole scritte in SQL che gli utenti possono applicare a determinate tabelle o a tutte le tabelle in un database.

Ecco come abilitare RLS e creare una politica che limiti l’accesso alle righe in base all’attributo del dipartimento di un utente.

CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT,
department TEXT,
salary NUMERIC
);
ALTER TABLE employees ENABLE ROW LEVEL SECURITY;
CREATE POLICY department_access ON employees
USING (department = current_setting('app.current_user_department'));

In questo esempio, creiamo una tabella `employees` e abilitiamo RLS su di essa. La clausola `USING` definisce la politica `department_access`, che specifica la condizione per accedere alle righe.

La politica controlla se la colonna del dipartimento di ciascuna riga corrisponde all’attributo del dipartimento corrente dell’utente. L’applicazione memorizza l’attributo del dipartimento corrente dell’utente nella impostazione app.current_user_department.

Per impostare l’attributo del dipartimento dell’utente, si può utilizzare la funzione `set_config`:

SELECT set_config('app.current_user_department', 'HR', false);

Questa politica consente agli utenti di visualizzare solo le righe dei loro dipartimenti, garantendo un controllo rigoroso degli accessi basato sui loro attributi.

Etichette di Sicurezza

Le etichette di sicurezza forniscono un altro modo per implementare ABAC in PostgreSQL. Gli oggetti del database assegnano coppie chiave-valore conosciute come etichette. Esse categorizzano tabelle o righe basate su attributi di sicurezza. È possibile quindi definire politiche di accesso in base a queste etichette.

Ecco un esempio di come creare etichette di sicurezza e definire una politica di accesso utilizzandole:

CREATE EXTENSION sepgsql;
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
classification TEXT
);
SECURITY LABEL FOR selinux ON TABLE documents IS 'system_u:object_r:sepgsql_table_t:s0';
SECURITY LABEL FOR selinux ON COLUMN documents.classification IS 'system_u:object_r:sepgsql_column_t:s0';
CREATE POLICY document_access ON documents
USING (sepgsql_has_perm(current_user, classification, 'read') = 't');

In questo esempio, creiamo una tabella denominata `documents`. Assegniamo etichette di sicurezza sia alla tabella che alla colonna `classification`. Lo facciamo utilizzando il comando `SECURITY LABEL`. Le etichette seguono il formato SELinux e categorizzano la tabella e la colonna basate su attributi di sicurezza.

Successivamente, definiamo una politica di accesso `document_access` utilizzando la funzione `sepgsql_has_perm`. Questa funzione verifica se l’utente ha il permesso di leggere l’etichetta di classificazione di ciascuna riga. Solo le righe per le quali la funzione restituisce `true` (`’t’`) sono accessibili all’utente.

Espressioni di Politica

Le espressioni di politica consentono di definire regole di controllo degli accessi complesse basate su attributi e condizioni. Esse forniscono un modo flessibile per combinare più attributi e logiche per determinare i diritti di accesso.

Ecco un esempio di utilizzo delle espressioni di politica per implementare ABAC:

CREATE TABLE sales (
id SERIAL PRIMARY KEY,
product TEXT,
region TEXT,
amount NUMERIC
);
CREATE POLICY regional_sales ON sales
USING (
(region = current_setting('app.current_user_region') AND amount = 10000) OR
(current_setting('app.current_user_role') = 'manager')
);

In questo esempio, abbiamo una tabella `sales` che memorizza i dati di vendita, inclusi prodotto, regione e importo. La politica `regional_sales` definisce l’utilizzo di un’espressione di politica che combina più condizioni.

La politica concede l’accesso ai dati di vendita se viene soddisfatta una delle seguenti condizioni:

L’attributo della regione dell’utente corrisponde alla colonna `region` della riga, e l`importo è inferiore o uguale a 10.000.

Il sistema imposta l’attributo del ruolo dell’utente su `’manager’`, concedendo loro l’accesso illimitato a tutti i registri delle vendite.

L’utente può impostare i propri attributi di regione e ruolo utilizzando la funzione `set_config`, simile agli esempi precedenti.

Combinazione di Tecniche ABAC

È possibile implementare ABAC in PostgreSQL utilizzando una combinazione delle tecniche discusse sopra. Combinare RLS, etichette di sicurezza ed espressioni di politica per un sistema di controllo degli accessi personalizzato che soddisfi le Sue necessità.

È possibile utilizzare RLS per controllare l’accesso per dipartimento. Utilizzare le etichette di sicurezza per categorizzare i dati sensibili e le espressioni di politica per creare regole di accesso dettagliate. Successivamente si possono basare queste regole su vari attributi e condizioni.

Considerazioni sulle Prestazioni

Implementare ABAC in PostgreSQL può influire sulle prestazioni delle query, specialmente quando si trattano politiche di accesso complesse. Importante considerare gli aspetti prestazionali seguenti:

  • Valutazione delle politiche: Il sistema valuta ogni politica a livello di riga per ogni query, il che può aggiungere overhead all’esecuzione delle query. Ottimizzare le Sue politiche per minimizzare il numero di condizioni e la complessità.
  • Indicizzazione: Assicurarsi di indicizzare correttamente le colonne utilizzate nelle politiche di accesso per accelerare la valutazione delle politiche. Considerare di creare indici sugli attributi frequentemente usati nelle condizioni delle politiche.
  • Caching: PostgreSQL memorizza nella cache il risultato delle valutazioni delle politiche per un breve periodo. Regolare il parametro di configurazione `row_security_cache_size` per bilanciare tra efficienza della cache e uso della memoria.
  • Partizionare le Sue tabelle in base a attributi specifici può aiutare a gestire meglio tabelle grandi e politiche di accesso. Questo può migliorare le prestazioni delle query riducendo il numero di righe scandagliate durante la valutazione delle politiche.

Test e Audit

Quando si implementa ABAC in PostgreSQL, è cruciale testare a fondo le Sue politiche di accesso per assicurarsi che si comportino come previsto. Testare le Sue regole creando diversi scenari con attributi utente, attributi delle risorse e condizioni ambientali per garantirne la precisione.

Inoltre, abilitare logging e auditing per monitorare i tentativi di accesso e le valutazioni delle politiche. PostgreSQL offre meccanismi di logging integrati che gli utenti possono configurare per catturare eventi rilevanti di controllo degli accessi. Revisionare regolarmente i log per identificare eventuali tentativi di accesso non autorizzati o errori di configurazione delle politiche.

Conclusione

ABAC è un approccio potente per far rispettare il controllo granulare degli accessi nei database PostgreSQL. Lei può creare politiche di accesso basate su attributi utente, attributi delle risorse e condizioni ambientali. Può fare questo utilizzando tecniche come sicurezza a livello di riga, etichette di sicurezza ed espressioni di politica.

Utilizzare ABAC in PostgreSQL aiuta a proteggere i dati sensibili, soddisfare le normative e mantenere la privacy dei dati. Assicurarsi di testare e auditare le Sue politiche di accesso per fare in modo che funzionino bene e non causino problemi.

Questo articolo mostra come implementare ABAC nel Suo database PostgreSQL per migliorare la sicurezza della Sua applicazione. Non dimenticare di controllare e modificare le Sue regole di accesso come necessario per mantenere il Suo sistema di accesso ai dati sicuro e robusto.

Successivo

PostgreSQL Mascheramento Dinamico dei Dati

PostgreSQL Mascheramento Dinamico dei Dati

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]