Intégration avec Active Directory

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment interfacer l'authentification de Jenkins avec un annuaire Active Directory.

Mise en œuvre

Authentification

Pour activer l'authentification par Active Directory, il faut au préalable installer le plugin Active Directory.

Installation du plugin AD

Pour installer le plugin, se rendre dans la section Accueil / Administrer Jenkins / Gestion des plugins, onglet Disponibles (soit le chemin /pluginManager/available dans l'URL Jenkins) et rechercher "Active Directory" dans le champ Filtre :

Plugin Active Directory

Cocher la cache correspondant au plugin et cliquer sur Installer sans redémarrer pour installer le plugin.

Activation de l'authenfication AD

Une fois le plugin installé, se rendre dans la section Accueil / Administrer Jenkins / Configurer la sécurité globale (soit le chemin /configureSecurity/ dans l'URL Jenkins) et cocher la case Activer la sécurité si ce n'est pas déjà fait.

Sélectionner ensuite Active Directory dans la section Royaume pour la sécurité (Realm) et cliquer sur Add Domain. Cela a pour effet de faire apparaître un formulaire à remplir. Il est possible d'ajouter plusieurs domaines :

Formulaire domaine Active Directory

Renseigner alors les champs suivants :

  • Nom du domaine :
    • Renseigner ici le domaine concerné (exemple : jordan-lenuff.com)
  • Domain controller :
    • Renseigner ici l'adresse du contrôleur de domaine (exemple : ad.jordan-lenuff.com:3268)
  • Site :
    • Laisser vide
  • Bind DN :
    • Renseigner ici le DN complet du compte AD autorisé à interroger l'AD
  • Bind Password :
    • Le mot de passe dudit compte AD
  • TLS Configuration :
    • (Insecure) Trust all Certificates

Cliquer sur Test Domain pour vérifier les informations renseignées et la bonne connexion à l'Active Directory.

ATTENTION ! Si la configuration à l'Active Directory est mal réalisée et qu'aucun compte ne peut se connecter, il pourrait être impossible de re-configurer Jenkins. Dans ce cas, dans un premier temps, afin d'éviter cette situation, dans la section Autorisations, cocher le choix Tout le monde a accès à toutes les fonctionnalités. Cela permettra de continuer à réaliser les actions d'administration, même en cas d'impossibilité de s'authentifier.

Valider la configuration en cliquant sur Enregistrer.

Faire un test de connexion en cliquant sur S'identifier en haut à droit de Jenkins :

Authentification Jenkins

Si la connexion échoue, retourner dans les paramètres et vérifier la configuration de connexion à l'AD.

En cas de connexion réussie, retourner dans la section Accueil / Administrer Jenkins / Configurer la sécurité globale (soit le chemin /configureSecurity/ dans l'URL Jenkins) et cocher la case Les utilisateurs connectés peuvent tout faire. Ainsi, seules les personnes connectées au travers l'Active Directory pourront réaliser des actions dans Jenkins.

Valider la configuration en cliquant sur Enregistrer.

Pour ajuster le niveau d'accès des utilisateurs, suivre le chapitre suivant.

Gestion des accès

Pour gérer la gestion des accès selon les groupes d'appartenance de l'Active Directory, il faut au préalable installer le plugin Role Strategy.

Installation du plugin Role Strategy

Pour installer le plugin, se rendre dans la section Accueil / Administrer Jenkins / Gestion des plugins, onglet Disponibles (soit le chemin /pluginManager/available dans l'URL Jenkins) et rechercher "Authorization Strategy" dans le champ Filtre :

Plugin Role-based Authorization Strategy

Cocher la cache correspondant au plugin et cliquer sur Installer sans redémarrer pour installer le plugin.

Paramétrage des rôles

Menu

Une fois le plugin installé, se rendre dans la section Accueil / Administrer Jenkins / Configurer la sécurité globale (soit le chemin /configureSecurity/ dans l'URL Jenkins), cocher la case Stratégie basée sur les rôles dans la section Autorisations et cliquer sur "Enregistrer" pour valider.

Cela aura pour effet de rendre disponibles les options du plugin Role Strategy précédemment installé. Pour y accéder, se rendre dans la section Accueil / Administrer Jenkins / Gérer et assigner les rôles (soit le chemin /role-strategy/ dans l'URL Jenkins) :

Nouvelle section "Gérer et assigner les rôles"

La nouvelle section "Gérer et assigner les rôles" est composée des menus suivants :

  • Gérer les rôles
    • Permet de définir des rôles globaux ou par projet
  • Assigner les rôles
    • Permet d'assigner un rôle à un groupe et/ou utilisateur
  • Role Strategy Macros
Menus de la section "Gérer et assigner les rôles"
Créer des rôles
  • Rôles globaux

Les rôles globaux sont applicables sur tous les objets Jenkins sans distinction. Pour créer un rôle global, lui donner un nom dans le champ "Rôle à ajouter" de la section "Rôles globaux" et cliquer sur Ajouter. Le rôle nouvellement créé s'affiche ensuite dans le tableau de la section "Rôles globaux". Affecter ensuite les différents droits désirés dans la matrice.

Exemple de matrice de rôles globaux
  • Rôles de projets

Les rôles de projets permettent de définir des droits de façon plus précise sur les projets Jenkins. Pour créer un rôle de projet, lui donner un nom dans le champ "Rôle à ajouter" de la section "Rôles de projets", lui affecter un "Patron" à respecter puis cliquer sur Ajouter. Le patron est expression régulière qui doit respecter un schéma de chaîne de caractère correspondant au(x) nom(s) de projet(s) désiré(s). Le rôle nouvellement créé s'affiche ensuite dans le tableau de la section "Rôles de projets". Affecter ensuite les différents droits désirés dans la matrice.

NB : Il est possible de s'aider de l'outil en ligne https://regex101.com/ pour générer des regex (regular expressions). Par exemple, la regex "web*" correspondra à tous les projets commençant par la chaîne de caractères "web".

Exemple de matrice de rôles de projets
  • Slave roles

Il s'agit ici des rôles qui serviront à gérer les instances esclaves de Jenkins. La méthode de création de rôle est la même que pour les "Rôles de projets".

Assigner des rôles

Une fois les rôles définis dans le menu "Gérer les rôles", il est alors possible de les "mapper" (les faire correspondre) avec les groupes et/utilisateurs de l'Active Directory.

La méthode pour faire correspondre un utilisateur/groupe à un rôle est la même pour tout les types de rôles (Rôles globaux, Item roles (Rôles de projets), Node roles (Slave roles)). Il faut saisir l'identifiant du compte de l'utilisateur ou le nom du groupe (la saisie est insensible à la casse) et cliquer sur Ajouter. Cela aura pour effet d'ajouter l'utilisateur ou groupe dans le tableau de la section concernée.

Ensuite, il faut simplement cocher la case correspond au(x) rôle(s) à affecter à l'utilisateur ou groupe précédemment ajouté.

Exemple d'assignation de rôles
Exemple

Par exemple, sur un Jenkins où il y a 5 groupes de jobs à la racine :

  • ServiceA
    • Contenant l'ensemble des projets du service A
  • ServiceB
    • Contenant l'ensemble des projets du service B
  • ServiceC
    • Contenant l'ensemble des projets du service C
  • Presta
    • Contenant l'ensemble des projets sur lesquels travaillent des sociétés externes (sous-traitants)

Dans les dossiers ServiceA, ServiceB et ServiceC se trouvent les projets respectifs des services en question.

Dans le dossier Presta se trouvent un dossier par société externe. Dans chaque dossier de société externe se trouvent les différents projets sur lesquels elle travaille.

Ainsi, les utilisateurs de Jenkins doivent accéder aux différentes ressources de la façon suivante :

  • Tous les utilisateurs, exceptées les sociétés externes, voient les dossiers se trouvant à la racine de Jenkins (ServiceA, ServiceB, ServiceC et Presta).
  • Pour les utilisateurs travaillant sur ServiceA, ServiceB ou ServiceC, ils peuvent uniquement parcourir leur dossier respectif et voir leurs sous-dossiers.
  • Pour les utilisateurs des sociétés externes, ils peuvent se rendre dans le dossier Presta mais ils ne peuvent voir et parcourir que les sous-dossiers correspondants aux projets sur lesquels ils travaillent.
    • Ils ne doivent donc pas voir les dossiers des autres sociétés externes
  • Les administrateurs de Jenkins ont accès à toutes les ressources.

Pour mettre en oeuvre ces droits d'accès, il définir deux rôles globaux :

  • Le rôle "admin" : qui donne tous les droits aux administrateurs
  • Le rôle "user" : qui donne aux utilisateurs authentifiés les accès aux différents menus de base de Jenkins

Il faut ensuite définir les rôles de projets en fonction des besoins ci-dessus :

  • Pour chaque dossier ServiceA, ServiceB et ServiceC, il faut créer le rôle avec son parton associé de la forme '""ServiceA" -> "^ServiceA.*" par exemple.
    • De cette manière, les utilisateurs auront accès à toute l'arborescence de leur dossier.
    • Les droits à affecter dépendent du besoin.
  • Pour le dossier Presta, il faut créer le rôle '""Presta" avec le parton "Presta".
    • Le droit à affecter est uniquement '"Job/Read".
    • Ainsi, les sociétés externes pourront voir le dossier Presta et se rendre à l'intérieur, rien de plus.
  • Pour les sous-dossiers de Presta, il faudra créer autant de rôles de projets que de sociétés de la forme "SociétéExterne" -> "^Presta/SociétéExterne.*" par exemple.
    • De cette manière, les utilisateurs verront apparaître le dossier SociétéExterne dans le dossier Presta et pourront le parcourir.
    • Les droits à affecter dépendent du besoin.

Enfin, les rôles étant créés, il faudra les assigner de la façon suivante :

  • Rôles globaux :
    • Groupe d'administrateurs Jenkins ==> admin
    • Tous les groupes d'utilisateurs Jenkins ==> user
  • Item roles :
    • Groupes d'utilisateurs internes (ServiceA, ServiceB et ServiceC) ==> ServiceA, ServiceB ou ServiceC
    • Groupe d'utilisateurs externes ==> Presta (obligatoire) et <rôle de projet de la société> (exemple SociétéExterne)