DataSunrise sponsorise AWS re:Invent 2024 à Las Vegas, veuillez nous rendre visite au stand n°2158 de DataSunrise

ABAC dans PostgreSQL

ABAC dans PostgreSQL

abac dans postgresql

La sécurisation des données sensibles dans les bases de données PostgreSQL nécessite un contrôle d’accès granulaire. ABAC est une méthode pour définir et appliquer des règles d’accès. Ces règles reposent sur les attributs de l’utilisateur, des ressources et de l’environnement. Dans cet article, nous discuterons de la manière d’utiliser ABAC dans PostgreSQL pour contrôler l’accès à vos données avec des exemples.

Comprendre ABAC

ABAC est un modèle de contrôle d’accès qui détermine les droits d’accès en fonction des attributs. Les utilisateurs peuvent associer ces caractéristiques à des titres de poste, des équipes, des ressources telles que des données, dossiers, et à l’environnement comme le temps et le lieu. ABAC offre une manière flexible et dynamique de définir des politiques d’accès. Cela permet un contrôle plus détaillé que les modèles traditionnels basés sur les rôles.

Dans PostgreSQL, vous pouvez utiliser différentes méthodes comme la sécurité au niveau des lignes et les étiquettes de sécurité pour implémenter ABAC. Explorons chacune de ces techniques et voyons comment les appliquer pour faire respecter ABAC dans votre base de données PostgreSQL.

Sécurité au niveau des lignes

La sécurité au niveau des lignes dans PostgreSQL vous permet de contrôler l’accès à des lignes spécifiques dans une table en fonction des attributs de l’utilisateur. Les politiques RLS sont des règles écrites en SQL que les utilisateurs peuvent appliquer à certaines tables ou à toutes les tables d’une base de données.

Voici comment activer RLS et créer une politique qui limite l’accès aux lignes en fonction de l’attribut département de l’utilisateur.

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'));

Dans cet exemple, nous créons une table ’employees’ et activons RLS dessus. La clause `USING` définit la politique `department_access`, qui spécifie la condition pour accéder aux lignes.

La politique vérifie si la colonne département de chaque ligne correspond à l’attribut département actuel de l’utilisateur. L’application stocke l’attribut département actuel de l’utilisateur dans app.current_user_department.setting.

Pour définir l’attribut département de l’utilisateur, vous pouvez utiliser la fonction `set_config` :

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

Cette politique permet aux utilisateurs de ne voir que les lignes de leur département, assurant un contrôle d’accès strict basé sur leurs attributs.

Étiquettes de sécurité

Les étiquettes de sécurité fournissent un autre moyen de mettre en œuvre ABAC dans PostgreSQL. Les objets de base de données attribuent des paires clé-valeur connues sous le nom d’étiquettes. Elles catégorisent les tables ou les lignes en fonction des attributs de sécurité. Vous pouvez ensuite définir des politiques d’accès basées sur ces étiquettes.

Voici un exemple de création d’étiquettes de sécurité et de définition d’une politique d’accès en les utilisant :

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');

Dans cet exemple, nous créons une table nommée `documents`. Nous attribuons des étiquettes de sécurité à la fois à la table et à la colonne `classification`. Nous le faisons en utilisant la commande `SECURITY LABEL`. Les étiquettes suivent le format SELinux et catégorisent la table et la colonne en fonction des attributs de sécurité.

Ensuite, nous définissons une politique d’accès `document_access` en utilisant la fonction `sepgsql_has_perm`. Cette fonction vérifie si l’utilisateur a la permission de lire l’étiquette de classification pour chaque ligne. Seules les lignes pour lesquelles la fonction renvoie `true` (`’t’`) sont accessibles à l’utilisateur.

Expressions de politique

Les expressions de politique vous permettent de définir des règles de contrôle d’accès complexes basées sur les attributs et les conditions. Elles offrent un moyen flexible de combiner plusieurs attributs et logiques pour déterminer les droits d’accès.

Voici un exemple d’utilisation des expressions de politique pour implémenter 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')
);

Dans cet exemple, nous avons une table `sales` qui stocke des données de vente, y compris le produit, la région et le montant. La politique `regional_sales` définit l’utilisation d’une expression de politique qui combine plusieurs conditions.

La politique accorde l’accès aux enregistrements de ventes si l’une des conditions suivantes est remplie :

L’attribut région de l’utilisateur correspond à la colonne `region` de la ligne, et le `montant` est inférieur ou égal à 10 000.

Le système définit l’attribut rôle de l’utilisateur sur `manager`, ce qui leur donne un accès sans restriction à tous les enregistrements de vente.

L’utilisateur peut définir ses attributs de région et de rôle en utilisant la fonction `set_config`, similaire aux exemples précédents.

Combiner les techniques ABAC

Vous pouvez implémenter ABAC dans PostgreSQL en combinant les techniques discutées ci-dessus. Combinez RLS, les étiquettes de sécurité, et les expressions de politique pour un système de contrôle d’accès personnalisé qui répond à vos besoins.

Vous pouvez utiliser RLS pour contrôler l’accès par département. Utilisez des étiquettes de sécurité pour catégoriser les données sensibles et les expressions de politique pour créer des règles d’accès détaillées. Ensuite, vous pouvez baser ces règles sur divers attributs et conditions.

Considérations de performance

L’implémentation d’ABAC dans PostgreSQL peut affecter les performances des requêtes, surtout lorsqu’il s’agit de politiques d’accès complexes. Il est important de considérer les aspects de performance suivants :

  • Évaluation des politiques : Le système évalue chaque politique au niveau des lignes pour chaque requête, ce qui peut ajouter une surcharge à l’exécution des requêtes. Optimisez vos politiques pour minimiser le nombre de conditions et la complexité.
  • Indexation : Assurez-vous d’indexer correctement les colonnes utilisées dans vos politiques d’accès pour accélérer l’évaluation des politiques. Pensez à créer des index sur les attributs fréquemment utilisés dans les conditions des politiques.
  • Cachage : PostgreSQL met en cache le résultat des évaluations de politiques pour une courte période. Ajustez le paramètre de configuration `row_security_cache_size` pour équilibrer l’efficacité du cache et l’utilisation de la mémoire.
  • Le partitionnement de vos tables en fonction de certains attributs peut aider à gérer de grandes tables et les politiques d’accès de manière plus efficace. Cela peut améliorer les performances des requêtes en réduisant le nombre de lignes analysées lors de l’évaluation des politiques.

Test et audit

Lors de l’implémentation d’ABAC dans PostgreSQL, il est crucial de tester soigneusement vos politiques d’accès pour s’assurer qu’elles se comportent comme prévu. Testez vos règles en créant différents scénarios avec des attributs d’utilisateur, attributs de ressource et conditions environnementales pour garantir l’exactitude.

En outre, activez la journalisation et l’audit pour surveiller les tentatives d’accès et les évaluations des politiques. PostgreSQL offre des mécanismes de journalisation intégrés que les utilisateurs peuvent configurer pour capturer les événements de contrôle d’accès pertinents. Examinez régulièrement les journaux pour identifier toute tentative d’accès non autorisée ou toute mauvaise configuration des politiques.

Conclusion

ABAC est une approche puissante pour faire respecter un contrôle d’accès granulaire dans les bases de données PostgreSQL. Vous pouvez créer des politiques d’accès basées sur les attributs de l’utilisateur, les attributs des ressources et les conditions de l’environnement. Vous pouvez le faire en utilisant des techniques telles que la sécurité au niveau des lignes, les étiquettes de sécurité et les expressions de politique.

L’utilisation d’ABAC dans PostgreSQL aide à protéger les données sensibles, à respecter les réglementations et à maintenir la confidentialité des données. Assurez-vous de tester et d’auditer vos politiques d’accès pour vous assurer qu’elles fonctionnent bien et ne causent pas de problèmes.

Cet article vous montre comment implémenter ABAC dans votre base de données PostgreSQL pour améliorer la sécurité de votre application. N’oubliez pas de vérifier et de mettre à jour vos règles d’accès au besoin pour maintenir votre système de gestion des accès solide et sécurisé.

Suivant

Masquage de données PostgreSQL

Masquage de données PostgreSQL

En savoir plus

Besoin de l'aide de notre équipe de support ?

Nos experts seront ravis de répondre à vos questions.

Informations générales :
[email protected]
Service clientèle et support technique :
support.datasunrise.com
Demandes de partenariat et d'alliance :
[email protected]