Villamblard, le 15 avril 2020
ldap2pg est un outil de synchronisation des
rôles et des privilèges d’une instance PostgreSQL à partir d’un annuaire
compatible LDAP. La configuration est simple et puissante, via un fichier
YAML. ldap2pg
facilite l’intégration
et la sécurisation de PostgreSQL dans votre infrastructure.
Depuis la rentrée 2019, le projet a fait l’objet de plusieurs versions, ce printemps 2020 est l’occasion de faire un tour des changements. Le rythme de développement est faible, régulier et constant. Ce rythme témoigne de la stabilité et de la vitalité du projet, un engagement de Dalibo pour la communauté PostgreSQL.
Les versions 5.1 et 5.2 requièrent une attention particulière lors de la mise à jour : la casse du nom des rôles est désormais respectée, des erreurs auparavant ignorées sont désormais levées.
En 6 mois, Dalibo Labs a livré deux versions de ldap2pg. La documentation du projet liste les changements de chaque versions. Voyons certains aspects en détails.
Casse des noms de rôles
Dans PostgreSQL, le nom d’un rôle est identifiant, comme les noms de table et
d’autres objets SQL. Sans protection, un identifiant est mis en minuscule. Ainsi
SELECT * FROM TOTO;
et SELECT * FROM toto;
sont les mêmes requêtes. En
revanche, les guillemets doubles protègent la casse, et même un espace dans
l’identifiant. C’est-à-dire que CREATE TABLE "TO TO" (id serial);
va
effectivement créer une table en majuscule avec un espace au milieu de son nom.
PostgreSQL laisse l’utilisateur assumer le risque.
Jusqu’à la version 5.1, ldap2pg passait systématiquement les identifiants en minuscule et ne travaillait qu’avec des minuscules. Désormais, ldap2pg protège systématiquement les identifiants : la casse est préservée. Les espaces sont autorisés. Notamment, ldap2pg supprimera un usurpateur utilisant une variante du nom de rôle en jouant sur la casse.
Pour facilité la migration, ldap2pg détecte le changement de casse d’un rôle -
suppression et création d’un rôle avec uniquement un changement de nom - et
optimise le changement grâce à la commande ALTER USER
.
ldap2pg avertit du renommage. Aussi, lors de la mise à jour, prenez soin de vérifier si un rôle est renommé et alertez les utilisateurs concernés.
La recherche de renommage est un léger coût à l’exécution. Aussi, ce code sera supprimé dans un avenir lointain. Pensez à mettre à jour régulièrement ldap2pg pour alléger le travail de rattrapage d’historique. Nous conseillons une fois par an minimum, par exemple lorsque ldap2pg publie une version validée avec la dernière version majeure de PostgreSQL.
Définition de rôles statiques
Le fichier ldap2pg.yml
décrit des rôles statiques et d’autres dynamiques,
générés à partir de requêtes LDAP. Jusqu’à la version 5.2, des rôles statiques
pouvaient être mélangés avec des rôles dynamiques. Or, les rôles associés à une
requêtes LDAP sont générés pour chaque entrée LDAP, y compris les rôles
statiques. Cela signifie que si votre requête LDAP ne retourne rien, les rôles
statiques ne sont pas générés.
# Risqué :
- ldap:
base: ou=...
roles:
- nom_statique
- dyn_{cn}
# Sûr :
- role: nom_statique
- ldap:
base: ou=...
role: dyn_{cn}
ldap2pg 5.2 refuse la configuration risquée avec une erreur explicite. En
général, nous conseillons de grouper les rôles statiques dans le premier item
de la liste sync_map
et de grouper les rôles dynamiques par requête LDAP.
Gestion des commentaires
PostgreSQL permet de commenter à peu près tous les objets en base, y compris les
rôles. ldap2pg utilise le commentaire d’un rôle pour faciliter le traçage de son
origine. Par défaut, ldap2pg écrit le commentaire Managed by ldap2pg.
. Le
paramètre comment
permet de modifier ce commentaire et peut même inclure des
valeurs LDAP. Il est parfois utile d’intégrer dans le commentaire le
Distinguished Name (DN) LDAP ou un champ particulier de l’entrée de l’annuaire.
Jusqu’à ldap2pg 5.1, le commentaire était unique pour tous les rôles générés par une entrée LDAP. Désormais, le commentaire est associé au nom du rôle. Pour chaque rôle, ldap2pg génère un commentaire unique. Voici un exemple:
- ldap:
base: (ou=...)
role:
- name: "{member.cn}"
comment: "DN LDAP: {member}"
Dans cet exemple, ldap2pg requête un groupe et pour chaque membre, crée un rôle
avec le Common Name (CN) du membre. Le commentaire inclut le DN complet présent
dans l’attribut member
. ldap2pg 5.2 garantit que les valeurs member.cn
et
member
seront cohérentes.
ldap2pg 5.2 corrige des erreurs dans l’écriture du commentaire, comme le rétablissement du commentaire par défaut en cas de changement d’options.
Et davantage
ldap2pg a reçu aussi quelques correctifs d’erreurs que vous avez put rencontré.
Le Changelog fournit la liste exhaustive des correctifs. Avant de mettre à
jour, procéder à un test sur un environnement de pré-production ou à défaut,
avec l’option --dry
, activée par défaut.
Retrouvez la documentation en anglais, des procédures et le support communautaire à ces adresses :
- Documentation en ligne : http://ldap2pg.rtfd.io/en/latest/
- Le projet sur GitHub : https://github.com/dalibo/ldap2pg
Étienne BERSAC est le mainteneur de ldap2pg, un projet Dalibo Labs. Pour toutes questions techniques, l’équipe recommande d’utiliser la page de ldap2pg sur GitHub.