feat(ra-console): journal d'audit propre à la console (2b-A) - #41
Merged
Merged
Conversation
Premier morceau de l'étape 2b (docs/WEBUI.md §7, §15) : ra-console n'avait
encore aucun journal d'audit, alors que §7 prévoit qu'elle consigne ce qui
relève de l'usage de la console — connexions, sessions, refus de connexion
(dont les régressions de compteur détectées). Une chaîne distincte de celle
de ca-server, jamais partagée (oe_audit::Log, OPENEIDAS_RA_AUDIT_FILE) : un
ra-console compromis ne peut ni écrire, ni même ajouter de faux événements
dans le journal qui fait foi sur la PKI.
- ra.login_succeeded / ra.login_refused (raison réelle : challenge inconnu,
leurre, clé révoquée, opérateur désactivé, assertion refusée, compteur en
régression — jamais dans la réponse HTTP, uniforme par construction, §16)
- ra.session_opened / ra.session_closed (seulement quand la déconnexion a
réellement fermé une session, pas à chaque rejeu idempotent)
crate::audit::Recorder (même forme qu'oe_ca_core::Recorder/oe_raflow::Recorder,
dupliquée plutôt que partagée entre crates qui ne se recoupent pas autrement),
best-effort : un échec d'écriture du journal ne fait pas échouer une connexion
par ailleurs valide, seulement une trace dans les logs du service.
Prochaines tranches (2b-B/C/D, PROGRESSION.md §5) : un client S3-compatible
auto-hébergé (MinIO/Garage/Ceph, décision utilisateur — jamais AWS, dans
l'esprit souverain qui a déjà guidé oe-replicate en WebDAV) pour que
ca-server et ra-console y écrivent chacun leur journal, puis
GET /api/v1/audit/search pour les relire et les vérifier.
Vérifications : cargo fmt --check, cargo clippy --workspace --all-targets
(1.97 et 1.98.1), cargo test --workspace (avec OE_CASTORE_TEST_DSN, y
compris un test lisant le vrai journal produit), cargo audit. Contrôle par
mutation : la journalisation d'un refus ("leurre") échoue pour la bonne
raison quand on retire l'appel à self.refuse().
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexte
Premier morceau de l'étape 2b (
GET /api/v1/audit/search, docs/WEBUI.md §7, §15). Basedev: 2a (#40) est mergée.Gap trouvé en travaillant sur 2b :
ra-consolen'avait encore aucun journal d'audit, alors que §7 prévoit qu'elle consigne ce qui relève de l'usage de la console — connexions, sessions, refus de connexion (dont les régressions de compteur détectées en 1c-1). Ça n'avait pas été fait pendant 1c.Contenu
ca-server, jamais partagée (oe_audit::Log,OPENEIDAS_RA_AUDIT_FILE) : unra-consolecompromis ne peut ni écrire, ni même ajouter de faux événements dans le journal qui fait foi sur la PKI.ra.login_succeeded/ra.login_refused(raison réelle : challenge inconnu, leurre, clé révoquée, opérateur désactivé, assertion refusée, compteur en régression — jamais dans la réponse HTTP, uniforme par construction, §16).ra.session_opened/ra.session_closed(seulement quand la déconnexion a réellement fermé une session).crate::audit::Recorder, même forme qu'oe_ca_core::Recorder/oe_raflow::Recorder(dupliquée, ces crates ne se recoupent pas autrement), best-effort : un échec d'écriture du journal ne fait pas échouer une connexion par ailleurs valide.Prochaines tranches (décidées avec vous, PROGRESSION.md §5)
oe-replicateen WebDAV) ;ca-servery écrit son journal.ra-consoleécrit le sien sur le même stockage.GET /api/v1/audit/searchlit et vérifie les deux chaînes.oe-replicaten'est pas remplacé (il reste utile pour qui préfère WebDAV) ; il n'était de toute façon câblé dans aucun binaire.Vérifications
cargo fmt --checkcargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1)cargo test --workspace(avecOE_CASTORE_TEST_DSN) : vert, y compris un test qui relit le vrai journal produitcargo audit --ignore RUSTSEC-2023-0071: rien à signaler