Ce billet de blog, deuxième partie d’une série, explique comment renforcer la sécurité d’une application au-delà du contrôle d’accès (RBAC) pour répondre aux exigences SOC 2. L’auteur propose une architecture à trois bases de données distinctes (données, audit et clés) pour isoler physiquement les informations sensibles, garantissant ainsi l’intégrité des logs et une gestion sécurisée des clés de chiffrement. L’isolation physique et logique des bases de données limite les risques de compromission globale en cas d’attaque ciblée.
Pour assurer l’intégrité des logs, l’auteur recommande l’utilisation du Outbox Pattern combiné à Symfony Messenger. Cette méthode enregistre les intentions de journalisation dans une table dédiée au sein de la base de données principale, puis les transfère de manière asynchrone vers la base de logs (audit.db) via un worker. Cela résout les problèmes de performance et d’atomicité, évitant les incohérences entre les actions enregistrées et les logs.
Enfin, la gestion des clés de chiffrement est externalisée via un Key Management Service (KMS) avec un système de Master Key Sharding. Les clés maîtresses sont chiffrées et stockées séparément, et leur rotation est gérée de manière à limiter l’impact d’une éventuelle compromission. Cette approche renforce la sécurité de l’infrastructure tout en respectant les principes de SOC 2.
L’auteur montre comment un service « simple » qui orchestre plusieurs effets secondaires (sauvegarde, envoi d’e-mail, tracking analytics…) peut sembler propre et fonctionner en développement — mais devient une « bombe à retardement » en production : latence, états partiels incohérents, logique métier mélangée à l’orchestration. Comme solution, il recommande d’introduire d’abord des Domain Events pour découpler la logique métier des effets secondaires, puis d’utiliser le pattern Outbox pour garantir l’atomicité entre la persistance des entités et des événements, et enfin — lorsque les étapes sont critiques (paiement, création de wallet, etc.) — d’opter pour un pattern Saga pour assurer soit la réussite de l’ensemble, soit la compensation en cas d’échec.
Pascal Martin, Principal Engineer et AWS Hero, explique dans cette conférence que les systèmes distribués — ensembles de services communiquant via le réseau — sont omniprésents dans le web moderne, offrant scalabilité, résilience et flexibilité, mais introduisant aussi des défis majeurs : gestion de la cohérence des données, communication complexe entre services, et résilience face aux pannes inévitables. Il aborde des concepts clés comme le partitionnement des données, les compromis du théorème CAP (cohérence, disponibilité, tolérance aux pannes), les patterns Outbox et Saga pour les transactions, et l’importance de limiter le Blast Radius (impact des pannes) via des time-outs, retries intelligents, et une dégradation gracieuse des services. Son message central : tout peut tomber en panne, il faut donc concevoir des architectures résilientes, s’appuyer sur des outils éprouvés, et accepter que les systèmes distribués fonctionnent toujours dans un état "partiellement dégradé". Une conférence essentielle pour comprendre pourquoi et comment construire des systèmes robustes, avec des exemples concrets tirés de sa pratique chez Bedrock et dans le cloud.