From 3964a712b1fb9f4786d1c673e0589041b75a8886 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sat, 4 Jul 2026 14:59:10 -0400 Subject: [PATCH] =?UTF-8?q?wiki=20:=20socle=20p=C3=A9dagogique=20+=20unit?= =?UTF-8?q?=C3=A9-pilote=20=C2=AB=20Identit=C3=A9=20&=20SSO=20=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Set-OPS comme compagnon pédagogique : chaque service = une lentille sur un fondamental TIC, méthodes génériques (on apprend OIDC, pas Keycloak). Socle (source versionnée dans wiki/, à publier dans le wiki Forgejo) : - Home : cadrage (moteur souverain ET outil d'apprentissage) ; - _Sidebar : navigation (~15 unités, pilote active, reste à venir) ; - Identité-et-SSO : unité-pilote, moule à 4 temps (concept → Set-OPS → transférable → à toi de jouer) avec exercices casse-répare. Le wiki pointe vers docs/ (anti-dérive), ne le recopie pas. Co-Authored-By: Claude Opus 4.8 --- wiki/Home.md | 37 ++++++++++++++++ wiki/Identité-et-SSO.md | 97 +++++++++++++++++++++++++++++++++++++++++ wiki/README.md | 18 ++++++++ wiki/_Sidebar.md | 35 +++++++++++++++ 4 files changed, 187 insertions(+) create mode 100644 wiki/Home.md create mode 100644 wiki/Identité-et-SSO.md create mode 100644 wiki/README.md create mode 100644 wiki/_Sidebar.md diff --git a/wiki/Home.md b/wiki/Home.md new file mode 100644 index 0000000..9e82df4 --- /dev/null +++ b/wiki/Home.md @@ -0,0 +1,37 @@ +# Set-OPS — moteur souverain **et** compagnon pédagogique + +Bienvenue. **Set-OPS** est le moteur Ansible qui déploie un **écosystème numérique souverain +complet** (Alliance Boréale · *tout est libre*). Mais c'est aussi, et volontairement, un **outil +pédagogique** : il instancie *pour de vrai* la quasi-totalité des **fondamentaux des TIC**, avec +des **méthodes 100 % génériques**. + +## Deux usages, un seul système +- **Exploiter** : monter et opérer un écosystème réel (PKI, identité, courriel, DNS, observabilité, + supervision, sauvegardes…). +- **Apprendre** : chaque service est une **lentille sur un fondamental**. Tu n'apprends pas + « Keycloak » — tu apprends le **SSO/OIDC**. Pas « step-ca » — la **PKI**. Ces savoirs se + **transfèrent partout** (Active Directory, Okta, Vault, n'importe quel DNS…). + +## Comment ce wiki est organisé +| Section | Contenu | +|---|---| +| **Unités d'apprentissage** | Un fondamental TIC par page, toujours selon le même moule (ci-dessous). | +| **Opérations (runbooks)** | Procédures : ajouter un service, déployer un nœud, restaurer une sauvegarde… | +| **Glossaire** | Les concepts-clés (liaisons/bindings, le plancher, idempotence…). | +| **Référence technique** | Le *détail du « comment »* vit **dans le dépôt** (`docs/`, README des rôles) — ce wiki y **pointe**, ne le **recopie pas** (pour éviter la dérive). | + +## Le moule d'une unité d'apprentissage +Chaque unité suit **quatre temps** : + +> **1. Le concept** *(générique, indépendant de tout produit)* +> **2. Comment Set-OPS le fait** *(le vrai, observable dans le lab)* +> **3. Pourquoi c'est transférable** *(les équivalents ailleurs)* +> **4. À toi de jouer** *(observe · interroge · casse · répare)* + +## Par où commencer +👉 **[Identité & SSO](Identité-et-SSO)** — l'unité-pilote (authentification, annuaire, SSO, fédération). + +--- +*Deux axes sont enseignés partout : le **QUOI** (les concepts) et le **COMMENT** (les méthodes de +métier : déclaratif, idempotent, vérifier-avant-déployer, restaurer-pour-prouver, durcir). C'est la +culture d'un artisan du numérique souverain.* diff --git a/wiki/Identité-et-SSO.md b/wiki/Identité-et-SSO.md new file mode 100644 index 0000000..2bb144e --- /dev/null +++ b/wiki/Identité-et-SSO.md @@ -0,0 +1,97 @@ +# Identité & SSO + +> **Unité d'apprentissage** — une lentille sur un fondamental des TIC. +> Moule : ① le concept → ② comment Set-OPS le fait → ③ pourquoi c'est transférable → ④ à toi de jouer. + +--- + +## ① Le concept *(générique)* + +**Authentification vs autorisation** — deux questions distinctes, souvent confondues : +- *Authentifier* = **qui es-tu ?** (prouver son identité, ex. mot de passe). +- *Autoriser* = **as-tu le droit ?** (permissions une fois identifié). + +**L'annuaire** = la **source de vérité** des identités. Un seul endroit où existent les comptes ; +tout le reste s'y réfère. Une identité, un mot de passe — partout. + +**SSO (Single Sign-On)** = **une** authentification donne accès à **N** services, sans se +reconnecter à chacun. + +**OIDC / OAuth2** = le **protocole standard** du SSO web. L'application ne voit jamais ton mot de +passe : elle **délègue** la connexion à un *fournisseur d'identité* (IdP), qui lui renvoie un +**jeton** signé prouvant qui tu es. + +**Fédération** = un système d'identité en **délègue** un autre (ex. l'IdP lit les comptes depuis +l'annuaire, sans les recopier). + +--- + +## ② Comment Set-OPS le fait *(le vrai, dans le lab)* + +Trois pièces, un rôle chacun : + +| Pièce | Rôle | Concept incarné | +|---|---|---| +| **OpenLDAP** (`serveur_openldap`) | l'**annuaire** — la source de vérité. `testmail` y vit. | annuaire | +| **Keycloak** (`serveur_keycloak`) | le **fournisseur d'identité** (IdP) SSO. Il **fédère** OpenLDAP (lit les comptes en LDAP, lecture seule). | SSO, OIDC, fédération | +| **oauth2-proxy** (`serveur_oauth2_proxy`) | une **passerelle** OIDC pour les apps **sans** OIDC natif. | motif *proxy d'authentification* | + +Les applications se branchent de deux façons : +- **OIDC natif** — Grafana, Forgejo → bouton « *Se connecter avec Chezlepro* ». +- **Sans OIDC** — Icinga Web 2 → placé **derrière oauth2-proxy**, qui fait l'OIDC à sa place. + +**Le flux, quand `testmail` ouvre Grafana :** +``` +Navigateur ──> Grafana : "connecte-moi" +Grafana ──> redirige vers Keycloak (IdP) +Keycloak ──> demande le mot de passe ; le VÉRIFIE contre OpenLDAP (fédération) +Keycloak ──> renvoie au navigateur un CODE +Navigateur──> Grafana échange le code contre un JETON signé +Grafana ──> crée la session : "tu es testmail" ✔ +``` +Résultat : **une identité** (`testmail`, un seul mot de passe LDAP) ouvre **le courriel, Grafana, +Forgejo et Icinga**. Change le mot de passe une fois, il change partout. + +--- + +## ③ Pourquoi c'est transférable + +Tu n'as pas appris « Keycloak ». Tu as appris **l'annuaire + OIDC + la fédération + le motif +passerelle**. Le même schéma existe partout : + +| Set-OPS | Équivalents ailleurs | +|---|---| +| OpenLDAP | Active Directory · FreeIPA · 389-DS | +| Keycloak | Entra ID (ex-Azure AD) · Okta · Authentik · Zitadel | +| oauth2-proxy | tout reverse-proxy OIDC (Traefik ForwardAuth, Pomerium…) | +| Fédération LDAP→IdP | AD → ADFS/Entra ; annuaire → n'importe quel IdP | + +Change les produits, le **schéma reste**. C'est ça, un savoir générique. + +--- + +## ④ À toi de jouer + +> Prérequis : accès au lab (VPN), `/etc/hosts` pointant les services sur l'edge. + +1. **Vis le SSO.** Ouvre `https://grafana.lab.chezlepro.internal` → « *Se connecter avec + Chezlepro* » → `testmail`. Puis ouvre Forgejo, puis Icinga : **tu n'es reconnecté nulle part**. +2. **Observe le flux.** Rouvre Grafana en navigation privée, ouvre les outils dév (F12 → Réseau) : + repère la **redirection vers Keycloak**, puis le **retour avec un `code=`**. C'est ① en action. +3. **Interroge l'annuaire (la source de vérité).** Sur un nœud avec `ldap-utils` : + ```bash + ldapsearch -x -H ldaps://id-ldap-01.lab.chezlepro.internal \ + -b ou=people,dc=lab,dc=chezlepro,dc=internal '(uid=testmail)' + ``` + Tu vois l'entrée que Keycloak **fédère** — il ne l'a pas recopiée. +4. **Casse & répare (la fédération).** Dans la console admin Keycloak → *User Federation* → + désactive le fournisseur LDAP. Reconnecte-toi : **échec** (l'IdP ne voit plus l'annuaire). + Réactive : ça remarche. Tu viens de *sentir* la dépendance **requise** entre l'IdP et l'annuaire. + +--- + +## Pour aller plus loin *(référence technique — dépôt)* +- Rôles : `roles/serveur_openldap`, `roles/serveur_keycloak`, `roles/serveur_oauth2_proxy`. +- Passerelle générique : `roles/serveur_oauth2_proxy/` (README) — placer du SSO devant *toute* app. +- Thème de connexion (identité Alliance) : `roles/serveur_keycloak/files/themes/alliance-boreale/`. +- Concept de liaison **requise** (IdP ⟶ annuaire) : `docs/bindings-conception.md` §11. diff --git a/wiki/README.md b/wiki/README.md new file mode 100644 index 0000000..51d9e49 --- /dev/null +++ b/wiki/README.md @@ -0,0 +1,18 @@ +# wiki/ — source du wiki pédagogique + +Ce dossier est la **source versionnée** du wiki Set-OPS (accueil, unités d'apprentissage, +runbooks, glossaire). Il est **publié** dans le wiki Forgejo du dépôt (`.wiki.git`) — le dépôt +reste la source, le wiki Forgejo la vue browsable et web-éditable. + +- `Home.md` — page d'accueil (cadrage : moteur souverain **et** compagnon pédagogique). +- `_Sidebar.md` — navigation. +- `Identité-et-SSO.md` — **unité-pilote** (le moule : concept → Set-OPS → générique → à toi de jouer). + +**Moule d'une unité** : ① le concept (générique) · ② comment Set-OPS le fait (le vrai) · +③ pourquoi c'est transférable · ④ à toi de jouer (observe/interroge/casse/répare). + +**Principe** : le wiki *enseigne* et *oriente* ; il **pointe** vers `docs/` et les README de rôles +pour le détail technique — il ne les **recopie pas** (anti-dérive). + +**Publication** (à faire une fois le socle validé) : cloner le dépôt wiki Forgejo et y pousser ces +pages (les noms de fichiers `Titre-Avec-Tirets.md` deviennent « Titre Avec Tirets » dans l'UI). diff --git a/wiki/_Sidebar.md b/wiki/_Sidebar.md new file mode 100644 index 0000000..6e81cba --- /dev/null +++ b/wiki/_Sidebar.md @@ -0,0 +1,35 @@ +### Set-OPS +[🏠 Accueil](Home) + +**Unités d'apprentissage** + +*Fondations* +- [Identité & SSO](Identité-et-SSO) ✅ +- PKI & confiance *(à venir)* +- DNS & résolution de noms *(à venir)* + +*Communication* +- Reverse-proxy & TLS *(à venir)* +- Courriel (SMTP/IMAP) *(à venir)* + +*Données* +- Bases de données *(à venir)* +- Cache *(à venir)* +- Sauvegardes (3-2-1) *(à venir)* + +*Observabilité* +- Métriques & journaux *(à venir)* +- Supervision & impact *(à venir)* + +*Socle & méthode* +- Virtualisation & clonage *(à venir)* +- Sécurité & durcissement *(à venir)* +- Infra as Code & idempotence *(à venir)* +- Liaisons (bindings) *(à venir)* + +**Opérations** +- Runbooks *(à venir)* + +**Repères** +- Glossaire *(à venir)* +- Référence technique → dépôt `docs/`