Qu’est-ce que le multi-tenant et comment le mettre en oeuvre sur AWS ?
Les éditeurs d’applications SaaS le savent bien : les infrastructures fixes, appelées single-tenant, sont faciles à déployer mais ont leurs limites notamment en terme de maintenance. C’est pourquoi nous vous conseillons vivement de passer au multi-tenant. Nombre d’entre vous hésitent à franchir le pas.
Votre crainte : que les données de vos clients ne soient pas sécurisées.
Pourtant, sur AWS, cela est possible grâce à l’alliance de trois microservices : Cognito, IAM et DynamoDB.
Après avoir expliqué ce qu’est une architecture multi-tenant, nous vous présentons comment utiliser ces trois services sur AWS pour la mettre en œuvre.
Le multi-tenant : notre table des matières
Qu’est-ce qu’une infrastructure multi-tenant ?
Avant d’aller plus loin, expliquons le terme « Tenant » : en anglais, il signifie « Locataire », « Client ». Chaque client rassemblant un « groupe d’utilisateurs ».
Modèle single-tenant
Dans une architecture single-tenant, une seule application est utilisée par plusieurs clients, mais chacun a sa propre version de l’application installée dans une instance dédiée.
Ce modèle a plusieurs avantages :
- Séparation franche entre chaque client, et donc entre chaque version de l’application.
- Les données du client A ne sont pas mélangées avec celles du client B.
- Chaque client possède sa propre base de données et son propre serveur d’application.
single-tenant : chaque client à sa propre infrastructure.
Mais, très vite, il peut être compliqué à administrer. En effet :
- Plus les clients vont être nombreux, plus il est difficile de gérer les différentes versions de l’application sur chaque infrastructure.
- Le coût fixe pour chaque infrastructure peut être pénalisant pour les clients à faible trafic.
- À partir de 100 clients, il est impératif d’automatiser la gestion des infrastructures, notamment avec des solutions comme BAM*.
- À partir de 1 000 clients, ce n’est pratiquement plus gérable.
Modèle multi-tenant
À la différence, dans une architecture multi-tenant, une seule instance d’application va servir à plusieurs clients. Les ressources (et notamment les bases de données) y sont mutualisées.
multi-tenant : une infrastructure pour plusieurs clients.
Avec une seule infrastructure globale, au lieu d’une par client :
- Il est plus facile d’en assurer la maintenance : lorsqu’une modification est apportée à un fichier, elle profite à tous les clients. Les mises à jour sont plus simples à assurer.
- Vous réduisez vos coûts d’utilisation sur le cloud.
- Les temps de réponse sont bien plus rapides.
- La gestion des clients est simplifiée, qu’ils soient au nombre de 10 ou 10 000.
En contrepartie, comme les données des clients sont mélangées, il faut que le logiciel soit développé pour séparer de manière logique les données des clients. Nous verrons plus loin que les technologies intégrées à AWS permettent de résoudre cette difficulté facilement.
Modèle hybride
Il existe aussi une approche hybride qui permet d’optimiser son infrastructure sans avoir à faire beaucoup de modifications dans son application.
Approche hybride : mutualisation de l’application avec plusieurs bases de données dans la même instance.
Dans une approche hybride, seule l’application est mutualisée. Dans ce cas, chaque client dispose d’une base de données dédiée dans la même instance, ainsi que d’un login et d’un mot de passe. Cette solution a l’avantage d’être facile à mettre en œuvre tout en commençant à faire des économies d’échelles sur les coûts d’infrastructures.
Comment faire du multi-tenant avec AWS ?
Lors de la création d’une architecture multi-tenant, l’enjeu crucial est, bien sûr, de sécuriser les datas afin qu’elles ne soient pas accessibles par tous.
Les développeurs d’applications SaaS doivent être en mesure d’identifier un utilisateur, de relier une donnée à son locataire, mais également un utilisateur à son locataire, et de savoir quels droits ont été concédés à tel ou tel user.
Pour cela, sur le cloud d’AWS, nous vous conseillons d’associer les services DynamoDB, Cognito et IAM.
Organisez vos bases de données avec DynamoDB
Dans DynamoDB, chaque table, présente dans votre base de données, doit avoir une colonne permettant de stocker une référence au Tenant. En règle générale, il s’agit d’un identifiant client (organizationId).
Dans cet exemple, la colonne “OrganizationId” permet de stocker la référence au Tenant.
Créez vos utilisateurs
En parallèle de cette gestion des tables, Amazon Cognito vous permet d’ajouter des utilisateurs à vos applications SaaS. Dans une infrastructure multi-tenant, ce service va lister les différents clients (et donc leurs utilisateurs et leurs groupes) ainsi que leurs identifiants. Par ailleurs, il va associer des attributs personnalisés à chaque utilisateur en fonction du locataire auquel il est lié afin de sécuriser son authentification, et gérer ses autorisations.
De plus, AWS gère pour vous toute la sécurité et la connexion. Tous les derniers standards, notamment les authentifications à multiples facteurs, sont disponibles sans développement de votre part.
Chaque utilisateur est membre d’un groupe. Vous pouvez ainsi gérer les accès aux données de manière fine en fonction des groupes.
Définissez des règles de sécurité
Enfin, avec IAM (Identity and Access Management), vous allez définir les règles de sécurité (polices) associées à chaque groupe. Grâce à ces règles, des filtres (LeadingKey) seront créés dans la base de données DynamoDB. Ainsi, l’utilisateur accédera exclusivement à la donnée liée au filtre. Il sera dans l’incapacité de voir le reste, comme s’il était dans une enclave dédiée.
Dans cet exemple, les règles limitent aux personnes membres du groupe l’accès aux données ayant comme clé d’accès le code du client.
Conclusion
Entre le single-tenant et le multi-tenant, nous vous conseillons de choisir le second modèle d’infrastructure car il présente des atouts considérables : maintenance facilitée, frais allégés, gestion des clients simplifiée…
Par ailleurs, grâce à l’association des trois services d’AWS (DynamoDB, Cognito et IAM), la sécurité des données y est garantie. Et la gestion des droits d’accès aux données des clients n’est pas à faire par le développeur dans son code. Elle est gérée de manière séparée avec AWS. Cela présente plusieurs avantages :
- La gestion du multi-tenant est indépendante du reste du code.
- Plus généralement, la gestion du contrôle d’accès aux données est ainsi indépendante du code de l’application SaaS.
- Il est possible d’utiliser d’autres services pour réaliser des statistiques sur les données par clients, avec QuickSight notamment.
* BAM (Build Automation Machine) est une solution innovante créée par premaccess. Elle permet d’automatiser la gestion et le cycle de vie de vos infrastructures et leur déploiement chez AWS.