Arborescence des pages

Vous regardez une version antérieure (v. /wiki/pages/viewpage.action?pageId=90669066) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 30) afficher la version suivante »

Cette page détaille la mise en oeuvre de Grouper V2 à Rennes1 : classification adoptée pour les groupes, les mécanismes d'alimentation à partir des bases métier, et les versements dans les annuaires.

Contexte -besoins

  • gérer des groupes ad hoc (non-institutionnels) avec possibilité de délégation de droits
  • gérer des groupes institutionnels issus des bases "métiers" : structure Harpège et structure des enseignements Apogée
  • synchroniser les bases métiers, le référentiel Grouper et les services d'annuaires
  • gestion multi-établissements

Organisation globale

 

Arborescence des groupes

 

 

Les choix de noms ont été conditionnés par les rendus des différents services (grouper-ui, annuaires) et la gestion par dossiers.

 

La racine

Le dossier de premier niveau (racine) s'appelle "Etablissements" , car nous sommes dans un contexte multi-établissements.

Le niveau établissement

Chaque établissement contient cinq dossiers:

Deux dossiers contiennent les groupes institutionnels (Etudiants , Personnels) et les trois autres les groupes non-institutionnels (Applications et services, Ressources, Autres groupes)

NB : il n'y a pas de dossier Administrateurs à ce niveau : les groupes des administrateurs délégués sont définis dans les dossiers eux-mêmes

 

Les groupes institutionnels de l'établissement

Les principes suivants sont adoptés pour construire les arborescences des groupes des personnels et des étudiants:

  • chaque niveau (une structure, une composante, un laboratoire, une étape, etc...) contient
    • un ou plusieurs sous-dossiers ayant pour ID <code_SI> et de nom <libelle_SI>
    • le groupe d'ID "tous" et de nom "Tout_<code_SI>" ayant pour membres directs les sous-groupes de niveau inférieur
  • au dernier niveau (la feuille) , le groupe  "Tout_<code_SI>" a pour membres direct les personnes

avec :

  • <code_SI> : code Harpege ou Apogee du niveau courant
  • <libelle_SI> : libellé Harpege ou Apogee du niveau courant

 

Les groupes des Personnels

Ils sont issus d'Harpege et reflètent les différents niveaux des structures:

  • Services : les groupes des personnels des services centraux et communs
  • Ufr,instituts, écoles : les groupes des personnels des composantes d'enseignement
  • Laboratoires : les groupes des personnels des laboratoires
Les groupes des Etudiants

Ils sont issus d'Apogee et sont classés par inscription administrative selon le plan de classememnt suivant

                       année > “Inscription Administrative” > composante > type de diplôme > version de diplôme > version d'étape

 

 

 

Les groupes non institutionnels

Ces groupes peuvent être gérés par un administrateur délégué.

Ils sont classés selon leur type :

  • profils applicatifs  (branche "Applications et services")
    • les groupes sont relatifs à une application (service métier, GED, sympa, ...) 
    • les applications sont classées par domaine ("Communication", "GRH", "Stockage partagé", etc ...)
  • ressources informatiques (branche "Ressources")
    • ces groupes permettent de contôler l'accès/l'utilisation de ressources matérielles
    • deux types de ressources actuellement : imprimantes et postes de travail
  • les autres groupes (branche "Autres groupes")
    • ce sont des groupes transversaux de nature organisationnelle (projet, communication, collaboration,...) et  fonctionnelle (correspondants téléphonie, correspondants techniques de la DSI, ...) 
    • ils sont internes à une structure ("Recherche", "Services", "Ufr,instituts,écoles") mais peuvent aussi êtres communs à plusieurs structures ("Communs", "Projets UdR", "Partages")

Les règles de nommage:

 

Correspondance des champs dans Grouper et des attributs ldap

Correspondance_attributs_grouper_ldap.pdf

Alimentation des groupes

Groupes institutionnels

La synchronisation entre les bases métiers et la base grouper se fait par un outil développé en interne r1 : synchroGrpInstit (esup-commons-2)

Ce programme batch lit les structures Apogée/Harpège et leurs membres et crée un fichier de lot de commandes à la norme "grouper shell" qui contient les ordres de création/modification des groupes et de leurs membres.

Le fichier lot de commande est ensuite exécuté par le shell grouper.

Groupes manuels

Chaque groupe est géré par son administrateur designé

Synchronisation Grouper - Services d'annuaires

Grouper - annuaire ldap "global"

L'annuaire appelé "ldap global" est l'annuaire LDAP de référence, utilisé pour l'authentification et les recherche de personnes

La synchronisation se fait avec l'outil "LDAPPC"

Les groupes sont placés dans une branche "groups", à plat (pas d'arborescence)

Les appartenances indirectes sont traduites en appartenances indiciduelles directes

La synchronisation met aussi à jour l'attribut "memberOf" de chaque personne

Configuration ldappc :

 <?xml version="1.0" encoding="utf-8"?>

<ldappc>
  <grouper>
    <group-queries>
      <subordinate-stem-queries>
        <stem-list>
          <stem>groupes</stem>
        </stem-list>
      </subordinate-stem-queries>
    </group-queries>
    <groups structure="flat" root-dn="ou=Groups,${edu.vt.middleware.ldap.base}" ldap-object-class="groupOfNames"
            ldap-rdn-attribute="cn" grouper-attribute="name" provision-member-groups="false" >
      <group-members-dn-list list-object-class="groupOfNames" list-attribute="member" />
      <group-attribute-mapping ldap-object-class="groupOfNames">
          <group-attribute-map group-attribute="displayExtension" ldap-attribute="description" />
      </group-attribute-mapping>
    </groups>
    <memberships>
      <member-groups-list
        list-object-class="inetuser"
        list-attribute="memberOf"
        naming-attribute="name"
        temporary-directory="" />
    </memberships>
  </grouper>
  <source-subject-identifiers>
    <source-subject-identifier source="rennes1:ldap" subject-attribute="id">
      <ldap-search base="ou=people,${edu.vt.middleware.ldap.base}"
    scope="subtree_scope"
    filter="(uid={0})"
    on-not-found="warn" />
    </source-subject-identifier>
  </source-subject-identifiers>
</ldappc>

Grouper - annuaire active directory

L'annuaire est utilisé pour la gestion des droits sur des espaces partagés

La synchronisation se fait avec l'outil "LDAPPC"

Les groupes sont placés dans une unité organisationnelle "groupes", en conservant l'arborescence de la base grouper

L'attribut sAMAccountName reçoit la valeur de l'id_path grouper avec conversion des ":" en "_"

Configuration ldappc :

 <?xml version="1.0" encoding="utf-8"?>
<ldappc>
  <grouper>
    <group-queries>

      <subordinate-stem-queries>
        <stem-list>
          <stem>groupes</stem>
        </stem-list>
      </subordinate-stem-queries>
    </group-queries>
    <groups
      structure="bushy"
      root-dn="ou=GROUPER,ou=rennes1,${edu.vt.middleware.ldap.base}"
      ldap-object-class="group"
      ldap-rdn-attribute="cn"
      grouper-attribute="name"
      bundle-modifications="false"
    >
      <group-members-dn-list list-object-class="group" list-attribute="member" />
      <resolver-attribute-mapping ldap-object-class="group">
        <resolver-attribute-map resolver-attribute="grouptypead" ldap-attribute="groupType" ldap-attribute-empty-value="-2147483646"/>
        <resolver-attribute-map resolver-attribute="sAMAccountName" ldap-attribute="sAMAccountName" />
      </resolver-attribute-mapping>
    </groups>
  </grouper>
  <source-subject-identifiers>
    <source-subject-identifier source="rennes1:ldap" subject-attribute="id">
      <ldap-search base="ou=rennes1,${edu.vt.middleware.ldap.base}"
    scope="subtree_scope"
    filter="(cn={0})"
    on-not-found="warn" />
    </source-subject-identifier>
  </source-subject-identifiers>
</ldappc>

Résolution des correspondances d'attributs :

 <?xml version="1.0" encoding="UTF-8"?>
<AttributeResolver
  xmlns="urn:mace:shibboleth:2.0:resolver"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:resolver="urn:mace:shibboleth:2.0:resolver"
  xmlns:ad="urn:mace:shibboleth:2.0:resolver:ad"
  xmlns:dc="urn:mace:shibboleth:2.0:resolver:dc"
  xmlns:grouper="http://grouper.internet2.edu/shibboleth/2.0"
  xsi:schemaLocation="
   urn:mace:shibboleth:2.0:resolver classpath:/schema/shibboleth-2.0-attribute-resolver.xsd
   urn:mace:shibboleth:2.0:resolver:dc classpath:/schema/shibboleth-2.0-attribute-resolver-dc.xsd
   urn:mace:shibboleth:2.0:resolver:ad classpath:/schema/shibboleth-2.0-attribute-resolver-ad.xsd
   http://grouper.internet2.edu/shibboleth/2.0 classpath:/schema/shibboleth-2.0-grouper.xsd">

  <!-- group data connector -->
  <resolver:DataConnector id="groupDataConnector" xsi:type="grouper:GroupDataConnector">
  </resolver:DataConnector>

  <resolver:AttributeDefinition xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" id="sAMAccountName" sourceAttributeID="name">
    <resolver:Dependency ref="groupDataConnector" />
    <Script><![CDATA[
      // Import Shibboleth attribute provider
      importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
      value = name.getValues().get(0);
      value = value.replaceAll("\\/", "_");
      value = value.replaceAll("\\/", "_");
      value = value.replaceAll("\\[", "_");
      value = value.replaceAll("\\]", "_");
      value = value.replaceAll("\\:", "_");
      value = value.replaceAll("\\;", "_");
      value = value.replaceAll("\\|", "_");
      value = value.replaceAll("\\=", "_");
      value = value.replaceAll("\\,", "_");
      value = value.replaceAll("\\+", "_");
      value = value.replaceAll("\\*", "_");
      value = value.replaceAll("\\?", "_");
      sAMAccountName = new BasicAttribute("sAMAccountName");
      sAMAccountName.getValues().add(value);
      ]]></Script>
  </resolver:AttributeDefinition>
  <resolver:AttributeDefinition id="grouptypead" xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" sourceAttributeID="name" >
    <resolver:Dependency ref="groupDataConnector" />
    <Script><![CDATA[
      // Import Shibboleth attribute provider
      importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
      value = -2147483646;
      grouptypead = new BasicAttribute("grouptypead");
      grouptypead.getValues().add(value);
      ]]></Script>
  </resolver:AttributeDefinition>
</AttributeResolver>
  • Aucune étiquette