feat(deploy): image, chart Helm et surcouche compose de ra-console - #68
Open
PhilippeVienne wants to merge 4 commits into
Open
PhilippeVienne wants to merge 4 commits into
PhilippeVienne wants to merge 4 commits into
Conversation
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 37113203 | Triggered | Generic Password | 4934b57 | deploy/helm/open-eidas/templates/secrets/generated.yaml | View secret |
| 37665449 | Triggered | Generic Password | 4934b57 | docker-compose.console.yml | View secret |
| 37665552 | Triggered | Generic Password | 01bf013 | docker-compose.console.yml | View secret |
| 37113205 | Triggered | Generic Password | 4934b57 | docker-compose.console.yml | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secrets safely. Learn here the best practices.
- Revoke and rotate these secrets.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
6 tasks
PhilippeVienne
force-pushed
the
feat/ra-console-quorum
branch
from
September 30, 2026 13:02
4525c07 to
20644bf
Compare
PhilippeVienne
force-pushed
the
feat/ra-console-deploy
branch
2 times, most recently
from
September 30, 2026 13:04
60e0e40 to
dd7d0bd
Compare
PhilippeVienne
force-pushed
the
feat/ra-console-quorum
branch
from
September 30, 2026 13:04
20644bf to
61135fc
Compare
PhilippeVienne
force-pushed
the
feat/ra-console-deploy
branch
from
September 30, 2026 13:53
dd7d0bd to
96e9632
Compare
PhilippeVienne
force-pushed
the
feat/ra-console-quorum
branch
from
September 30, 2026 13:53
61135fc to
4657a17
Compare
…pe 4a)
docs/WEBUI.md §15 étape 4, §8 : la console prépare `revoke_certificate`
et relaie la signature par `POST /api/v1/certificates/{serial}/revoke`.
La politique de ca-server exige deux ca_operateur distincts : la
première signature est enregistrée, rien n'est révoqué
(AWAITING_QUORUM, 1/2). La co-signature est l'étape 4b.
- oe_actions::Expect gagne `serial` : ca-server compare le certificat de
la route au corps figé avant toute consommation, comme pour une
décision ; une cible sans rapport avec le type d'action est refusée.
- ra-console : relay_assertion factorise le relais d'une assertion
(décisions et révocation) ; numéro de série exigé sous forme
canonique (hexadécimal minuscule, 20 octets au plus) avant relais.
- Tests : harnais doté d'une vraie CA sur PostgreSQL et du révocateur de
ca-server ; première signature sans révocation, mauvaise cible,
forme non canonique, refus pour un ra_operateur. Deux mutations tuées.
Co-authored-by: Claude <noreply@anthropic.com>
…tape 4b)
docs/WEBUI.md §8, §15 étape 4 : deux ca_operateur distincts révoquent
ensemble depuis la console.
- Co-signature : `POST /api/v1/webauthn/challenge` accepte
`{"action_id"}` (action existante, non exécutée, proposée à ce stade),
puis `POST /api/v1/quorum/{action_id}/sign`. oe_actions::Expect gagne
`action_id`, comparé avant toute consommation : une co-signature ne
compte que pour l'action pour laquelle son challenge a été émis.
- Salle d'attente : `GET /api/v1/quorum?state=PENDING` lit `actions` et
`decision_evidence` de ca-server en lecture seule (décision de
l'utilisateur) : corps figé, empreinte, signatures, signataires. Le
rôle de la console gagne SELECT sur `actions` (aucun secret n'y
figure) ; le test de schéma est mis à jour.
- Écart assumé avec le §8, en plus sûr : pas de tables de collecte, la
console ne conserve jamais d'assertion (ca-server enregistre chaque
signature au fil de l'eau). WEBUI.md §8 dit ce qui est construit.
- Tests : révocation à deux de bout en bout, seconde signature du même
opérateur refusée, exécution unique, co-signature présentée pour une
autre action sur le même certificat refusée. Deux mutations tuées.
- Mise à jour d'un déploiement : rejouer ra_console_grants.sql.
Co-authored-by: Claude <noreply@anthropic.com>
TODO §1, docs/WEBUI.md §16-17 : ra-console devient déployable, sans changement de son code. - Image deploy/ra-console/Dockerfile, construite avec `-p ra-console` seul (cryptoki non lié, garde no_pkcs11.rs), sans SoftHSM ; ajoutée aux matrices de construction/scan et de publication de la CI. La vérification de démarrage accepte `--version` (la console n'a ni PIN ni sous-commande `version`). - Entrypoint : au premier démarrage, certificat de la CA émettrice (/api/v1/ca.pem, conservé) puis certificat client internal_client (`ra-console internal-cert`, attend l'approbation). - Helm, désactivé par défaut (raConsole.enabled) et refusé au rendu sans ca.internal.enabled : Deployment (volume d'état, sondes), Service, HTTPRoute optionnelle, NetworkPolicy (entrée : namespace de la Gateway seul ; sortie : DNS, PostgreSQL, CA), Job hook post-install/post-upgrade qui applique ra_console_grants.sql (copie dans files/, identité vérifiée par la CI) : les identifiants d'administration de la base n'entrent jamais dans le pod de la console. Réutilise la Relying Party WebAuthn et la liste blanche de la CA. Deux clés au Secret généré. - docker-compose.console.yml : surcouche opt-in (liste blanche de modèles requise), jamais chargée par `make up` ni la CI. - CI et `make helm-lint` : rendu avec la console, refus sans lien interne (vérifié par mutation), identité du script des droits. - Docs : README du chart, docs/RA-CONSOLE.md. Co-authored-by: Claude <noreply@anthropic.com>
…console GitGuardian signalait les valeurs de repli des mots de passe de la surcouche docker-compose.console.yml. Pour une surcouche opt-in, mieux vaut exiger des secrets explicites qu'en fournir de démonstration : OPENEIDAS_DB_PASSWORD, OPENEIDAS_RA_DB_PASSWORD et OPENEIDAS_LOGIN_DECOY_SECRET sont désormais obligatoires (`:?`), avec un exemple de génération en tête du fichier. docker-compose.yml seul n'est pas concerné. Co-authored-by: Claude <noreply@anthropic.com>
PhilippeVienne
force-pushed
the
feat/ra-console-deploy
branch
from
September 30, 2026 14:15
96e9632 to
01bf013
Compare
PhilippeVienne
force-pushed
the
feat/ra-console-quorum
branch
2 times, most recently
from
September 30, 2026 15:12
9e06cda to
84a7de1
Compare
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.
Objet
TODO §1,
docs/WEBUI.md§16-17 : rendrera-consoledéployable, sans changement de son code Rust. Empilée sur #67 (feat/ra-console-quorum) → #66 → #65 → #64. Ordre de merge : #64, #65, #66, #67, cette PR.deploy/ra-console/Dockerfile:cargo build -p ra-consoleseul (l'unification des features du workspace réactiveraitcryptoki;no_pkcs11.rsen est la garde), ni SoftHSM ni opensc, utilisateur non-root 10004. Ajoutée aux matrices construction + scan Trivy et publication GHCR (open-eidas-ra-console, image par défaut du chart). La vérification « le binaire démarre » accepte--version(la console n'a ni PIN ni sous-commandeversion)./api/v1/ca.pemde l'API interne de la CA, premier certificat = émettrice, conservé ensuite), puisra-console internal-cert, qui attend l'approbation (sidecar en démo, opérateur nommé en production).raConsole.enabled: falsepar défaut (aucun déploiement existant ne change, hormis deux clés ajoutées au Secret généré) ; rendu refusé siraConsole.enabledsansca.internal.enabled. Réutilise la Relying Party WebAuthn et la liste blanche de modèles de la CA (une seule configuration). Deployment (volume d'état RWO, sondes : prête = base + lien, vivante = écoute), Service, HTTPRoute optionnelle (Gateway interne), NetworkPolicy (entrée : namespace de la Gateway seul ; sortie : DNS, PostgreSQL, CA ports public et interne).post-install/post-upgrade(image postgres) qui attend les migrations deca-server, appliquera_console_grants.sqlet pose le mot de passe du rôle (par variable psql, jamais en ligne de commande). Pourquoi un Job et pas un initContainer : les identifiants d'administration de la base n'entrent jamais dans le pod de la console, le composant le plus exposé (§16). Rejoué à chaque mise à jour : les nouveaux droits (ex.SELECTsuractions, feat(ra-console): double contrôle, co-signature et salle d'attente (étape 4b) #67) arrivent sans geste manuel. Le script est copié dansfiles/(Helm ne lit rien hors du chart) ; la CI vérifie qu'il est identique à l'original. Un initContainer de la console attend son rôle avec ses propres identifiants.docker-compose.console.yml(lien interne de la CA, service one-shot des droits, console), jamais chargée parmake upni par la CI : elle exige une liste blanche de modèles (deploy/ra-console/models.json) qu'aucune valeur par défaut ne peut fournir. Ledocker-compose.ymlde la démo n'est pas modifié.make helm-lint: lint et rendu avecci/ra-console-values.yaml, refus sans lien interne, identité du script des droits..helmignoreexclutci/du chart.docs/RA-CONSOLE.md(déploiement, variables complètes).Décisions à valider
dev(sinon l'image par défaut du chart n'existe pas). Un package GHCR créé parGITHUB_TOKENpeut naître privé (voir le commentaire du jobpublish). Pas d'épinglage sur le staging.postgres.userpuisse créer un rôle (CREATEROLE) ; à vérifier surotspi/deployavant d'activer la console en staging.OPENEIDAS_ENROLL_HMAC_KEYdans le pod de la console (nécessaire àinternal-cert) : une console compromise pourrait déposer des demandes d'enrôlement — qui restent soumises à approbation, comme pour la TSA.NetworkPolicyd'entrée vide sans Gateway : la plupart des CNI laissent passer le trafic du nœud (sondes) ; à confirmer sur le CNI du cluster cible.Limites
Vérifications
helm lintethelm template: défaut, avec la console (ci/ra-console-values.yaml, avec et sans Gateway), cas de refus ; 26 documents rendus relus par un analyseur YAML.make helm-lintvert.fail,make helm-lintéchoue. Le premier jet du contrôle ne l'aurait pas vu (le rendu échouait déjà faute derpId) : le cas de refus fournit désormais des valeurs complètes, seule la garde peut le faire échouer.docker build -f deploy/ra-console/Dockerfile .: OK ;--versionOK ;ldd: seules libssl/libcrypto/libc ; utilisateurra(10004) ; l'entrypoint refuse clairement sans configuration. Trivy non disponible ici (la CI le lance).docker compose -f docker-compose.yml [-f docker-compose.console.yml] config -q: OK.cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1),cargo test -p ra-consoleavec PostgreSQL (dontno_pkcs11.rs) : verts.Revue humaine obligatoire
Voir PROVENANCE.md. Chaque case est cochée par le
contributeur humain qui valide la PR, après l'avoir fait lui-même.
make licenses)Assistance par IA
Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, etscripts/provenance.py archivea été lancé