# 2025/09/13 (Neutriton : SSO le re-re-retour) * [Réunion précédente](https://wiki.neutrinet.be/fr/rapports/2025/06-28) * [Pad de la réunion](https://doc.neutrinet.be/neutriton-2025-09-13#) Heure de début : trop tôt :+1: :+1: :-1: Présences : HgO, Célo, Tharyrok ## Météo *Moment informel durant lequel on exprime **en peu de mots** comment on se sent et si on a une attente forte pour la réunion.* **Ce n'est pas un moment de discussion mais d'expression individuelle et ce n'est pas obligatoire :-)** ### Attente(s) forte(s) *Si l'une ou l'autre personne exprime une attente forte, merci de vous en occuper en priorité ou de la noter dans le hub ou dans un point approprié.* FIN: 16h ## Dans le passé TODO: - Installer une instance de dev de Authentik dans le cluster patata - S'amuser avec l'instance (enfin bon ça reste du SSO), avec une application bidon ## Installation IL y a un point qu'on n'a pas discuté la fois dernière, qui a un peu bloqué Tharyrok pour l'installation. Authentik ne fournit que des images docker. Derrière, c'est du Django / Python avec un frontend nodejs et peut-être du proxygo. L'installer en bar métal risque d'être compliqué. Du coup, est-ce qu'on utiliserait pas la version dockerisée de Authentik ? A priori, il vaut mieux utilser ce qui est proposé en docker que de compliquer les choses. L'enjeu est aussi la maintenance à long terme. https://github.com/goauthentik/authentik/blob/main/Dockerfile On peut créer un fichier personnalisé pour docker sans certaines lignes qui ne nous intéressent pas. https://github.com/goauthentik/authentik/blob/main/docker-compose.yml L'idée ce serait de faire l'install en dehors de la réunion (il faut juste décider qui veut le faire), mais on peut tester l'app pendant ce Neutriton. Il nous faut : - Une instance Authentik de test : https://authentik.mnl.neutri.net:9443/ - Une app à tester On peut partir sur Proxmox: https://integrations.goauthentik.io/hypervisors-orchestrators/proxmox-ve/ Authentik a déjà centralisé pas mal d'applications, par exemple : https://integrations.goauthentik.io/chat-communication-collaboration/nextcloud/ (si une app n'est pas reprise, cela ne veut pas dire qu'elle n'est pas compatible avec Authentik : il faut juste qu'elle supporte openid ou saml par exemple) Un article qui explique le fonctionnement de Authentik: https://une-tasse-de.cafe/blog/goauthentik/ En résumé, on a des stages, des flows et des policies. Un flow est une suite de stages, et les stages sont des actions soit de l'utilisateur soit du serveur. Il y a des flows déjà existants dans Authentik, qu'on peut venir modifier en rajoutant des stages ou des policies. Une policies permet de valider ou rejeter une stage. Question de la gestion des utilisateur·ice·s. Dans Keycloak, on avait fait des realm par type d'environnement. Est-ce qu'on peut aussi faire cela dans Authentik ? Ce serait un peu s'arracher les cheveux, et c'est déjà compliqué à ce niveau pour certains. On pourrait le refaire, mais ce n'est pas évident que ce soit pertinent. A priori, c'était surtout pour le dev, pour donner des accès spécifiques sur les instances de dev. Mais pour Tharyrok, on pourrait avoir un autre SSO pour les instances de dev, quelque chose de moins lourd qu'Authentik. Par exemple Authelia : pas besoin d'envoyer des emails, juste d'avoir des utilisateur·ice·s configurés qu'on peut avoir dans gopass. Authentik peut exposer un LDAP, cela pourrait être intéressant pour certaines applications qui ne comprennent rien aux protocoles SSO, comme par exemple pfsense ou les idracs. Il peut aussi exposer un serveur Radius. Par exemple, on pourrait mettre l'authentification des switchs via Authentik. On a une application Proxmox à connecter avec le SSO. On va le faire ensemble pour qu'on soit toustes au même niveau. Ensuite, comme devoir il faudra faire une app chacun·e de son côté. Une prochaine étape, ce serait d'avoir des blueprints qui permettent de tout configurer avec des fichiers Yaml, et donc d'automatiser tout ça via Ansible. Mais est-ce que c'est mieux de faire ça plutôt que de passer par l'interface graphique, sachant qu'on n'a pas 3000 milliards d'applications à configurer. ## Config sso proxmox https://authentik.mnl.neutri.net:9443/ On se base sur : https://integrations.goauthentik.io/hypervisors-orchestrators/proxmox-ve/ Dans le menu Application (colonne de gauche), on utilise l'option : "Create with provider". On rempli les champs, le nom, le slug. Le groupe est optionnel. Pour le groupe, on se dit qu'on grouperait pas hub, ici hub infra. Pour les politiques, on a le choix entre aucune ou toutes. Pour le moment, on n'en n'a pas, donc on va choisir any. On pourra le changer par la suite. Dans UI, la "launch URL" est l'URL affichée lorsqu'on clique sur le logo. Ce n'est pas nécessaire de remplir. On choisit ensuite un tupe de provider. Ici, on prend Oauth2/OpenID Connect comme indiqué dans la doc. On choisit le "Authorization flow". C'est le consentement. Ici on va faire du implicite parce que ce sera toujours des services internes. On n'a pas besoin qu'authentik demande si c'est ok de transmettre les infos. Si c'était une autre entreprise à laquelle on déléguait les infos, on devrait l'annoncer aux utilisateur·ice·s. Ici, on a le choix entre confidentiel et public. Public ne peut pas garder la confidentialité. Confidentiel : l'application (ici Proxomox) va contacter authentik pour valider le token -> on peut avoir un secret car il n'est pas exposé. En public, on n'aurait par exemple une app javascript web pour gérer l'authentification, et là on ne peut pas avoir de secret car il serait dans le code javascript, lisible dans le naviguateur. Donc en public l'authentification se ferait un peu autrement. On copie / colle le client ID et le Client secret ailleurs par ce qu'on en aura besoin pour configurer l'application. Strict ou REGEX, on choisit Strict et on met l'URL ou l'IP. Ici, on va mettre l'IP du proxmox et le port. Pour les signing key, on n'en a qu'une par défaut. On prend celle-là. On ne chiffre pas. Pour les Authentification Flow, on a actuellement deux Flow préconfigurés. Le default-authentification-flow et "default-source-authentification". On voit les détails dans la rubrique "Flows and stages". default-authentification-source, c'est quand on vient d'un provider externe. Ici, on laisse le défault. A priori, on ne change rien dans "Advanced flow settings". On ne fait rien dans "Configure Bindings". C'est optionnel. Si jamais on devait mapper du côté authentik le nom d'un groupe qui ne va pas être le même dans Nextcloud -> par exemple group dans authentik vers groups dans Nextcloud, on doit utiliser ça. On soumet les données et cela créer une entrée dans le dashboard. On peut customiser l'image qui apparait. On se connecte ensuite à Proxmox pour configurer les choses du côté de Proxmox. On suit la doc et on remplit les champs avec les infos, notament le secret copié précédemment. On coche auto-create users. On peut créer des groupes aussi ![](https://s3.neutrinet.be/hedgedoc/uploads/e2458a2d-d367-4d49-b985-b2f73b629ac5.png) On se rend sur le proxmox et on voit qu'on a l'option OpenID, mais on rencontre un message d'erreur lié au fait que le certificat d'Authentik n'est pas signé. ``` OpenID redirect failed. Request failed: ureq request failed - https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (self-signed certificate): https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (self-signed certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (self-signed certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (500) ``` Ensuite celle-ci : ``` OpenID redirect failed. Request failed: ureq request failed - https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (500) ``` ``` OpenID redirect failed. Request failed: ureq request failed - https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): https://authentik.mnl.neutri.net:9443/.well-known/openid-configuration: Connection Failed: native_tls connect failed: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (unable to get local issuer certificate): error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:../ssl/statem/statem_clnt.c:1889: (500) ``` On doit générer un custom CA: ``` openssl genrsa -out myCA.key 2048 openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem ``` Puis on crée le certificat signé avec notre custom CA: ``` openssl genrsa -out authentik.key 2048 openssl req -new -key authentik.key -out authentik.csr # attention, mettre authentik.mnl.neutri.net pour le CN openssl x509 -req -in authentik.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out authentik.crt -days 825 -sha256 ``` Pour gérer les certificats, on va dans Authentik, on va dans System -> certificate. On ajoute le certificat créé localement dans l'interface de Authentik et on l'ajoute dans proxmox dans /usr/local/share/ca-certificate/authentik.crt. Dans Authentik, dans System -> Brand -> Update Brand -> on choisit le bon certificat. Il faut que le certificat ait le nom de l'instance Authentik. Mais ça ne marche toujours pas. Tharyrok fait de la magie avec un : ``` scp Downloads/authentik.mnl.neutri.net_certificate.pem 10.0.10.14:/tmp/ mv /tmp/authentik.mnl.neutri.net_certificate.pem /usr/local/share/ca-certificates/authentik.mnl.neutri.net_certificate.crt update-ca-certificates --verbose --fresh ``` Et ça marche \o/ L'option "fresh" recrée tous les liens symboliques. Une fois connecté, on est automatiquement connecté avec le user "neutrinet" (qui n'a pas de droit) puisque c'est le user avec lequel on est connecté dans authentik. Pour avoir des droits, il faut rajouter l'utilisateur neutrinet dans le groupe neutrinet du proxmox. ## Les prochaines étapes - installer un authentique authentik en prod (Tharyrok) - poursuivre la réflexion sur comment on structure les accès dans Neutrinet (cf. Neutriton gestionnaire de mots de passe) - tester avec nos comptes personnels, sans laisser la possibilité de créer d'autres comptes, avec certaines applications qu'on doit connecter. Les applications qu'on veut connecter au SSO : OpenID : - Nextcloud - Zammad - Mattermost (mais il faut une licence) - Grav (teamrecup.be, neutrinet.be, et le site beta) - Dokuwiki - Accounting - Backoffice (à voir) - Librenms - Hedgedoc - Stalwart (comptes admin) - VaultWarden - Odoo (à voir) ldap - mikrotik (switch backbone) - idrac - dell san Mobilizon, ce serait éventuellement dans le second SSO pour nos services chez Mémé. Le SSO "CHATONS" (notre SSO chaton s'appellera Miaosss.chez-meme.be) Dans la réflexion sur comment on structure nos comptes, ce serait bien d'avoir deux types de comptes pour les personnes du hub infra, un compte perso pour les services de Neutrinet et un compte admin pour l'administration sur lequel on forcerait l'authentification. {pseudo}_unicorn Il faudrait cependant voir pour masquer ces comptes dans Mattermost ou faire que ces comptes ne puissent pas être mentionnés. A priori, c'est possible dans la version payante. C'est peut-être possible aussi d'avoir des comptes admins sans équipes. Nos comptes perso auraient alors uniquement des droits de modération, ce qui est suffisant. Avec le compte, on ne verrait pas Proxmox dans le dashboard de Authentik TODO: - Célo et HgO s'entraînent à créer des applications chacun·e de leur côté, et se voient en cas de problème ## Prochaine réunion Prochaine réunion : Neutriton gestion des accès le 29/11 à 10h30 Lieu : chez Célo Garde-Pad : Célo ## Météo de fin *Moment informel durant lequel on exprime **en peu de mots** comment, à titre personnel, la réunion a été vécue que ce soit positif ou négatif.* *Si une ou plusieurs **tension est née** durant la réunion, il est peut-être nécessaire d'envisager l'une ou l'autre réunion pour y remédier.* {{tag>hub-infra neutriton}}