En développement

Catalogue de données sécurisé et portail interne

Un catalogue de métadonnées DDI/NADA durci pour des microdonnées réservées, un module de médiathèque testé, et des mises à niveau répétées sur une réplique complète avec retour arrière scripté.

Rôle
Administrateur, intégrateur et développeur
Période
2026, en cours
Statut
En développement
Contexte
Portail interne de la Direction du Contrôle Financier · non exposé à Internet

Chiffres d'ingénierie

  • 4profils d'accès, du visiteur à l'administrateur
  • 17 / 0contrôles de mise à niveau réussis / en échec en production
  • 431fichiers de données copiés et vérifiés par SHA-256 avant la mise à niveau
  • 87 + 26tests du module sans et avec base, tous verts
  • 76contraintes CHECK dans le schéma du module
  • 360cas dans la matrice d'accès du module

Ces chiffres décrivent le système, pas ses résultats métier, qui restent confidentiels.

01Synthèse

Les microdonnées des marchés contiennent des personnes nommées : leur catalogue devait faire plus qu'afficher des métadonnées. J'administre et j'étends un portail interne bâti sur le catalogue NADA et le Metadata Editor de la Banque mondiale : localisation française, quatre profils d'accès avec fichiers réservés, correctifs de sécurité trouvés par les tests, et un module Bibliothèque et Médiathèque développé avec des tests automatisés.

Chaque modification passe par un script capable de vérifier, d'appliquer et de restaurer, répété sur une réplique avant d'atteindre le poste. La même discipline a servi à mettre à niveau PHP, Apache et un MySQL 8.0 hors support vers la 8.4 LTS, sans un seul contrôle en échec.

02Pipeline et traitements

  • Localisation et correctifs livrés par un script de correctifs idempotent, avec modes vérification et restauration ; originaux sauvegardés, second passage sans effet, restauration identique à l'octet.
  • Mise à niveau de PHP 8.4.10 vers 8.4.27, d'Apache 2.4.63 vers 2.4.69 et de MySQL 8.0.42 vers 8.4.13 : pré-vérification, répétition complète sur une copie avec des ports séparés, script d'application avec simulation, puis suite de non-régression.
  • Module de médiathèque : migrations de schéma, matrice d'accès de 360 cas, 87 tests sans base et 26 avec la base, livré par une pull request avec un manifeste SHA-256 recalculé sur la branche principale.
  • Étape en cours : API de lecture et pages de consultation du module.

03Sécurité et gouvernance

  • Niveaux d'accès : métadonnées lisibles par tous ; documents pour les comptes connectés ; microdonnées réservées et dictionnaire nominatif pour les comptes habilités ; exports techniques et API pour les seuls administrateurs.
  • Un test avec un compte standard a révélé que le rôle « utilisateur » par défaut du logiciel était marqué administrateur, ce qui ouvrait les fichiers réservés et une partie de l'API d'administration ; les contrôles d'accès ont été rebranchés sur la règle d'administration du site.
  • Stockage sorti de la racine web, adresses directes des fichiers en 404, inscription libre fermée, tentatives de connexion plafonnées par compte, mode production activé, règles de pare-feu sur les ports web et base de données.
  • Secrets stockés hors du code et lus par une fonction unique ; pages légales en français et en anglais avec acceptation tracée à la première connexion.

04Technologies

  • NADA 5.4
  • World Bank Metadata Editor
  • PHP 8.4
  • MySQL 8.4
  • Apache 2.4
  • Python
  • JavaScript
  • Git / GitHub

05Décisions d'ingénierie

  1. Répéter chaque modification sur une réplique

    Choix
    Copie de l'application sur des ports séparés, même configuration à l'octet près.
    Pourquoi
    Une mise à niveau majeure de MySQL sur place n'a pas d'autre retour arrière que la copie des données : la répétition est le filet de sécurité.
  2. Des scripts, pas des modifications à la main

    Choix
    Modes vérification, application et restauration pour chaque correctif de code tiers.
    Pourquoi
    Un logiciel tiers se réinstalle ; un script rejouable rend maintenable une personnalisation fragile.

06Difficultés techniques

  • Une régression a remis d'anciens fichiers par-dessus des correctifs de sécurité ; la suite de non-régression l'a détectée et les correctifs ont été réappliqués par script.
  • L'application de bureau réécrit une partie de la configuration du serveur web au démarrage : la fermeture du réseau devait donc s'appuyer sur le pare-feu plutôt que sur les fichiers de configuration.
  • Une extension PHP se chargeait en production mais pas dans la copie de répétition, car le chemin de sa DLL venait du lanceur ; la répétition a été corrigée pour reproduire exactement la production.

07Limites

  • Hébergement sur un seul poste ; un serveur de la Direction est nécessaire avant un accès élargi.
  • Les formalités de protection des données auprès de l'autorité nationale attendent la décision de la Direction.