Contrôle d'accès dans DataFair

Mis à jour le 11/05/2018 par Nicolas Bonnel

DataFair est un service opensource qui permet d'exposer des jeux de données, des configurations d'applications et des services distants (APIs). L'exposition peut se faire en mode public ou privé, la consommation des ressources doit pouvoir être limitée, et leur modification doit pouvoir être restreinte.

Cet article présente plus en détail le système de permissions que nous avons mis en place.

Les limitations d'un système de rôle

Beaucoup d'applications ont un contrôle d'accès basé sur des rôles : les utilisateurs possèdent des rôles et certains rôles sont autorisés à faire certaines actions. On peut ainsi facilement attribuer un ensemble de permissions à un utilisateur en lui ajoutant un nouveau rôle.

La principale limitation est que la granularité de ce système ne permet pas de régler finement les permissions, en particulier au niveau utilisateur ou organisation. Les utilisateurs de DataFair s'authentifient auprès d'un service comme Simple Directory qui est multi-organisation et un rôle n'existe que dans une organisation : on n'est pas administrateur tout court, mais administrateur de l'organisation Koumoul par exemple. De plus les propriétaires des ressources ont des permissions spéciales, comme par exemple pouvoir fixer les permissions de la ressource, et un contrôle d'accès basé sur des rôles n'est pas adpaté à ce cas.

Un contrôle d'accès basé sur des attributs

Ce mode de contrôle permet de régler plus finement les permissions. Cet article en anglais présente son fonctionnement, nous avons choisi de nous en inspirer mais en le simplifiant. Certains aspects se rapprochent aussi du contrôle d'accès basé sur l'organisation

Pour résumer, on peut dire qu'une permission est un triplet (sujet, actions , ressource) et permet de dire si le sujet a le droit de faire certaines actions sur une ressource donnée. Seul le propriétaire d'une ressource ou les personnes ayant les permissions adaptées peuvent en modifier les permissions. Pour les ressources appartenant à des organisations, les membres de cette organisation ayant le rôle admin sont considérés comme propriétaires.

Sujet

Les utilisateurs de DataFair peuvent être soit anonymes, soit authentifiés auprès d'un service comme Simple Directory. Dans ce 2e cas, ils possèdent alors un identifiant utilisateur, et un ensemble d'organisations dans lesquelles ils ont un rôle en particulier. Dans un souci de simplicité, les utilisateurs ne peuvent avoir qu'un seul rôle par organisation, nous pensons que c'est suffisant et qu'il n'y a pas forcément besoin de créer beaucoup de rôles différents, car les permissions peuvent être mises individuellement, ou sur un ensemble de rôles d'une organisation.

Le sujet peut pour l'instant être de 3 formes : un utilisateur, une organisation qui peut être réstreinte à un ou plusieurs rôles, ou tout le monde. Dans ce dernier cas, on parle de contrôle d'accès public.

Ressource

La ressource est l'élément sur lequel on applique la permission, et elle n'est pas à spécifier car il y a un écran de paramétrage des permissions par ressource. Il y a 3 types de ressources différents, et les permissions sont définies pour chaque instance de chaque type :

  • les jeux de données
  • les services distants
  • les configurations d'applications

Un utilisateur peut créer tous les types de ressources en son nom. Pour les organisations, on peut restreindre la création de ressources à certains rôles (le rôle admin pouvant créer tous les types de ressources).

Actions

Les actions sont matérialisées dans DataFair par des opérations ou des groupes d'opérations (nous allons prochainement effectuer un renommage dans le service pour que cela soit plus clair) qui correspondent elles-même à des points d'accès de l'API. Une permission peut porter sur toutes les actions possibles sur une ressource, ou sur un ensemble réduit.

Le mode simplifié permet de manipuler des groupes de permissions : list, read, write, admin (et use pour les services distants). On peut si on le souhaite basculer en mode avancé pour régler les permissions plus finement. On peut par exemple autoriser la lecture des métadonnées d'un jeu de données, sans donner accès aux données.

Conclusion

Comme nous l'avons vu le système de permissions dans DataFair est relativement simple, mais il permet de faire à peu près tout ce que l'on veut en terme de contrôle d'accès. Le principal inconvénient est qu'il faut mettre les permissions à la main sur chaque ressource créée. Nous travaillons sur ce point pour permettre de configurer des permissions qui seront automatiquement appliquées sur une ressource lors de sa création.

Nous ne sommes pas rentrés en détail dans les différentes actions pour chaque type de ressource, mais nous aborderons ce point dans un prochain article !