Skip to content
DraftAudienceSécuritéAudit banqueComplianceOwner@security-teamDernière revue2026-05-21

Access Control Matrix (ACM)

Statut : draft à valider. Matrice rôles × ressources × actions pour la plateforme Nex. Document de référence pour audits et revues de privilèges.

1. Principes

  • Authentification = preuve que l'acteur est bien celui qu'il prétend être (token Firebase, JWT internal-service, login admin).
  • Autorisation = preuve que cet acteur peut faire cette action sur cette ressource (rôle, scope, ownership).
  • Auditabilité = toute opération sensible produit une trace identifiable par acteur (user_id, timestamp, action, ressource).

2. Catégories d'acteurs

Acteurs externes (utilisateurs finaux)

ActeurSource d'authentificationToken porté
Consumerphone + PIN → Firebase custom tokenFirebase ID token (Bearer)
Agent / Master-agentphone + PIN, rôle simple_agent / master_agentFirebase ID token
Merchant memberphone + PIN, rôle issu de merchant_members (cf. ADR-0004)Firebase ID token + header X-Merchant-Id

Acteurs internes (équipes Nex)

ActeurSource d'authentificationOutil
Ops / Support / KAMlogin CMMS [À CONFIRMER mode]CMMS
Administration plateformelogin BackofficeBackoffice
Compliance officerlogin CMMS, rôle dédiéCMMS
Tech ops / SREaccès Doppler, AWS, GitLabOutils tiers

Acteurs techniques (services)

ActeurSourceToken
Service Nex → Service NexJWT internal-service avec scope (risk:evaluate, ledger:write, internal-service-jwt)Bearer JWT signé
External Secrets Operator → DopplerAPI key DopplerHors-bande
GitLab CI → Cloudflare PagesWrangler API tokenHors-bande

3. Rôles utilisateurs finaux

Consumer (app Nex)

RessourceActionAutorisé
Son propre walletlecture solde, historique
Son propre profilupdate infos non-KYC
Son propre PINchanger (avec ancien PIN)
Sa propre identité KYCupload documents
Wallet d'un autre utilisateurlecture
Création intent P2P/cash-out/paymentinitier✅ (limité par risk-engine + KYC level)
Endpoints admintoute action

Agent (Nex Pro) — simple_agent

RessourceActionAutorisé
Sa propre caisselecture
Initiation cash-in / cash-outinitier au nom d'un consumer
Liste des agents (autres)lecture
Audit trail d'un autre agentlecture

Master-agent (Nex Pro) — master_agent (cf. ADR-0042)

RessourceActionAutorisé
Caisses des agents de son réseaulecture
Réapprovisionnement d'un agentinitier
Activation / désactivation agentinitier✅ (avec validation backoffice ?) [À CONFIRMER]
Master-agents tierslecture

Merchant members (Nex Business) — rôles owner, admin, operator, cashier, accountant

RôleEncaisserVoir historiqueGérer équipeKYBCards
owner✅ tous POS
admin✅ tous POS✅ (sauf owners)⚠️ partiel
operator✅ tous POS
cashier✅ (POS rattaché)✅ POS rattaché uniquement
accountant✅ lecture seule

Invariant DB : au moins 1 owner actif par merchant en permanence (assertNotLastActiveOwner). Invariant DB : cashier requiert un posId (CHECK).

4. Rôles équipes internes (CMMS, Backoffice)

[À CONFIRMER en détail avec l'équipe — la liste suivante est une proposition à valider]

Rôle interneCMMS — actions principalesBackoffice — actions principales
support-l1Lire fiche client, historique tx, déclencher reset-pin (workflow)
support-l2+ déblocage compte, traitement litige
kam+ création merchant, lien user → merchant
compliance-officer+ validation KYC/KYB, gestion alertes risk, SAR
tech-opsLire dashboards monitoring+ déploiement, env vars
admin-platform+ lecture audit trail global+ tout (création rôles, paramétrage)

5. Matrice service-à-service (JWT internal-service)

Scopes JWT inter-services attribués par le service auth :

ScopeDélivré àPermet d'appeler
internal-service-jwtTous les services NexEndpoints /internal/* du service appelé
risk:evaluateorchestratorPOST /risk/evaluate (risk-engine)
risk:evaluate:trustedorchestrator (uniquement)POST /risk/evaluate avec champ prefetched contexte (sans policy/limits — cf. ADR-0007)
ledger:readorchestrator, risk-engine, logs-reporting [à confirmer]Lecture wallets, transactions
ledger:writeorchestrator (uniquement)Écriture ledger via POST /transition
kyc:readorchestrator, risk-engineLecture statut KYC
kyc:writeorchestrator, customer-profiles-kycMise à jour statut KYC
notifications:sendorchestrator, authEnvoi SMS / push / email
files:uploadorchestratorUpload via file-service
files:readorchestrator, customer-profiles-kyc (KYC review)Lecture / signed URL

6. Matrice accès infrastructure (admin plane)

SystèmeQui a accès ?MFA ?Audit log ?
AWS console[À CONFIRMER : liste]✅ MFA obligatoire✅ CloudTrail
EKS kubectltech-ops, plateforme via Doppler kube creds[À CONFIRMER]⚠️ à activer (audit K8s)
Dopplertech-ops, plateforme[À CONFIRMER]✅ natif Doppler
Cloudflare dashboardtech-ops, plateforme[À CONFIRMER]✅ natif CF
Firebase consoleplateforme[À CONFIRMER]✅ natif Firebase
GitLab self-hostedtous les devs[À CONFIRMER]✅ natif GitLab
RDS PostgreSQL prodSELECT-only depuis bastions identifiés [À CONFIRMER] ; écritures via services uniquementn/a⚠️ à enrichir (logs query)
Backoffice prodadmin-platform uniquement[À CONFIRMER]⚠️ via logs-reporting (à implémenter)

7. Privilèges DB (RBAC PostgreSQL)

Convention : un user PostgreSQL par service, accès limité au schéma propre du service (ADR-0014).

ServiceUser PGPrivilèges sur son schémaPrivilèges cross-schema
authnex_authUSAGE + SELECT/INSERT/UPDATE/DELETE sur tables de auth.*❌ aucun
ledger-walletsnex_ledgeridem sur ledger.*
customer-profiles-kycnex_customeridem sur customer.*
(et ainsi de suite pour chaque service)
Bastion read-only (debug humain)nex_readonlyUSAGE + SELECT sur tous les schémasaucune écriture

8. Gestion du cycle de vie des accès

ÉvénementAction obligatoire
Onboarding salarié / prestataireProvisioning des accès selon rôle, signature de la charte sécurité, formation.
Changement de rôleRe-évaluation des accès dans la semaine. Retrait des accès non justifiés.
OffboardingRévocation immédiate (≤ 4 h) de tous les accès, rotation des secrets partagés. Checklist documentée.
Accès prestataire externe (auditeur, pentester)Accès limité dans le temps (≤ 30 j renouvelable), MFA, scope minimal.
Revue trimestrielleRe-certification de la liste des accès admin par le RSSI.

9. Logs d'accès et auditabilité

ActionSource d'auditÉtat
Login utilisateurservice auth (table sessions)
Action ledger (écriture)service ledger-wallets (ledgers append-only)⚠️ created_by non rempli — dette documentée dans audit ledger
Action admin CMMS / Backofficeservice logs-reporting❌ à implémenter (service stub)
Pull secret Dopplerlogs Doppler natifs
Action AWS / CloudflareCloudTrail / CF audit log

10. Gaps connus

  • Pas d'audit centralisé des actions admin internes (service logs-reporting non implémenté).
  • ledgers.created_by non rempli — réconciliation manuelle nécessaire.
  • Maker-checker sur paiements bulk non enforced.
  • Pas de MFA généralisé sur tous les outils admin [À CONFIRMER].
  • Pas de re-certification trimestrielle des accès admin formalisée.

Voir /security/known-gaps pour le suivi avec sévérité et tickets.

Nex — Plateforme fintech CEMAC