Article co-écrit par Laura POUDEVIGNE et Anne JACQUET.
Cet article fait suite à un premier article sur la collaboration entre Ippon et kwiper présentant l’organisation de l’équipe ainsi que l’infrastructure et les principales briques applicatives composant l’application web.
La start-up étant une filiale de la Société Générale, il était nécessaire d’avoir l’accord du RSSI du groupe avant de pouvoir commercialiser le produit. L’augmentation du niveau de sécurité de l’application est un des premiers sujets que notre équipe a traité pour répondre aux exigences de pré-commercialisation.
Nous allons donc présenter les différentes solutions mises en place pour atteindre le niveau de sécurité requis. Ces solutions visent à protéger les données sensibles des utilisateurs, sécuriser l’application web et sécuriser les accès à la plateforme.
Protection des données
Un élément crucial de la sécurité de la plateforme est la protection de l’identité des clients et de leurs données patrimoniales. Nous avons répondu à cette problématique par la mise en place de l’outil de gestion de secret HashiCorp Vault.
Déployé dans notre infrastructure AWS, Vault permet de chiffrer et déchiffrer les données identifiantes se trouvant dans la base de données client. L’idée est que même avec un accès complet à la base de données, il est impossible de déchiffrer les données sensibles qu’elle contient. Ce chiffrement s’opère en plus du chiffrement de toute la base de données RDS fourni par AWS.
Cette protection s’applique aussi aux documents générés par kwiper : les diagnostics et les stratégies. En effet, ces documents sont personnalisés avec les données du client et sont donc également chiffrés par Vault. Ainsi, une entité réussissant à accéder au bucket S3 où sont stockés les fichiers peut les télécharger mais les documents seront illisibles.
Les clés secrètes permettant d’amorcer le déverrouillage du coffre virtuel sont détenues seulement par les personnes autorisées. Plusieurs de ces clés sont nécessaires simultanément pour le déverrouillage. Ces clés de verrouillage / déverrouillage ne sont pas stockées sur AWS, elles résident sur des supports physiques YubiKey. L’idée est qu’un administrateur AWS ne puisse pas effectuer cette opération, seuls les détenteurs des clés y sont habilités.
Échanges entre l’applicatif et Hashicorp Vault
Vault propose plusieurs méthodes d’authentification. C’est le mécanisme d’authentification via IAM qui est utilisé pour autoriser les services back-end à chiffrer et déchiffrer les données. Cette autorisation se base sur le rôle IAM assigné à chaque task ECS. Vault, à travers une policy, autorise les task possédant le bon rôle à accéder à transit, qui est le service de chiffrement / déchiffrement.
Protection des échanges
Pour que les données clients soient confidentielles, sécuriser leur stockage n’est pas suffisant : il faut aussi que leur transfert soit sécurisé. Les échanges réseaux amorcés par l’utilisateur sont donc chiffrés de bout en bout.
La plateforme est protégée par le protocole HTTPS pour les connexions à tous les niveaux :
- entre les front-end et le back-end ;
- les services du back-end entre eux ;
- la connexion à la base de données.
De plus, les services exposés en externe via internet sont seulement les services accédés par les applications front-end. Les services appelés seulement au sein de notre infrastructure back-end sont accédés via une URL grâce au mécanisme de service discovery proposé via ECS et Route53.
Protection des accès
L’authentification de l’utilisateur dans l’application est faite par le service AWS Cognito. Les utilisateurs peuvent obtenir un accès à la plateforme via une page d’inscription et après avoir saisi leurs coordonnées bancaires ou peuvent être créés par un administrateur via le backoffice. Les rôles et les droits d’accès sont gérés par Cognito à travers les groups et les custom attributes.
Pour l’accès au back-office de kwiper, une étape supplémentaire a été ajoutée avec la saisie d’un code reçu par SMS. Cette possibilité est directement proposée par Cognito : l’option MFA est activée lors des créations de compte administrateur.
La mise en place du MFA (Multi-Factor Authentication) permet de protéger les accès de manière plus sûre qu’avec un simple mot de passe. Ce mécanisme est utilisé pour tous les accès de l’équipe technique ainsi que pour ceux des administrateurs kwiper. Côté développement, les accès aux comptes techniques tels que AWS et GitLab nécessitent une double authentification. Côté administration, le compte Stripe possède cette contrainte MFA, afin de prévenir des failles dues à la fuite d’une clé privée ou d’un mot de passe.
Suite à son audit, le RSSI a validé l’application en soulignant l’aspect “Privacy by design”. L’accès aux deux applications web de kwiper et aux différents services externes est protégé. Le transfert et le stockage des données sont eux aussi protégés. Mais la vigilance relative à la question de sécurité ne s’arrête pas là. Les versions des outils utilisés, aussi bien au niveau de l’infrastructure qu’au niveau du code, sont mises à niveau régulièrement afin de prévenir les failles de sécurité. Côté applicatif, il faut permettre à un utilisateur de n’accéder qu’à ses propres données. Pour plus de détails sur les aspects de ce projet liés au développement, nous vous invitons à lire le troisième article de ce retour d’expérience qui sera publié le lundi 1er février 2021.