Aller au contenu
Développement medium

Exposition sécurisée de la stack souveraine et bilan

10 min de lecture

logo python

Le socle tourne, l'assistant répond — mais rien de tout cela n'est encore joignable en sécurité. Cette dernière étape du fil rouge place une façade devant la stack : Traefik termine le TLS, redirige le trafic en clair, et impose une authentification avant le moindre accès au service. Le backend, lui, n'est jamais exposé directement. Le guide montre la façade Traefik validée, présente l'authentification de production avec authentik en forward-auth, puis dresse le bilan : observabilité de la stack et comparaison de coûts avec une approche par API tierce. Public visé : développeur prêt à rendre la stack souveraine utilisable par de vrais utilisateurs.

  • Placer Traefik en façade d'une stack et router vers un backend non exposé.
  • Terminer le TLS et rediriger HTTP vers HTTPS.
  • Imposer une authentification avant d'atteindre le service.
  • Le principe d'authentik en forward-auth pour la production.
  • Lire le bilan : observabilité et coûts de la stack.

Jusqu'ici, les services de la stack étaient liés à 127.0.0.1 — joignables depuis l'hôte, invisibles ailleurs. Pour servir de vrais utilisateurs, il faut une porte d'entrée, et une seule : un reverse proxy.

Traefik joue ce rôle. Il est le seul composant exposé au réseau ; tout le reste vit derrière lui. Il découvre les services via le provider Docker, et route chaque requête vers le bon backend selon des règles.

assistant:
image: traefik/whoami:v1.10.3@sha256:...
networks:
- exposition
# Aucune clé "ports" : le backend n'a pas de surface d'exposition.
labels:
- "traefik.enable=true"
- "traefik.http.routers.assistant.rule=PathPrefix(`/`)"
- "traefik.http.routers.assistant.entrypoints=websecure"
- "traefik.http.routers.assistant.tls=true"

Le point décisif : le backend n'a aucune ligne ports. Il n'est joignable que par Traefik, sur le réseau interne. Le lab du guide remplace l'assistant par whoami — un service de diagnostic minimal — pour valider la façade ; le principe est identique avec le vrai assistant.

Une stack exposée sans chiffrement laisse passer les questions des utilisateurs et les réponses en clair. Traefik termine le TLS : il présente le certificat, déchiffre, et transmet en clair au backend sur le réseau interne — qui, lui, n'est pas exposé.

command:
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"

Deux points d'entrée sont déclarés : web (HTTP, port 80) et websecure (HTTPS, port 443). La directive de redirection envoie tout le trafic HTTP vers HTTPS — aucune requête en clair n'atteint le service.

Le TLS protège le transport ; il ne dit pas qui a le droit d'entrer. Il faut une authentification, et elle doit s'appliquer avant que la requête n'atteigne le backend.

Traefik exprime cela par un middleware — un traitement inséré sur la route. Le middleware d'authentification intercepte chaque requête : sans identifiants valides, elle est rejetée ; le backend n'est jamais sollicité.

labels:
- "traefik.http.routers.assistant.middlewares=gate"
- "traefik.http.middlewares.gate.basicauth.usersfile=/users.htpasswd"

Le lab utilise l'authentification basique — un fichier de comptes — pour valider le mécanisme : une requête sans identifiants reçoit un 401, une requête authentifiée atteint le backend. Le test le vérifie dans les deux sens. C'est le patron qui compte : un middleware ferme la route, et rien ne passe sans y être autorisé.

L'authentification basique suffit à un lab, pas à un service réel : pas de gestion d'utilisateurs, pas de session, pas de double facteur. En production, on remplace le middleware basique par un forward-auth branché sur authentik.

Le forward-auth est un middleware Traefik d'un genre particulier : à chaque requête, il interroge un service d'authentification — ici authentik. Si l'utilisateur a une session valide, la requête passe ; sinon, authentik le redirige vers une page de connexion. L'authentification cesse d'être une affaire de Traefik : elle devient le métier d'un fournisseur d'identité complet.

# Le middleware interroge l'outpost authentik avant chaque requête.
- "traefik.http.middlewares.authentik.forwardauth.address=http://authentik:9000/outpost.goauthentik.io/auth/traefik"

authentik apporte alors tout ce que la basic-auth n'a pas : comptes et groupes, session, double authentification, connexion à un annuaire, OAuth/OIDC. Le guide sur l'authentification MCP déploie authentik pas à pas — c'est le même service d'identité, ici branché en forward-auth plutôt qu'en fournisseur OAuth.

Une stack en production se surveille. L'observabilité de la stack souveraine se construit à trois niveaux, déjà rencontrés dans le parcours.

Les journaux structurés d'abord : chaque composant — l'assistant, Traefik, la passerelle — émet des enregistrements exploitables. Le guide sur le RAG en production a montré comment journaliser chaque requête de l'assistant : question, sources, latence.

Les métriques ensuite : Traefik expose un endpoint de métriques — nombre de requêtes, codes de réponse, latences. La passerelle LiteLLM suit la consommation des modèles. Agrégées, ces métriques montrent l'état de santé du service.

La traçabilité du RAG enfin : pour un assistant, savoir pourquoi une réponse a été donnée — quels chunks, quelles sources — est aussi important que les métriques système. C'est ce que la journalisation de l'assistant rend possible.

À ces trois niveaux techniques s'ajoute la dimension FinOps : l'étape précédente du fil rouge a ajouté un serveur MCP qui mesure les conteneurs, leurs ressources et le coût de la stack. L'observabilité n'est pas un module à part : elle est la somme de ce que chaque composant expose — journaux, métriques, traçabilité RAG et coûts —, rassemblée en un endroit où on peut la lire.

La stack souveraine a un coût — il serait malhonnête de le taire. Mais ce coût a une structure différente de celle d'une approche par API tierce, et c'est cette différence qui guide le choix.

Une approche par API tierce a un coût opérationnel : on paie à l'usage, chaque requête, chaque token. Le coût est nul au repos et croît avec l'usage — sans plafond intrinsèque.

Une stack self-hosted a un coût d'infrastructure : le matériel — un serveur avec GPU — et l'électricité qu'il consomme. Ce coût est fixe : il ne dépend pas du nombre de requêtes. Il est prévisible, connu d'avance.

CritèreAPI tierceStack self-hosted
Structure de coûtÀ l'usage (opérationnel)Fixe (matériel + électricité)
Au reposNulConstant
À fort volumeCroît sans plafondInchangé
DonnéesTransitent par un tiersRestent sur l'infrastructure
Mise en routeImmédiateInstallation à faire

Il n'y a pas de réponse universelle. Pour un usage faible ou irrégulier, l'API tierce évite d'immobiliser du matériel. Pour un usage soutenu, ou dès que la maîtrise des données est un prérequis, la stack self-hosted reprend l'avantage — son coût fixe se dilue dans le volume, et les données ne sortent jamais. Le fil rouge a montré que cette stack est atteignable ; le bilan dit dans quels cas elle est pertinente.

SymptômeCause probableSolution
Le backend est joignable en directUne clé ports traîne sur le serviceLa retirer — seul Traefik expose
404 sur toutes les routestraefik.enable absent ou règle erronéeVérifier les labels du backend
Pas de redirection HTTP → HTTPSRedirection non déclarée sur webAjouter la directive de redirection
Le middleware d'auth ne s'applique pasMiddleware non référencé par le routeurLier le routeur au middleware
Certificat invalide en productionRésolveur ACME non configuréConfigurer Let's Encrypt dans Traefik
  • Traefik est l'unique composant exposé ; tout le reste vit derrière lui.
  • Le backend n'a aucun port publié — il n'est joignable que via le proxy.
  • Traefik termine le TLS et redirige tout le trafic HTTP vers HTTPS.
  • Un middleware impose l'authentification avant le backend.
  • En production, le middleware basique cède la place à authentik en forward-auth.
  • Le coût d'une stack self-hosted est fixe et prévisible — à arbitrer selon le volume d'usage.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn