Automatiser la gestion des filtres d'attributs
Documentation :
- Méta-données et entity categories, RENATER
1. Problématique de la maintenance du fichier attribute-filter.xml
Le problème de contrôle de la diffusion d'attributs utilisateurs se pose aux administrateurs d'IdP. Ils peuvent gérer manuellement leur fichier attribute-filter.xml
, mais compte-tenu du nombre de SP disponibles, ce type de gestion n'est pas réaliste. D'un autre côté les obligations vis à vis de la CNIL imposent une diffusion proportionnée des données à caractère personnel (lire nos bonnes pratiques pour le traitement des données à caractère personnel dans la Fédération Éducation-Recherche).
Précédemment RENATER a mis à disposition des administrateurs d'IdP plusieurs fichiers attribute-filter.xml générés automatiquement en fonction des types de SP et de leur public cible, voir cette documentation.
A partir de sa version 2.4.0, l'IdP Shibboleth permet de définir des règles génériques de diffusion d'attributs, en fonction des attributs utilisateurs demandés par un fournisseur de service et également en fonction de l'appartenance de ce fournisseur de services à des entity categories.
2. Automatisation de la gestion des filtres
Depuis juillet 2015 RENATER a étendu le format du fichier de méta-données SAML de sa fédération pour y intégrer les informations concernant les attributs attendus par chaque fournisseur de services. Ces informations sont directement issues du guichet de la fédération où l'administrateur d'un fournisseur de services renseigne la liste des attributs utilisateurs dont son service a besoin pour fonctionner.
Ci-dessous un exemple de données saisies sur le guichet de la fédération :
Ci-dessous un extrait des méta-données de la fédération, incluant la description XML des attributs utilisateur attendus par ce même fournisseur de services :
<md:AttributeConsumingService index="0"> <md:ServiceName xml:lang="fr">Service d'organisation et de planification Evento</md:ServiceName> <md:ServiceName xml:lang="en">Organization and planification service Evento</md:ServiceName> <md:ServiceDescription xml:lang="fr">Service d'organisation et de planification Evento</md:ServiceDescription> <md:ServiceDescription xml:lang="en">Organization and planification service Evento</md:ServiceDescription> <md:RequestedAttribute FriendlyName="mail" Name="urn:oid:0.9.2342.19200300.100.1.3" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" **isRequired="true"**> </md:RequestedAttribute> <md:RequestedAttribute FriendlyName="displayName" Name="urn:oid:2.16.840.1.113730.3.1.241" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" **isRequired="true"**> </md:RequestedAttribute> <md:RequestedAttribute FriendlyName="cn" Name="urn:oid:2.5.4.3" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" **isRequired="true"**> </md:RequestedAttribute> </md:AttributeConsumingService>
Ces informations publiées dans les méta-données SAML sont exploitables pour configurer la diffusion automatique de certains attributs par votre IdP Shibboleth, en fonction des attributs demandés par les fournisseurs de services.
3. Exemples de configuration de attribute-filters.xml
Documentation : IdP Filter Requirement AttributeInMetadata, consortium Shibboleth
La version 2.4.0 de l'IdP Shibboleth introduit une nouvelle règle PermitValueRule de type AttributeInMetadata utilisable dans votre fichier de configuration attribute-filter.xml. Cette fonctionnalité vous permet, pour un ensemble de SPs, d'autoriser la diffusion au plus juste des attributs utilisateur, uniquement s'ils sont déclarés comme demandés par le SP dans les méta-données de la fédération. L'option onlyIfRequired permet par ailleurs de ne diffuser l'attribut que s'il est indiqué comme obligatoire.
Exemple 1 : diffusion du pool standard d'attributs utilisateur, à l'exclusion des attributs optionnels :
- /opt/shibboleth-idp/conf/attribute-filter.xml
<!-- On fournit les attributs requis, contexte Fédération de Test --> <AttributeFilterPolicy id="releaseToAllRenaterSps"> <PolicyRequirementRule xsi:type="InEntityGroup" groupID="https://federation.renater.fr/test/" /> <AttributeRule attributeID="mail"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonPrincipalName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="displayName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="givenName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="surName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="commonName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonPrimaryAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonScopedAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonTargetedID"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="supannEtablissement"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="uid"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonEntitlement"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> </AttributeFilterPolicy>
Si vous voulez observer le résultat, il vous faut recharger la configuration des filtres d'attributs, et de vous reconnecter au SP de test :
$> /opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.AttributeFilterService
Exemple 2 : diffusion de certains attributs utilisateur, uniquement aux applications nationales :
- /opt/shibboleth-idp/conf/attribute-filter.xml
<AttributeFilterPolicy id="releaseToNationalSp"> <PolicyRequirementRule xsi:type="AND"> <Rule xsi:type="InEntityGroup" groupID="https://federation.renater.fr/" /> <Rule xsi:type="EntityAttributeExactMatch" attributeName="http://macedir.org/entity-category" attributeValue="https://federation.renater.fr/scope/national"/> </PolicyRequirementRule> <AttributeRule attributeID="eduPersonPrincipalName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="displayName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="commonName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="mail"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonScopedAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonTargetedID"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> </AttributeFilterPolicy>
AttributeFilterPolicy
de ce type pour les méta-données SAML de la Fédération Éducation-Recherche (main-sps-renater-metadata.xml) qui ont un identifiant différent (https://federation.renater.fr/
au lieu de https://federation.renater.fr/test/
pour la fédération de test). Nous vous fournissons un exemple de configuration de ce type, plus loin dans la documentation.
4. Limiter la diffusion des attributs
Documentation : IdP Add Attribute Filter, consortium Shibboleth
Vous avez la possibilité de restreindre la diffusion d'attributs utilisateur à un sous-ensemble des SPs membres de la fédération.
Les SPs enregistrés dans la Fédération Éducation-Recherche sont catégorisés en fonction de deux critères : le type de service proposé (enseignement à distance, outils collaboratifs, documentation électronique, accès Wi-Fi, etc) et le public cible (service national institutionnel, communautés nationales, ressources locales, service commercial). Ces informations sont publiées dans les méta-données SAML sous forme d' entity categories
? L'IdP Shibboleth vous permet de définir un filtre d'attribut afin de restreindre la diffusion de certains attributs à une catégorie de SPs.
Exemple 1 : diffusion du numéro de téléphone utilisateur uniquement aux applications nationales :
- /opt/shibboleth-idp/conf/attribute-filter.xml
<AttributeFilterPolicy id="releaseTelephoneToNationalSps"> <PolicyRequirementRule xsi:type="AND"> <Rule xsi:type="InEntityGroup" groupID="https://federation.renater.fr/test/" /> <Rule xsi:type="EntityAttributeExactMatch" attributeName="http://macedir.org/entity-category" attributeValue="https://federation.renater.fr/scope/national"/> </PolicyRequirementRule> <AttributeRule attributeID="telephoneNumber"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> </AttributeFilterPolicy>
Au-delà de ces possibilités de ces possibilités de configuration pour un ensemble de SPs, vous pouvez bien sûr ajouter des règles de diffusion (ou non diffusion) d'attributs pour un SP identifié.
Exemple 2 : non diffusion de l'attribut mail
à un SP :
- /opt/shibboleth-idp/conf/attribute-filter.xml
<AttributeFilterPolicy id="DenyMailForSp"> <PolicyRequirementRule xsi:type="Requester" value="https://jenevous.faispasconfiance/" /> <AttributeRule attributeID="mail"> <DenyValueRule xsi:type="ANY"/> </AttributeRule> </AttributeFilterPolicy>
Permit
le prévoit et si aucune règle Deny
n'empêche sa diffusion. Les règles Deny
ont donc préséance sur les règle Permit
.
Ré-autoriser l'envoie des attributs
- /opt/shibboleth-idp/conf/attribute-filter.xml
<AttributeFilterPolicy id="releaseToAllRenaterSps"> <PolicyRequirementRule xsi:type="InEntityGroup" groupID="https://federation.renater.fr/test/" /> <AttributeRule attributeID="mail"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonPrincipalName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="displayName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="givenName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="surName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="commonName"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonPrimaryAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonScopedAffiliation"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonTargetedID"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="supannEtablissement"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="uid"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> <AttributeRule attributeID="eduPersonEntitlement"> <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/> </AttributeRule> </AttributeFilterPolicy>
- /opt/shibboleth-idp/conf/attribute-filter.xml