Article co-rédigé avec Himanshu Arora, Data Solution Architect chez Databricks

 

Comme vous l’avez vu dans l’article sur le droit à l’oubli, la réglementation européenne impose des règles strictes en matière de gouvernance des données. D’autre part, il est capital de catégoriser vos données en fonction de leur criticité afin de positionner les droits d’accès à celles-ci. C’est pourquoi la gouvernance des données est un enjeu majeur, complexe et protéiforme pour les entreprises. L’accès aux données fait partie de cette gouvernance.

Les bases de données relationnelles proposent depuis plusieurs années des mécanismes pour contrôler et limiter ces accès.

L’exploitation des données stockées dans un data lake est plus récente. Cependant, la problématique reste la même, peu importe le stockage.

En utilisant Databricks, il est possible de mettre en place des sécurités au niveau des lignes (row-level security) ou au niveau des colonnes (column-level security).

 

webinaire data securité transparence

 

Limitation des accès aux colonnes et aux lignes avec Azure Databricks

Le principe est le même pour la sécurité des lignes ou celle des colonnes.

Vous allez devoir définir des groupes d’utilisateurs, puis créer des vues et donner accès à ces vues aux groupes en fonction de ce que les utilisateurs sont autorisés à voir.

 

Row level security

La sécurité des lignes s’effectue en positionnant une clause spécifique pour une vue donnée.

Dans cet exemple, nous allons travailler sur une table de ventes dans laquelle on trouve les ventes réalisées par deux régions commerciales : la région Est et la région Ouest.

 

exemple de tables de ventes

Les commerciaux doivent avoir accès uniquement aux ventes de leurs régions respectives : un commercial de la région « Ouest » doit voir uniquement les lignes dont la colonne « RegionCommerciale » a la valeur « Ouest » et vice versa.

La direction commerciale doit avoir accès à l’intégralité de la table.

Il va donc falloir créer 3 groupes :

  1. Le groupe « Est » pour les commerciaux de la région Est
  2. Le groupe « Ouest » pour les commerciaux de la région Ouest
  3. Le groupe « Direction » pour la direction commerciale

Pour pouvoir faire le lien entre le groupe d’appartenance de l’utilisateur et les valeurs de la colonne « RegionCommerciale », nous allons utiliser la fonction IS_MEMBER pour déterminer les lignes auxquelles l’utilisateur aura accès.

 

Création des groupes

Pour créer les groupes, vous devez vous rendre dans la console d’administration « Admin Console » :

Admin console Databricks

 

Puis cliquer sur le bouton « Create Group » :

créer un groupe sur l'admin console databricks

Et enfin, donner un nom au groupe. Ici, le groupe « Est » :

création group Databricks console

Une fois le groupe créé, il faut affecter le ou les utilisateurs au groupe :

 

Affectation utilisateurs au groupe Databricks console

 

Mon utilisateur a été ajouté au groupe « Est ».

La commande ci-dessous teste si l’utilisateur actuel appartient au groupe « Est ».

Commande databricks

 

En sélectionnant la table « Ventes » avec une condition qui utilise la fonction « is_member » en s’appuyant sur les valeurs de la colonne « RegionCommerciale », le résultat affiche bien uniquement les 3 lignes de la région commerciale « Est ».

 

Databricks affichage lignes

 

L’étape suivante consiste à créer une vue en utilisant la requête précédente :

Databricks création de vues

La consultation de cette vue nous renvoie bien les lignes de la région de l’utilisateur :

Databricks consultation lignes utilisateur

Un utilisateur du groupe « Ouest » aura le résultat ci-après à la consultation de la vue :

Affichage Databricks colonnnes lignes

Le groupe « Direction » aura accès à l’intégralité de la table. Pour autoriser uniquement ce groupe à accéder à la table, il est nécessaire d’activer le contrôle d’accès aux tables (« table access control »).

Il y a 3 prérequis pour que vous puissiez utiliser cette fonctionnalité :

  1. Avoir un workspace en niveau de service Premium
  2. Le ou les utilisateurs ne doivent pas être autorisés à créer des clusters
  3. Il faut utiliser un cluster en mode « High Concurrency »

 

Databricks Cluster mode

 

Une fois cela fait, vous pourrez activer la fonctionnalité au niveau du workspace :

Databricks activation fonctionnalité dans le workspace

 

Puis au niveau du cluster :

Databricks table access control

 

Enfin, donner le droit de consulter la table au groupe « Direction ».

Accès en consultation table Databricks

 

Dans cet article, nous créons les groupes et affectons les utilisateurs manuellement. Il est bien sûr possible d’automatiser ces actions, par exemple, en utilisant le provider databricks de Terraform  ou encore via databricks cli.

Lorsqu’il est nécessaire d’utiliser des groupes, le plus simple consiste à utiliser la fonctionnalité SCIM permettant de gérer des groupes AD.

 

webinaire data securité transparence

 

Column level security

La sécurité des colonnes s’effectue en sélectionnant et en positionnant une condition sur le ou les champs en utilisant la fonction IS_MEMBER au niveau du « SELECT », et non plus au niveau de la clause « WHERE ».

Ci-dessous un exemple de table :

Exemple table à colonnes Databricks

La création de la vue applique une condition pour l’affichage de la colonne « Montant ». Si l’utilisateur appartient au groupe de la colonne « RegionCommerciale », alors la valeur de la colonne « Montant » est affichée. Sinon, la valeur « Non autorisé » est affichée.

Affichage colonne Databricks

Voici l’affichage du résultat pour un utilisateur appartenant au groupe « Est » :

Databricks affichage colonne table

 

Unity Catalog

Nous avons vu qu’il est possible de positionner des règles sur la consultation des données.

Cependant, si différents workspace exploitent les mêmes données, il est nécessaire de répliquer la même configuration au travers de ces workspaces.

Unity Catalog vous permettra, à terme, de définir des règles qui pourront être appliquées à l’ensemble des workspaces au travers d’un catalogue partagé.

 

⚠️A noter  : à ce jour, Unity Catalog est en bêta. Les exemples montrés ci-après peuvent être amenés à évoluer au cours du temps.

 

Ce catalogue permet, bien sûr, de gérer l’accès aux données mais également l’accès aux notebooks, l’accès aux modèles, etc.

Sachant que ce catalogue est géré au niveau du compte Databricks, il permet d’être agnostique au Cloud provider.

D’autre part, Unity Catalog cherche à créer un lien avec l’écosystème de catalogue existant. Cet écosystème est constamment en mouvement.

Vous pourrez gérer ce catalogue via une interface graphique dédiée à Unity Catalog.

En ce qui concerne les restrictions d’accès, elles se feront par l’intermédiaire d’attributs. Il faut donc d’abord créer un attribut. Dans l’exemple ci-dessous, l’attribut se nomme « pii » (pour « personal identifiable information ») :

CREATE ATTRIBUTE pii

Il faut enseigner marquer les colonnes concernées avec l’attribut. La table iot_events avec la colonne « email » ainsi que la table users avec la colonne « phone » sont concernées :

ALTER TABLE iot_events ADD ATTRIBUTE pii ON email
ALTER TABLE users ADD ATTRIBUTE pii ON phone
...

 

Et enfin, il est possible d’interdire l’accès aux colonnes marquées de cet attribut à un groupe d’utilisateurs :

GRANT SELECT ON DATABASE iot_data
HAVING ATTRIBUTE NOT IN (pii)
TO product_managers

Unity Catalog proposera également les logs d’audit pour l’accès aux colonnes liées à un attribut.

Unity catalog logs d'audit Databricks

 

Une gestion facilitée et centralisée

 

Les bases de données relationnelles mettent à disposition depuis longtemps des fonctionnalités permettant de limiter les accès aux données. Bien que plus récents que les bases de données relationnelles, les outils exploitant des données depuis un data lake commencent à se doter de fonctionnalités comparables en termes de gouvernance.

Unity Catalog va apporter plus de facilité afin de gérer celle-ci tout en centralisant cette gestion.

 

 

webinaire data securité transparence

Article co-rédigé par Donatien Tessier et Imanshu Arora