alliance-boreale/docs/politiques/POL-OBS-LOG-001 — Contrat de journalisation (Logs) — Référence Loki.md
Dan Allaire ef98fd8a3f Refonte
2026-03-09 18:23:06 -04:00

219 lines
No EOL
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# POL-OBS-LOG-001 — Contrat de journalisation (Logs) — Référence Loki
**Version :** 1.0
**Date :** 25 janvier 2026
**Cycle de Réalignement Boréal :** CRB-3
**Statut :** Obligatoire (référence vivante)
**Portée :** C3 (Observabilité fédérée), C5 (Pivot), C6C8 (Tenants), Membres affiliés
---
## 1. Objet
Définir le **contrat minimal** de collecte, transport, étiquetage, rétention, accès et preuves pour les logs,
avec **Loki** comme backend de référence.
Cette politique vise explicitement la simplicité dadoption par les petits membres :
- un endpoint standard,
- une configuration “copier-coller” (agent),
- un jeu de labels minimal,
- un modèle daccès via SSO.
---
## 2. Principes invariants
### 2.1 Adjacent-only (obligatoire)
- Les logs **ne contournent jamais** le pivot.
- Chemin normatif : **C6 → C5 → C3** (tenant vers pivot vers fédération).
### 2.2 Séparation Fédération / Tenants
- Les tenants sont isolés en lecture/écriture.
- La Fédération peut opérer et auditer sans exposer les couches internes.
### 2.3 Simplicité opératoire
- Un petit membre na pas à comprendre le multi-tenant.
- Lisolation est assurée **par le Pivot (C5)**.
---
## 3. Référence technique
### 3.1 Backend
- **Loki** = backend de logs de référence.
### 3.2 Visualisation / requêtes
- **Grafana** = interface de consultation de référence.
### 3.3 Agent de collecte
- **Grafana Alloy** = agent recommandé par défaut.
- Autres agents acceptés si :
- ils supportent lingestion Loki via HTTP(S),
- ils respectent les labels et les contraintes de cette politique,
- ils nintroduisent pas de labels à haute cardinalité.
---
## 4. Points dentrée (endpoints) — standardisation
### 4.1 Ingestion (écriture)
- Endpoint unique via le Pivot (C5) : `https://logs.pivot.<membre>.alliance-boreale.ca/...`
- Interdiction : accès direct tenant → Loki (C3).
### 4.2 Consultation (lecture)
- Accès Grafana via Pivot (C5) (reverse-proxy) + SSO (Keycloak).
> Note : Le chemin exact (`/loki/api/v1/push`, etc.) est défini par limplémentation du Gateway,
> mais linvariant est : **une URL unique, TLS obligatoire, auth obligatoire**.
---
## 5. Authentification & autorisation
### 5.1 Lecture (Grafana)
- SSO via **Keycloak** (OIDC/SAML).
- RBAC : permissions par organisation/tenant et par rôle (admin, ops, lecteur).
### 5.2 Écriture (agents)
Mode recommandé (simple) :
- Token dingestion (Bearer) par organisation/tenant, délivré/provisionné via le Pivot.
- Le secret est stocké comme **secret** (Vault ou mécanisme équivalent), jamais en clair dans un repo.
Mode alternatif (si requis) :
- mTLS avec certificats gérés par la Fédération.
---
## 6. Isolation (multi-tenant) — masquée pour les petits
### 6.1 Principe
- Le Pivot (C5) est responsable dassigner lisolement tenant (ex. injection dun identifiant dorganisation).
- Les petits membres/tenants ne manipulent pas lidentifiant disolation.
### 6.2 Interdictions
- Un agent ne doit pas pouvoir écrire dans un autre tenant.
- Toute tentative daccès hors périmètre est loggée et alertée.
---
## 7. Labels (schéma Boréal) — minimal et stable
### 7.1 Labels obligatoires (MVP)
Chaque stream de logs DOIT inclure au minimum :
- `org` : organisation ou tenant (valeur stable)
- `env` : `prod | preprod | dev`
- `service` : nom stable du service (ex. `pivot-api`, `forgejo`, `nextcloud`, `tenant-app`)
- `member` : code membre (ex. `czp`, `mtl`, `qc2`)
### 7.2 Labels optionnels (avec prudence)
- `host` : nom machine/VM (stable)
- `layer` : couche (`c3`, `c5`, `c6`, etc.) si utile
### 7.3 Interdictions (cardinalité)
Il est strictement interdit de promouvoir en labels des valeurs à haute cardinalité, incluant (non exhaustif) :
- `trace_id`, `span_id`, `request_id`, `session_id`
- `user_id`, `email`, identifiants personnels
- timestamps, UUIDs, numéros de commande, adresses IP client
Ces valeurs doivent rester dans le **contenu** du log (requêtables), pas dans les labels.
---
## 8. Qualité des logs (hygiène minimale)
### 8.1 Format recommandé
- JSON structuré si possible (clé/valeur), sinon logfmt.
- Les champs sensibles doivent être masqués (redaction) avant expédition.
### 8.2 Données sensibles
- Ne pas expédier de secrets (tokens, clés, mots de passe).
- Ne pas expédier de données personnelles non nécessaires.
- Si un tenant a des contraintes particulières, il doit fournir une règle de redaction.
---
## 9. Rétention & classes de service
### 9.1 Rétention par défaut (standard)
- **14 jours** (sauf exception documentée).
### 9.2 Exceptions
- Toute rétention supérieure (ex. “régulé”) doit être :
- justifiée,
- validée par gouvernance (C3),
- accompagnée de preuves (stockage, coûts, risques, contrôles).
---
## 10. Quotas & protection
Le Pivot (C5) doit appliquer :
- quotas dingestion (taux, volume/jour),
- limites de taille par entrée,
- protections anti-boucle / anti-tempête (burst control),
- blocage ou mise en quarantaine en cas de non-conformité (labels interdits, volumes anormaux).
---
## 11. Preuves minimales (audit)
Pour être “conforme POL-OBS-LOG-001”, les preuves suivantes doivent être disponibles :
1. Configuration du Gateway (C5) : TLS, auth, routage, quotas.
2. Configuration Loki (C3) : rétention, stockage, limites, accès.
3. Exemple de configuration agent (Alloy) “copier-coller” (template).
4. Démonstration : une requête Grafana/Loki qui retourne des logs dun service donné.
5. Journal des incidents de non-conformité (tentatives cross-tenant, labels interdits).
---
## 12. Non-conformité & remédiation
### 12.1 Détection
- Toute violation (labels interdits, volumétrie anormale, tentative cross-tenant) déclenche :
- un événement de sécurité/opérations,
- une entrée de traçabilité (ΔLog / incident).
### 12.2 Réponse
- Quarantaine du flux (au pivot) si nécessaire.
- Correction du template agent.
- Ajustement des politiques si apprentissage systémique requis.
---
## 13. Annexes
### A) Requête Loki (exemple conceptuel)
- `{org="t001", env="prod", service="pivot-api", member="czp"}`
### B) Convention de nommage (rappel)
- Conformité à la Nomenclature v3 pour VMID, DNS, et segmentation par couche.