L’essor du cloud computing – et en particulier des offres de plate-forme en tant que service (PaaS) et de conteneur en tant que service (CaaS) – modifie la manière dont les entreprises déploient et exploitent leurs applications métier. L’un des défis les plus importants lors de la conception d’applications cloud est de choisir des services cloud entièrement gérés qui réduisent les coûts et les tâches opérationnelles chronophages sans compromettre la sécurité.
Cet article de blog vous montre comment héberger des applications sur Microsoft Azure App Service et les sécuriser avec NGINX Plus pour empêcher les attaques provenant d’Internet.
Microsoft Azure App Service est une plateforme de niveau entreprise entièrement gérée qui permet aux organisations de déployer des applications Web, API et mobiles dans Microsoft Azure sans gérer l’infrastructure sous-jacente, comme illustré dans la figure 1. Azure App Service fournit les principales fonctionnalités suivantes :
Avec Azure App Service, Microsoft propose un moyen riche et rapide d’exécuter des applications Web sur le cloud. En effet, les développeurs peuvent développer leurs applications localement en utilisant ASP.NET, Java, Node.js, PHP et Python et les déployer facilement sur Azure App Service avec Microsoft Visual Studio ou Azure CLI. Les équipes DevOps peuvent également bénéficier de la fonctionnalité de déploiement continu d’Azure App Service pour déployer les versions d’applications rapidement et de manière fiable sur plusieurs environnements.
Les applications sur Azure App Service peuvent accéder à d’autres ressources déployées sur Azure ou peuvent établir des connexions via des VPN vers des ressources d’entreprise locales.
Fondamentalement, une application créée avec Azure App Service est exposée directement à Internet et attribuée à un sous-domaine de azurewebsites.net . Pour plus de sécurité, vous pouvez protéger votre application avec une terminaison SSL ou avec des protocoles d'authentification et d'autorisation tels que OAuth2 ou OpenID Connect (OIDC). Cependant, il n’est pas possible de personnaliser le réseau avec des règles de sécurité entrantes et sortantes précises ou d’appliquer un middleware tel qu’un pare-feu d’application Web (WAF) pour empêcher les attaques malveillantes ou les exploits provenant d’Internet.
Si vous exécutez des applications sensibles dans Azure App Service et souhaitez les protéger, vous pouvez utiliser les environnements Azure App Service (ASE). Un ASE est un environnement isolé déployé dans un réseau virtuel et dédié aux applications d’un seul client. Vous bénéficiez ainsi d'un meilleur contrôle sur le trafic réseau entrant et sortant des applications.
Avec les ASE, vous pouvez déployer des applications Web, API, mobiles ou fonctionnelles dans un environnement plus sécurisé à très grande échelle, comme illustré dans la figure 2.
Il existe deux versions de l'ASE : ASE v1 et ASE v2. Dans cet article, nous discutons d’ASE v2.
Vous pouvez créer un nouvel ASE v2 manuellement à l’aide du portail Azure ou automatiquement à l’aide d’Azure Resource Manager.
Lors de la création d'un nouvel ASE, vous devez choisir entre deux types de déploiement :
Dans l'exemple suivant, nous choisissons un ASE ILB pour empêcher l'accès depuis Internet. Ainsi, les applications déployées dans notre ASE ne sont accessibles qu’à partir de machines virtuelles (VM) exécutées sur le même réseau. Les deux commandes suivantes utilisent Azure Resource Manager et Azure CLI pour provisionner un nouvel ILB ASE v2 :
$ azure config mode arm $ azure group deployment create mon-groupe-de-ressources mon-nom-de-déploiement --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/201-web-app-asev2-ilb-create/azuredeploy.json
Si, en revanche, vous souhaitez que votre application soit accessible depuis Internet, vous devez la protéger contre les attaquants malveillants qui pourraient tenter de voler des informations sensibles stockées dans votre application.
Pour sécuriser les applications au niveau de la couche 7 dans un ASE, vous avez deux choix principaux :
(Vous pouvez remplacer un contrôleur de distribution d’applications [ADC] personnalisé par des fonctionnalités WAF, mais nous ne couvrons pas ce cas d’utilisation ici.)
Le choix de la solution dépend de vos contraintes de sécurité. D’une part, Azure Application Gateway fournit une solution clé en main pour l’application de la sécurité et ne nécessite pas de maintenance de l’infrastructure sous-jacente. D’autre part, le déploiement de NGINX Plus sur des machines virtuelles vous offre une pile puissante avec plus de contrôle et de flexibilité pour affiner vos règles de sécurité.
Choisir entre Azure Application Gateway et NGINX Plus pour équilibrer la charge et sécuriser les applications créées dans un ASE nécessite une bonne compréhension des fonctionnalités fournies par chaque solution. Bien qu’Azure Application Gateway fonctionne pour les cas d’utilisation simples, pour les cas d’utilisation complexes, il ne fournit pas de nombreuses fonctionnalités fournies en standard dans NGINX Plus.
Le tableau suivant compare la prise en charge des fonctionnalités d’équilibrage de charge et de sécurité dans Azure Application Gateway et NGINX Plus. Plus de détails sur les fonctionnalités de NGINX Plus apparaissent sous le tableau.
Fonctionnalité | Passerelle d'application Azure | NGINX Plus |
---|---|---|
Capacité d’atténuation | Couche applicative (couche 7) | Couche applicative (couche 7) |
Compatible avec HTTP | ✅ | ✅ |
Compatible HTTP/2 | ❌ | ✅ |
Compatible avec WebSocket | ❌ | ✅ |
Déchargement SSL | ✅ | ✅ |
Capacités de routage | Décision simple basée sur l'URL de la requête ou sur l'affinité de session basée sur les cookies | Capacités de routage avancées |
Listes de contrôle d'accès basées sur les adresses IP | ❌ (doit être défini au niveau de l'application Web dans Azure) | ✅ |
Points finaux | Toute adresse IP interne Azure, adresse IP Internet publique, machine virtuelle Azure ou service cloud Azure | Toute adresse IP interne Azure, adresse IP Internet publique, machine virtuelle Azure ou service cloud Azure |
Prise en charge d'Azure Vnet | Applications Internet et internes (Vnet) | Applications Internet et internes (Vnet) |
WAF | ✅ | ✅ |
Attaques volumétriques | Partiel | Partiel |
Attaques de protocole | Partiel | Partiel |
Attaques au niveau de la couche applicative | ✅ | ✅ |
Authentification de base HTTP | ❌ | ✅ |
Authentification JWT | ❌ | ✅ |
SSO OpenID Connect | ❌ | ✅ |
Comme vous pouvez le constater, NGINX Plus et Azure Application Gateway agissent tous deux comme des ADC avec des fonctionnalités d’équilibrage de charge de couche 7 ainsi qu’un WAF pour garantir une protection renforcée contre les vulnérabilités et les exploits Web courants.
NGINX Plus fournit plusieurs fonctionnalités supplémentaires manquantes dans Azure Application Gateway :
Pour plus de sécurité, vous pouvez déployer Azure DDoS Protection pour atténuer les menaces au niveau des couches 3 et 4 , en complément des fonctionnalités d’atténuation des menaces de couche 7 fournies par Azure Application Gateway ou NGINX Plus.
La figure 3 montre comment combiner NGINX Plus et Azure App Service pour fournir un environnement sécurisé pour l’exécution d’applications métier en production. Cette stratégie de déploiement utilise NGINX Plus pour ses fonctionnalités d'équilibrage de charge et WAF.
Le déploiement combine les composants suivants :
Environnement Azure App Service – Cet exemple de déploiement utilise deux exemples d’applications Web – Web App 1 et Web App 2 – pour montrer comment sécuriser et équilibrer la charge de différentes applications Web avec NGINX Plus. Dans NGINX Plus, vous distribuez les requêtes à différentes applications Web en configurant des blocs en amont
distincts et effectuez le routage du contenu en fonction de l'URI avec des blocs d'emplacement
. Ce qui suit montre la configuration minimale de NGINX Plus qui répond à cet objectif (ici, toutes les requêtes vont au même groupe en amont) :
backend en amont { serveur adresse-IP-de-votre-ASE-ILB ; } serveur { emplacement / { proxy_set_header Hôte $host; proxy_pass http://backend; } }
Azure prend également en charge les groupes de ressources comme moyen simple de regrouper les ressources Azure d’une application de manière logique. L’utilisation d’un groupe de ressources n’a aucun impact sur la conception et la topologie de l’infrastructure, et nous ne les montrons pas ici.
Un ensemble de machines virtuelles Azure vous offre la puissance de la virtualisation avec la possibilité d’évoluer à tout moment sans avoir à acheter et à entretenir le matériel physique qui prend en charge la mise à l’échelle. Cependant, vous êtes toujours responsable de la maintenance de la machine virtuelle en effectuant des tâches telles que la configuration, la mise à jour des correctifs, la mise à jour de sécurité et l'installation des logiciels qui s'exécutent dessus.
Dans l’architecture illustrée dans la Figure 4, les instances NGINX Plus sont déployées pour une haute disponibilité active-active au sein d’un groupe de machines virtuelles Azure. Une configuration active-active est idéale, car toutes les machines virtuelles NGINX Plus peuvent gérer une demande entrante acheminée par Azure Load Balancer, vous offrant ainsi une capacité rentable.
Avec les ensembles de machines virtuelles Azure, vous pouvez également configurer facilement la mise à l’échelle automatique des instances NGINX Plus en fonction de l’utilisation moyenne du processeur. Vous devez prendre soin de synchroniser les fichiers de configuration NGINX Plus dans ce cas. Vous pouvez utiliser la fonctionnalité de partage de configuration NGINX Plus à cette fin, comme décrit dans le Guide d'administration NGINX Plus .
En utilisant Azure App Service pour vos applications cloud et NGINX Plus devant vos applications Web, API et back-ends mobiles, vous pouvez équilibrer la charge et sécuriser ces applications à l’échelle mondiale. En utilisant NGINX Plus conjointement avec Azure App Service, vous obtenez une infrastructure entièrement équilibrée avec un niveau de protection élevé contre les exploits et les attaques du Web. Cela garantit une conception robuste pour exécuter des applications critiques en production de manière sécurisée.
Présentation des applications Web (Microsoft)
Introduction aux environnements App Service (Microsoft)
Créer une passerelle d'application avec un pare-feu d'application Web à l'aide du portail Azure (Microsoft)
Comparer les fonctionnalités de NGINX Open Source et NGINX Plus (NGINX)
Équilibrage de charge HTTP (NGINX)
Cédric Derue, co-auteur invité, est architecte de solutions et Microsoft MVP chez Altran. Vincent Thavonekham, co-auteur invité, est directeur régional Microsoft et Azure MVP chez VISEO.
« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."