Les groupes d'applications

Contexte et objectifs

Les groupes d'applications ont pour finalité principale d'accorder des droits d'accès aux données de l'annuaire aux applications (voir: Applications : périmètre et usages), par l'intermédiaire de règles de contrôle d'accès (voir notamment les bonnes pratiques: Gestion des droits d'accès à l'annuaire).

Dans ce but, SupAnn propose de normaliser le nommage de ces groupes, de façon à simplifier et systématiser l'écriture des ACLs ou règles d'accès correspondantes.

Ces groupes sont placés dans la branche ou=applicationGroups et leur RDN est constitué de l'attribut cn. Voir : Modélisation des groupes.

Les membres de ces groupes doivent être uniquement des applications (de classe supannApplication).

La création de ces groupes, même si leur nommage est inspiré des ACL OpenLDAP, n'implique pas une application directe de ces règles sur l'annuaire technique. La rédaction et l'application d'ACL reste a la charge de l'administrateur LDAP.

Syntaxe de nommage

Les définitions ci-dessous, notamment celles des droits accordés sur les limites, sont données à titre indicatif et doivent être interprétées dans leur esprit plutôt qu'à la lettre. Elles peuvent nécessiter des ajustements en fonction des caractéristiques techniques des serveurs LDAP concernés et des objectifs visés. D'autres mesures, telles la pagination ou le choix des index, peuvent contribuer à l'objectif de réduction de charge des serveurs ou de limitation des risques de déni de service.

La syntaxe générale suivante est proposée pour le RDN d'un groupe de contrôle d'accès applicatif :

cn=acl.<type de cible>[.<cible>[.<sous-cible optionnelle>]].<droit accordé>

Avec les éléments suivants :

  • acl : préfixe littéral indiquant que le groupe sert de base à un contrôle d'accès aux données de l'annuaire ;
  • <type de cible> : le type de cible sur lequel porte le contrôle d'accès, parmi:
    • dit : la branche de l'annuaire, située sous la racine, dont le RDN est ou=<cible> ;
    • attr : l'attribut dont le nom est <cible> ;
    • class : tous les attributs autorisés par la classe d'objets <cible> (même s'ils sont portés par un objet de classe différente) ;
    • scope : un ensemble fonctionnel d'attributs, défini par SupAnn ou local à l'établissement, dont le nom est <cible> ; Voir la nomenclature : Les ensembles d'attributs ("scopes") ;
    • filter : les entrées répondant à un filtre spécifique, identifié par <cible> ;
    • limits : un jeu de limites de volume, durée et/ou complexité des requêtes, défini par <droit accordé> et optionnellement caractérisé par <cible>.
  • <cible> : la cible sur laquelle porte le contrôle d'accès. Peut être omis si le contrôle d'accès porte sur toutes les cibles du même type (ex: toute l'arborescence de l'annuaire). Pour <type de cible>=limits, si renseignée, peut être constitué d'une des valeurs suivantes :
    • size : limite de taille des requêtes, en nombre d'entrées ;
    • time : limite de durée des requêtes ;
    • load : limite de charge générée sur le serveur par les requêtes, indépendamment de leur taille effective ou de leur durée ;
    • nosize : le droit accordé ne comporte pas de limite de taille ;
    • notime : le droit accordé ne comporte pas de limite de durée ;
    • noload : le droit accordé ne comporte pas de limite de complexité.
  • <sous-cible optionnelle> : lorsque applicable, précision d'un sous-ensemble de <cible> sur laquelle porte la requête, par exemple pour l'accès à une sous-branche de l'annuaire. Même syntaxe que <cible>, répétable plusieurs fois si nécessaire ;
  • <droit accordé> : le droit accordé, parmi :
    • none : aucun droit (restriction par rapport à un droit d'accès par défaut plus permissif) ;
    • search : uniquement droit de comparaison et de recherche, pas de lecture ; constitue une restriction si les droits par défaut sont plus permissifs ;
    • access : droit d'accès : autorise le parcours d'une branche (<type de cible>=“dit”) ou la visibilité d'une entrée par défaut masquée (<type de cible>=“filter”), tout en maintenant le filtrage des attributs par les autres ACLs ;
    • read : droit de lecture ;
    • write : droit d'écriture ;
    • admin : droit d'administration : lecture, écriture, création et suppression d'entrées ;
    • small : limite “faible” :
      • si <cible>=size, limite “compatible avec une énumération humaine” (ex: 20 entrées) ;
      • si <cible>=time, “durée acceptable pour une requête interactive” (ex: 3s) ;
      • si <cible>=load, “complexité engendrant une charge acceptable plusieurs fois par seconde”.
    • medium : limite “moyenne” :
      • si <cible>=size, “nombre maxi de groupes dont une personne peut être membre” (ex: 500) ;
      • si <cible>=time, “durée acceptable pour une recherche avancée occasionnelle” (ex: 20s) ;
      • si <cible>=load, “complexité engendrant une charge acceptable plusieurs fois par minutes, mais moins d'une fois par seconde”.
    • large : limite “élevée” :
      • si <cible>=size, “nombre de membres du groupe le plus gros” (ex: 10 000) ;
      • si <cible>=time, “durée acceptable pour une tâche d'arrière-plan exécutée moins d'une fois par heure” (ex: 120s) ;
      • si <cible>=load, “complexité engendrant une charge acceptable plusieurs fois par heure, mais moins d'une fois par minute”
    • unlimited : pas de limite.

NOTE: pour <type de cible>=“limits”, il est en général plus simple de ne pas spécifier la <cible>, et de définir un <droit accordé> qui s'applique aux trois cibles “size”, “time” et “load” simultanément. C'est d'ailleurs la seule possibilité en configuration OpenLDAP, où toutes les limites applicables à un sujet donné doivent être spécifiées simultanément dans une même directive “limits”.

En revanche, la <cible> pourra être utilisée pour définir une variante du <droit accordé>, par exemple “noload”, “notime” ou “nosize” pour un jeu respectivement exempté de limite de complexité, de durée ou de taille.

Exemples

Voir aussi les bonnes pratiques : Gestion des droits d'accès à l'annuaire

Droits sur une arborescence

  • cn=acl.dit.groups.read : lecture de la branche ou=groups
  • cn=acl.dit.admin : droit d'administration global sur l'annuaire
  • cn=acl.dit.structures.none : interdiction d'accès à la branche ou=structures

Droits sur des attributs

  • cn=acl.attr.supannNomDeNaissance.search : droit de recherche sur l'attribut supannNomDeNaissance (soit extension de droit par rapport à un droit par défaut interdisant l'accès à cet attribut, soit restriction par rapport à un droit par défaut autorisant sa lecture)
  • cn=acl.attr.supannAutreMail.read : lecture de l'attribut supannAutreMail

Droits sur des classes d'attributs

  • cn=acl.class.supannGroupe.read : lecture des attributs supannGroupeAdminDN, supannGroupeLecteurDN, supannGroupeDateFin et supannRefId (sur tout type d'objets)
  • cn=acl.class.supannRessource.read : lecture des attributs supannRessourceEtat et supannRessourceEtatDate

Droits sur des ensembles d'attributs ("scopes")

Voir : Les ensembles d'attributs ("scopes")

  • cn=acl.scope.identity.read : lecture de l'identité numérique (NB: certains de ces attributs peuvent déjà bénéficier d'un droit de lecture par défaut, auquel cas ce groupe d'accès ne fait qu'ajouter l'accès à ceux qui ne l'ont pas)
  • cn=acl.scope.private.read : lecture des données personnelles
  • cn=acl.scope.id.read : lecture de tous les identifiants