Skip to main content
BlogMise en réseauUtiliser un VLAN ou un VPC pour sécuriser votre application avec une architecture à trois niveaux

Utiliser un VLAN ou un VPC pour sécuriser votre application avec une architecture à trois niveaux

L'architecture à trois niveaux utilise un niveau de données, un niveau d'application et un niveau de présentation.

L'isolement de votre réseau dans un VPC présente des avantages majeurs en termes de sécurité, notamment en permettant une collaboration privée et en stockant correctement les informations sensibles.

Du côté des développeurs, l'isolation du réseau permet également de déployer des applications web à plusieurs niveaux. La hiérarchisation de votre application vous permet de segmenter les couches avec et sans accès à l'internet public. Cette méthode est souvent utilisée pour isoler la couche base de données de l'internet public, tout en permettant aux correctifs et aux mises à jour logicielles d'être tirés d'une couche supérieure plutôt que de l'internet public directement. En plus de réduire la surface d'attaque, cela peut permettre des déploiements multirégionaux.

Il existe de nombreuses façons de gérer plusieurs couches, mais vous pouvez généralement vous appuyer sur quelques formes de base qui maximisent l'évolutivité, la sécurité et la fiabilité. L'une des conceptions les plus courantes est l'architecture à trois niveaux, particulièrement populaire dans les environnements basés sur le cloud.

Une application à trois niveaux se compose de trois couches différentes qui résident sur des serveurs différents et peuvent être développées et administrées avec un haut degré d'indépendance. Ces parties sont les suivantes :

  1. Présentation: L'interface externe qui gère la communication entre l'utilisateur et l'application, consiste généralement en un serveur web avec HTML et le code de développement web qui l'accompagne.
  2. Application: Une application personnalisée qui fournit la logique d'entreprise nécessaire et cimente l'application.
  3. Données: Un système de base de données pour stocker et récupérer les données utilisées avec l'application.

Ces trois niveaux servent de services distincts qui communiquent par le biais d'API basées sur le réseau. Pour des raisons de sécurité et de performance, les niveaux Application et Données doivent souvent résider sur le même réseau local, derrière un pare-feu commun, mais la séparation de chaque couche permet de déployer chaque composant sur du matériel différent, voire sur des sites physiques différents. La flexibilité dépendra fortement des exigences de votre application.

Le diagramme ci-dessous montre une vue réelle d'une application web de base à trois niveaux. Le serveur web du niveau Présentation fournit une interface à un utilisateur travaillant dans une fenêtre de navigateur. À l'opposé, le niveau Données prend la forme d'une base de données, qui peut être un système unique ou un cluster présenté au réseau comme une seule entité. Les options open source les plus populaires pour le niveau base de données sont MySQL, MariaDB et PostgreSQL pour SQL et MongoDB et Cassandra pour NoSQL.

Figure 1 : L'architecture à trois niveaux divise une application web en un niveau de présentation, un niveau d'application et un niveau de données.

Entre le serveur web et la base de données se trouve le niveau Application, où vous passerez probablement la majorité de votre temps à coder. Le niveau Application contient le code personnalisé et la logique commerciale dont vous avez besoin pour que l'application atteigne ses objectifs. Dans la partie frontale, le serveur web envoie des requêtes à la partie application. Ce dernier répond au serveur web qui met en forme les données et les présente à l'utilisateur. Au niveau du back-end, le niveau d'application interroge la base de données, reçoit les données, puis les traite afin d'ajouter de l'intelligence et de la perspicacité pour l'utilisateur.

À titre d'exemple très simple, la base de données peut stocker les enregistrements des ventes d'une entreprise. L'utilisateur saisit une requête pour recevoir les ventes quotidiennes moyennes d'un produit spécifique dans un lieu spécifique pour un certain intervalle de temps. Le serveur web envoie la demande au niveau de l'application. Ce dernier formule une requête à la base de données, reçoit les données brutes, effectue les calculs nécessaires, puis renvoie une réponse au serveur web.

Figure 2 : Un utilisateur demande un ensemble d'informations à la couche de présentation, qui est traduite en requête de base de données par la couche d'application.

Il n'existe pas de solution pratique pour le niveau Application qui soit équivalente, par exemple, à un serveur web Apache pour le niveau Présentation ou à une base de données MongoDB pour le niveau Données. Au lieu de cela, le code personnalisé est généralement écrit en Python, PHP ou Ruby pour le niveau Application. Toutefois, il existe des cadres de programmation qui vous permettront d'écrire le code plus efficacement, notamment Django (pour Python), Rails (pour Ruby) et Symfony (pour PHP).

Le niveau Application pourrait, en théorie, être combiné avec le niveau Présentation en fournissant au serveur web le code nécessaire pour les requêtes directes à une base de données, mais cela ne serait pas pratique pour la plupart des logiques d'entreprise complexes et annulerait bon nombre des avantages de la segmentation des applications.

L'un des avantages les plus importants est une sécurité accrue grâce à une surface d'attaque réduite. Comme le montre la figure 1, une solution à trois niveaux minimise la partie de l'application qui doit résider devant le pare-feu. Le serveur web communique par le biais d'une API sécurisée. Le reste de l'activité se déroule derrière le pare-feu et, surtout, dans un espace d'adressage privé qui n'est pas accessible depuis l'internet. Les injections SQL, en particulier, sont l'une des vulnérabilités les plus courantes - et l'une des plus destructrices. Elles peuvent être évitées en isolant et en protégeant toutes les communications directes avec la base de données.

Un autre avantage de l'application à trois niveaux est la fiabilité. Une panne à un niveau est moins susceptible d'affecter les autres niveaux lorsque chaque couche fonctionne sur un serveur séparé ou sur un matériel différent ou encore dans un autre centre de données. Cela nous donne également un potentiel d'évolutivité. Les composants fonctionnant de manière indépendante, ils peuvent se développer indépendamment les uns des autres. Par exemple, si l'accès à la base de données est un goulot d'étranglement pour les performances, vous pouvez ajouter des nœuds au cluster de base de données avec une perturbation minimale de l'ensemble des opérations.

Une approche à trois niveaux peut également optimiser le processus de développement. Les API qui relient les niveaux séparent les composants d'une manière qui favorise l'efficacité de la division du travail. Les développeurs et administrateurs web peuvent exploiter et maintenir le serveur web, tandis que les développeurs et administrateurs de base de données peuvent exploiter le système de base de données. Entre les deux, les spécialistes du framework que vous utilisez pour le niveau Application peuvent se concentrer sur le code de l'application. Dans un scénario DevOps, par exemple, les développeurs d'applications peuvent créer et tester une nouvelle version du code d'application hors ligne, et la modifier facilement avec un effet minimal sur les opérations.

Si vous commencez à créer une application web, envisagez une architecture à trois niveaux. Dans les environnements actuels de conteneurs et de nuages, il est facile de séparer les composants sur différents systèmes, et vous serez récompensé de vos efforts par une application plus fiable, plus sûre et plus évolutive.

Commencez dès aujourd'hui à construire vos couches d'application sur Linode.

Ressources : Premiers pas avec les VLANs | Applications inter-centres de données

Solutions Linode : VLANs | Bases de données gérées

Commentaires (1)

  1. Author Photo

    You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.

Laissez un commentaire

Votre adresse électronique ne sera pas publiée. Les champs obligatoires sont marqués d'un *.