Aller au contenu principal

ADR-012 : Architecture des outils MCP — RBAC et gouvernance multi-tenant

Métadonnées

ChampValeur
Statut✅ Accepté
Date16 janvier 2026
AuteurChristophe + Claude
LinearCAB-602 (Epic)

Contexte

STOA expose des MCP Tools aux agents IA et développeurs. L'architecture actuelle (20 tools, 7 scopes) est insuffisante pour :

  1. Granularité RBAC — Pas de distinction claire entre personas (Admin vs Developer vs Consumer vs Agent)
  2. Multi-tenancy — Namespace tools hardcodé, pas de génération dynamique
  3. Agent Governance — Manque de framework pour contrôler les agents IA (attestations, policy gates)
  4. Scalabilité — Tools statiques vs génération dynamique depuis les contrats UAC

Décision

Refactoriser l'architecture MCP Tools selon le pattern Core + Proxied avec RBAC granulaire par persona.

Architecture

Pattern : Core vs Proxied Tools

┌─────────────────────────────────────────────────────────────────┐
│ Registre MCP STOA │
├─────────────────────────────────────────────────────────────────┤
│ │
│ OUTILS CORE (35 statiques) │ OUTILS PROXIFIÉS (dynamiques) │
│ ───────────────────────── │ ────────────────────────── │
│ stoa_{domaine}_{action} │ {tenant}:{api}:{operation} │
│ Intégrés, versionnés │ Générés depuis contrats UAC │
│ Gestion de la plateforme │ Exposition d'API métier │
│ │ │
│ Exemples : │ Exemples : │
│ - stoa_list_apis │ - acme:crm:search_customers │
│ - stoa_get_metrics │ - acme:billing:create_invoice │
│ - stoa_create_subscription │ - beta:inventory:check_stock │
│ │ │
└─────────────────────────────────────────────────────────────────┘

Catégories d'outils (35 outils Core)

CatégorieNombreOutils
Plateforme & Découverte6stoa_platform_info, stoa_health_check, stoa_list_tools, stoa_get_tool_schema, stoa_search_tools, stoa_get_config
Catalogue API8stoa_list_apis, stoa_get_api, stoa_search_apis, stoa_get_api_versions, stoa_create_api, stoa_deploy_api, stoa_undeploy_api, stoa_deprecate_api
Souscriptions & Accès6stoa_list_subscriptions, stoa_get_subscription, stoa_create_subscription, stoa_update_subscription, stoa_revoke_subscription, stoa_rotate_api_key
Observabilité & Métriques8stoa_get_metrics, stoa_get_metrics_timeseries, stoa_get_slow_requests, stoa_list_alerts, stoa_list_errors, stoa_get_error_details, stoa_get_error_snapshot, stoa_analyze_errors
Contrats UAC4stoa_validate_contract, stoa_import_openapi, stoa_export_openapi, stoa_export_mcp
Sécurité & Conformité3stoa_get_security_score, stoa_list_audit_events, stoa_scan_vulnerabilities

Scopes OAuth2 (12 scopes)

ScopeDescriptionNiveau
stoa:platform:readLire la config plateforme & santéCommunity
stoa:platform:writeModifier la config plateformeEnterprise
stoa:catalog:readParcourir le catalogue APICommunity
stoa:catalog:writeCRUD APIsEnterprise
stoa:subscriptions:readVoir ses propres souscriptionsCommunity
stoa:subscriptions:writeGérer les souscriptionsCommunity
stoa:metrics:readAccéder aux métriques & analyticsCommunity
stoa:logs:technicalLogs applicatifs (debug, traces)Enterprise
stoa:logs:functionalLogs métier (appels API)Community
stoa:logs:fullTous les logs dont PII (masqués)Enterprise
stoa:security:readVoir les pistes d'audit, conformitéEnterprise
stoa:security:writeOpérations de sécurité, scansEnterprise

Matrice RBAC — 6 Personas

1. Administrateur plateforme (stoa.admin)

AttributValeur
DescriptionContrôle total de la plateforme
ScopesTOUS
Accès outilsTOUS les 35 core + tous les proxifiés
NiveauEnterprise / Partner

2. Product Owner API (stoa.product_owner)

AttributValeur
DescriptionGère le cycle de vie des API pour son équipe
Scopescatalog:*, subscriptions:*, metrics:read, logs:technical, logs:functional
Accès outilsCRUD Catalogue, Souscriptions, Métriques, Erreurs
ContraintesAPI de sa propre équipe uniquement

3. Développeur API (stoa.developer)

AttributValeur
DescriptionConstruit et déploie des API
Scopescatalog:read, catalog:write (dev/staging uniquement), metrics:read, logs:technical
Accès outilsDéployer dev/staging, Lire métriques/erreurs
ContraintesAPI de sa propre équipe, environnements non-prod

4. Consommateur API (stoa.consumer)

AttributValeur
DescriptionUtilise les API via des souscriptions
Scopescatalog:read, subscriptions:read, subscriptions:write (propres), metrics:read (propre usage)
Accès outilsParcourir le catalogue, Gérer ses propres souscriptions, Voir son propre usage

5. Responsable sécurité (stoa.security)

AttributValeur
DescriptionConformité, audit, supervision sécurité
Scopessecurity:*, logs:full, metrics:read, catalog:read
Accès outilsPistes d'audit, Scans de sécurité, Rapports de conformité
ContraintesLecture seule par défaut, portes d'approbation pour les actions

6. Agent IA (stoa.agent)

AttributValeur
DescriptionAgent IA autonome (Claude, GPT, personnalisé)
ScopesListe blanche uniquement (définie lors de l'enregistrement de l'agent)
Accès outilsOutils explicitement autorisés uniquement
ContraintesTTL de token 10 min, attestations obligatoires, portes de policy (OPA), audit complet

Framework de gouvernance des agents

Couches de sécurité

┌─────────────────────────────────────────────────────────────────┐
│ Flux de requête agent │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Authentification (OAuth2 + DPoP/mTLS) │
│ └─→ Vérifier l'identité de l'agent, contrôler la validité │
│ du token │
│ │
│ 2. Vérification liste blanche │
│ └─→ Cet outil est-il dans la liste autorisée de l'agent ? │
│ │
│ 3. Porte de policy (OPA) │
│ └─→ Évaluer les règles métier (heure, sensibilité des │
│ données, etc.) │
│ │
│ 4. Attestation requise ? │
│ └─→ Pour les actions sensibles, requérir une attestation │
│ signée │
│ │
│ 5. Exécuter & Auditer │
│ └─→ Exécuter l'outil, tout journaliser, retourner le │
│ résultat │
│ │
└─────────────────────────────────────────────────────────────────┘

Sécurité des tokens

MécanismeStandardObjectif
DCRRFC 7591/7592Enregistrement dynamique de client
DPoPRFC 9449Preuve de possession (clients publics)
mTLSRFC 8705Tokens liés au certificat (clients confidentiels)
TTL court10 min max pour les agents

Ressources MCP (15)

URI de ressourceDescription
stoa://platform/infoMétadonnées de la plateforme
stoa://platform/healthÉtat de santé
stoa://apisListe du catalogue API
stoa://apis/{id}Détails d'une API
stoa://apis/{id}/versionsHistorique des versions API
stoa://subscriptionsSouscriptions de l'utilisateur
stoa://subscriptions/{id}Détails d'une souscription
stoa://metrics/{api_id}/summaryRésumé des métriques API
stoa://metrics/{api_id}/timeseriesDonnées de séries temporelles
stoa://errors/{api_id}/recentErreurs récentes
stoa://errors/{snapshot_id}Détail d'un snapshot d'erreur
stoa://alerts/activeAlertes actives
stoa://audit/eventsPiste d'audit
stoa://security/scorePosture de sécurité
stoa://toolsOutils disponibles pour l'utilisateur courant

Comparaison : Avant vs Après

AspectAvantAprès
Outils Core20 (plats)35 (structurés par domaine)
Scopes OAuth2712 (granulaires)
PersonasImplicites6 explicites avec matrice RBAC
Multi-tenantNamespace codé en durDynamique {tenant}:{api}:{op}
Gouvernance agentsAucuneFramework complet (liste blanche, attestations, portes de policy)
Génération d'outilsManuelleAutomatique depuis les contrats UAC

Conséquences

Positives

  • ✅ Contrôle d'accès de niveau enterprise (RBAC par persona)
  • ✅ Architecture multi-tenant évolutive
  • ✅ Intégration sécurisée d'agents IA avec portes de policy
  • ✅ Exposition automatique des outils depuis les contrats UAC
  • ✅ Prêt pour la conformité (pistes d'audit NIS2/DORA)

Négatives

  • ⚠️ Effort de migration pour les intégrations existantes
  • ⚠️ Complexité accrue dans la couche d'autorisation
  • ⚠️ Surcharge de maintenance des policies OPA

Atténuations

  • Couche de compatibilité ascendante pour les outils v1 pendant la migration
  • Templates de policies pour les cas d'usage courants
  • Déploiement progressif par tenant

Références