Maîtriser les permissions dans GitLab CI
Pourquoi le contrôle d'accès est-il vital ?
Dans une usine logicielle moderne, tout le monde n'a pas besoin de posséder les clés de tous les bureaux. Donner un accès total à un stagiaire qui vient d'arriver ou à un client externe présente un risque de sécurité majeur. GitLab utilise un système de permissions granulaires pour s'assurer que chaque membre de l'équipe possède exactement les droits nécessaires à sa mission.
Imaginez que votre projet est un immeuble sécurisé. Le Guest reste à l'accueil, le Reporter peut visiter les bureaux pour inspecter le travail, le Developer possède son propre bureau pour produire et le Maintainer est le gestionnaire qui possède le pass général de l'immeuble. De nos jours, cette rigueur est le socle de la culture DevSecOps.
Niveaux de permissions des utilisateurs
Le tableau suivant résume les capacités de chaque rôle au sein d'un projet. Notez que de nos jours, le rôle historiquement nommé "Master" est définitivement devenu Maintainer pour plus de clarté.
| Action | Guest | Reporter | Developer | Maintainer |
|---|---|---|---|---|
| Créer des tickets et commenter | ✅ | ✅ | ✅ | ✅ |
| Cloner et télécharger le code | ❌ | ✅ | ✅ | ✅ |
| Créer des branches et Merge Requests | ❌ | ❌ | ✅ | ✅ |
| Pousser vers des branches non protégées | ❌ | ❌ | ✅ | ✅ |
| Gérer les Jalons (Milestones) | ❌ | ❌ | ✅ | ✅ |
| Annuler ou relancer des jobs CI/CD | ❌ | ❌ | ✅ | ✅ |
| Ajouter de nouveaux membres | ❌ | ❌ | ❌ | ✅ |
| Pousser vers des branches protégées (main) | ❌ | ❌ | ❌ | ✅ |
| Gérer les Runners et variables secrètes | ❌ | ❌ | ❌ | ✅ |
Permissions spécifiques à GitLab CI/CD
L'automatisation possède ses propres règles de sécurité. Les permissions CI/CD déterminent qui peut manipuler les Pipelines et accéder aux ressources critiques comme le registre d'images Docker.
Capacités liées aux Jobs
Lorsqu'un pipeline s'exécute, il utilise les droits de l'utilisateur qui a déclenché le commit. Voici les limitations techniques rencontrées :
- Visualisation : Les Guests et Reporters peuvent voir l'état des jobs, mais ne peuvent pas voir les logs détaillés si ceux-ci contiennent des informations sensibles.
- Nettoyage : Seuls les Developers et rôles supérieurs peuvent supprimer les artefacts (fichiers générés) d'un job.
- Sécurité : Seuls les Maintainers peuvent configurer les Shared Runners (Runners partagés) à l'échelle du projet.
Interaction avec le registre de conteneurs
Le stockage des images Docker est très encadré :
- Pull : Autorisé à partir du rôle Reporter (lecture seule).
- Push/Delete : Strictement réservé au rôle Developer et supérieurs.
Échec de permission
Voici ce qui s'affiche dans votre terminal si vous tentez de pousser du code vers la branche protégée main alors que vous ne possédez que le rôle Developer :
Sortie terminal - Erreur de permission :
git push origin main
Sortie terminal - Erreur de permission :
remote: GitLab: You are not allowed to push code to protected branches on this project.
To https://gitlab.example.com/mon-groupe/mon-projet.git
! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://gitlab.example.com/mon-groupe/mon-projet.git'
Focus sur le LFS
LFS (Large File Storage) est une extension de Git qui permet de gérer les fichiers volumineux (vidéos, graphiques haute résolution) sans ralentir le dépôt. Les permissions LFS suivent strictement les permissions du dépôt : si vous avez le droit de "Push" sur une branche, vous avez le droit d'envoyer vos fichiers LFS associés.
Conclusion
Bien configurer les Permissions est la première étape pour protéger l'intégrité de votre code. Cela permet d'automatiser vos tests en toute confiance, sachant que seules les personnes habilitées peuvent modifier les réglages critiques ou déployer en production.
Maintenant que vous savez "qui a le droit de quoi", nous allons voir comment donner au système les moyens techniques d'agir. Dans le prochain chapitre, nous apprendrons à configurer les GitLab Runners, ces moteurs qui exécutent vos tâches automatisées.
Espace commentaire
Écrire un commentaire
Rejoignez la discussion
Vous devez être connecté pour poster un message.
29 commentaires
Oui, utilise Terraform avec le provider GitLab. C'est la seule façon propre de gérer ça à grande échelle sans cliquer partout.
On peut automatiser la gestion des rôles via un script ?
T'essaies de pousser sur une branche protégée. Utilise une branche de feature :
Mon pipeline échoue systématiquement sur le
git push, le message ditpre-receive hook declined. J'ai pourtant bien fait mongit add.C'est impossible. Si la variable est marquée
Protected, elle n'est injectée que sur les branches protégées, mais leMaintainerest le seul à pouvoir la modifier.Comment je peux empêcher un
Developerde modifier les variables CI/CD protégées ?Pas de souci. Pense à bien auditer tes membres chaque trimestre.
Oui, il peut modifier le
.gitlab-ci.ymlet potentiellement exposer des secrets. Sois prudent avec les upgrades de rôle.Si je passe un
ReporterenDeveloper, il peut tout casser sur la CI ?Oui, dans les réglages de visibilité du projet.
Settings > General > Visibility. Mais attention, ça expose tes noms de branches.J'ai vu que certains
Guestpeuvent voir les pipelines. C'est configurable ?Tu dois être
Developerminimum. Sinon, lance ça via l'API ou supprime le pipeline complet si t'as les droits.J'ai besoin de supprimer des artefacts de build pour libérer de l'espace, comment faire ?
Le
Ownerpeut supprimer le projet et gérer la facturation. LeMaintainergère juste le code et la CI. Ne donne jamais Owner à quelqu'un qui n'a pas besoin de gérer le groupe.C'est quoi la différence entre
MaintaineretOwnerau final ?T'es peut-être sur un projet privé. Vérifie ton login Docker :
J'ai un souci avec mon
Docker Registry, j'ai une erreur 403. Je suisDeveloperpourtant.Oui, si les logs contiennent des secrets ou des infos sensibles, GitLab restreint la visibilité. Passe
Developerpour tout voir.Je suis
Reporteret je vois pas les logs de mon job. C'est normal ?Tu ne peux pas vraiment via Git. Utilise l'API GitLab avec un
Personal Access Token:Comment je peux lister mes permissions actuelles via le CLI ?
Exactement. Si ton push est rejeté, le transfert
LFSéchouera aussi. C'est lié au même hookpre-receive.Question bête, le
LFSsuit bien les mêmes règles que le push standard ?Oui,
mainest protégé par défaut. En tant queDeveloper, tu dois bosser sur des branches secondaires et faire une Merge Request. Ne pousse jamais directement surmain.J'ai une erreur
remote: GitLab: You are not allowed to push codealors que je suis bienDeveloper. C'est normal surmain?