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

ABAC in PostgreSQL: Un Metodo Potente per Gestire l’Accesso ai Dati

ABAC in PostgreSQL: Un Metodo Potente per Gestire l’Accesso ai Dati

abac in postgresql

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

Comprendere ABAC

ABAC è un modello di controllo degli accessi che determina i diritti di accesso basati sugli attributi. Gli utenti possono collegare queste caratteristiche a titoli di lavoro, team, risorse come dati, record e ambienti come tempo e luogo. ABAC offre un modo flessibile e dinamico per impostare le politiche di accesso. Questo consente un controllo più dettagliato rispetto ai modelli tradizionali 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 tuo 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 di un database.

Ecco come abilitare RLS e creare una politica che limita l’accesso alle righe basate sull’attributo dipartimentale 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 verifica se la colonna department di ciascuna riga corrisponde all’attributo dipartimentale corrente dell’utente. L’app memorizza l’attributo dipartimentale corrente dell’utente in app.current_user_department.setting.

Per impostare l’attributo dipartimentale dell’utente, è possibile utilizzare la funzione `set_config`:

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

Questa politica consente agli utenti di visualizzare solo le righe del loro dipartimento, assicurando un rigoroso controllo degli accessi basato sui loro attributi.

Etichette di Sicurezza

Le etichette di sicurezza forniscono un altro modo per implementare ABAC in PostgreSQL. Gli oggetti di database assegnano coppie chiave-valore note come etichette. Queste categorizzano tabelle o righe basate su attributi di sicurezza. È possibile definire politiche di accesso basate su 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 per 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. Forniscono un modo flessibile per combinare più attributi e logica 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 il prodotto, la regione e l’importo. La politica `regional_sales` definisce utilizzando un’espressione di politica che combina più condizioni.

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

L’attributo regione dell’utente corrisponde alla colonna `region` della riga e l’attributo `amount` è pari o inferiore a 10,000.

Il sistema imposta l’attributo ruolo dell’utente su `’manager’`, concedendo loro accesso illimitato a tutti i record di vendita.

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

Combinazione di Tecniche ABAC

Puoi implementare ABAC in PostgreSQL utilizzando una combinazione delle tecniche discusse sopra. Combina RLS, etichette di sicurezza ed espressioni di politica per un sistema di controllo degli accessi personalizzato che si adatta alle tue esigenze.

Puoi utilizzare RLS per controllare l’accesso per dipartimento. Usa le etichette di sicurezza per categorizzare i dati sensibili e le espressioni di politica per creare regole di accesso dettagliate. Successivamente, puoi basare queste regole su vari attributi e condizioni.

Considerazioni sulle Prestazioni

L’implementazione di ABAC in PostgreSQL può influire sulle prestazioni delle query, specialmente quando si trattano politiche di accesso complesse. È importante considerare i seguenti aspetti delle prestazioni:

  • Valutazione delle politiche: Il sistema valuta ogni politica a livello di riga per ogni query, il che può aggiungere un sovraccarico all’esecuzione della query. Ottimizza le tue politiche per minimizzare il numero di condizioni e complessità.
  • Indicizzazione: Assicurati di indicizzare correttamente le colonne utilizzate nelle tue politiche di accesso per velocizzare la valutazione delle politiche. Considera la creazione di indici sugli attributi utilizzati frequentemente nelle condizioni delle politiche.
  • Caching: PostgreSQL memorizza nella cache il risultato delle valutazioni delle politiche per un breve periodo. Sintonizza il parametro di configurazione `row_security_cache_size` per bilanciare l’efficienza della cache e l’utilizzo della memoria.
  • Partizionare le tue tabelle basate su attributi specifici può aiutare a gestire tabelle di grandi dimensioni e politiche di accesso in modo più efficace. Questo può migliorare le prestazioni delle query riducendo il numero di righe scansionate durante la valutazione delle politiche.

Test e Audit

Quando si implementa ABAC in PostgreSQL, è fondamentale testare a fondo le tue politiche di accesso per assicurarsi che si comportino come previsto. Testa le tue regole creando scenari diversi con attributi degli utenti, attributi delle risorse e condizioni ambientali per garantire accuratezza.

Inoltre, abilita il logging e l’audit per monitorare i tentativi di accesso e le valutazioni delle politiche. PostgreSQL offre meccanismi di logging integrati che gli utenti possono configurare per catturare gli eventi rilevanti del controllo degli accessi. Rivedi regolarmente i log per identificare qualsiasi tentativo di accesso non autorizzato o configurazione errata delle politiche.

Conclusione

ABAC è un potente approccio per fare rispettare il controllo granulare degli accessi nei database PostgreSQL. Puoi creare politiche di accesso basate sugli attributi dell’utente, sugli attributi delle risorse e sulle condizioni ambientali. Puoi farlo utilizzando tecniche come la sicurezza a livello di riga, le etichette di sicurezza e le espressioni di politica.

Utilizzare ABAC in PostgreSQL aiuta a proteggere i dati sensibili, a soddisfare le normative e a mantenere la privacy dei dati. Assicurati di testare e fare audit delle tue politiche di accesso per assicurarti che funzionino correttamente e non causino problemi.

Questo articolo ti mostra come implementare ABAC nel tuo database PostgreSQL per migliorare la sicurezza della tua applicazione. Non dimenticare di verificare e modificare le tue regole di accesso, se necessario, per mantenere il tuo sistema di accesso ai dati forte e sicuro.

Successivo

PostgreSQL Data Masking: Tecniche Chiave e Migliori Pratiche

PostgreSQL Data Masking: Tecniche Chiave e Migliori Pratiche

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Countryx
United States
United Kingdom
France
Germany
Australia
Afghanistan
Islands
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegovina
Botswana
Bouvet
Brazil
British Indian Ocean Territory
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Congo, Republic of the
Congo, The Democratic Republic of the
Cook Islands
Costa Rica
Cote D'Ivoire
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands (Malvinas)
Faroe Islands
Fiji
Finland
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guernsey
Guinea
Guinea-Bissau
Guyana
Haiti
Heard Island and Mcdonald Islands
Holy See (Vatican City State)
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran, Islamic Republic Of
Iraq
Ireland
Isle of Man
Israel
Italy
Jamaica
Japan
Jersey
Jordan
Kazakhstan
Kenya
Kiribati
Korea, Democratic People's Republic of
Korea, Republic of
Kuwait
Kyrgyzstan
Lao People's Democratic Republic
Latvia
Lebanon
Lesotho
Liberia
Libyan Arab Jamahiriya
Liechtenstein
Lithuania
Luxembourg
Macao
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia, Federated States of
Moldova, Republic of
Monaco
Mongolia
Montserrat
Morocco
Mozambique
Myanmar
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
Niue
Norfolk Island
North Macedonia, Republic of
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Palestinian Territory, Occupied
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn
Poland
Portugal
Puerto Rico
Qatar
Reunion
Romania
Russian Federation
Rwanda
Saint Helena
Saint Kitts and Nevis
Saint Lucia
Saint Pierre and Miquelon
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Serbia and Montenegro
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Georgia and the South Sandwich Islands
Spain
Sri Lanka
Sudan
Suriname
Svalbard and Jan Mayen
Swaziland
Sweden
Switzerland
Syrian Arab Republic
Taiwan, Province of China
Tajikistan
Tanzania, United Republic of
Thailand
Timor-Leste
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United States Minor Outlying Islands
Uruguay
Uzbekistan
Vanuatu
Venezuela
Viet Nam
Virgin Islands, British
Virgin Islands, U.S.
Wallis and Futuna
Western Sahara
Yemen
Zambia
Zimbabwe
Choose a topicx
Informazioni generali
Vendite
Servizio clienti e supporto tecnico
Richieste di collaborazione e alleanza
Informazioni generali:
info@datasunrise.com
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
partner@datasunrise.com