Wiki pédagogique : accueil + navigation + unité-pilote « Identité & SSO »

Daniel Allaire 2026-07-04 15:04:58 -04:00
commit afb1e4d8cc
3 changed files with 169 additions and 0 deletions

37
Home.md Normal file

@ -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.*

97
Identité-et-SSO.md Normal file

@ -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.

35
_Sidebar.md Normal file

@ -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/`