Table de Matieres
I. Présentation
Dans ce tutoriel, nous allons apprendre à mettre en place un Bastion dans Azure de manière à bénéficier d’un accès sécurisé à une ou plusieurs machines virtuelles Azure. Cet accès sécurisé est possible sur les serveurs Windows et Linux, aussi bien en RDP qu’en SSH.
Cet article s’inscrit dans la continuité de celui intitulé « Comment déployer un contrôleur de domaine Active Directory dans Azure ? ». Toutefois, la mise en place d’un bastion est intéressante à partir du moment où l’on a des machines virtuelles dans Azure, et que l’on souhaite avoir un accès sécurisé sans avoir une adresse IP publique sur les VMs. Ici, l’adresse IP publique est hébergée par le Bastion, et ce dernier contrôle les connexions aux machines virtuelles.
II. Qu’est-ce qu’Azure Bastion ?
Pour se connecter à des machines virtuelles Azure, il y a plusieurs solutions qui dépendent aussi de votre infrastructure : hybride entre du Cloud et du on-premise ? Full Cloud ? Etc… Parmi les possibilités pour se connecter à ses VMs Azure, il y a l’attribution d’une adresse IP publique sur chaque VM (avec les risques que cela comporte) ou encore la mise en place d’un VPN site-à-site (ou ExpressRoute) entre son infrastructure locale et l’infrastructure Azure. Néanmoins, ce n’est pas recommandé d’attribuer une adresse IP publique sur chacune de vos VMs, car elles se retrouvent directement exposées. La surface d’attaque est étendue de manière dangereuse et il est plus difficile de gérer les accès (chaque configuration étant indépendante, les connexions journalisées indépendamment, etc.).
Grâce à la solution Azure Bastion, pleinement intégrée à Azure sous la forme d’un service PaaS et développée par Microsoft, notre Bastion servira de point d’entrée unique pour accéder à nos machines virtuelles. Toutes les connexions à destination des machines virtuelles associées au Bastion seront gérées par ce même Bastion, qui au passage, assure une protection contre les différentes attaques.
La connexion aux machines virtuelles Windows et Linux est effectuée au travers des protocoles RDP et SSH, sans avoir besoin d’utiliser un logiciel spécifique sur son ordinateur : un navigateur compatible HTML5 suffit, ainsi qu’un accès au portail Azure.
Ci-dessous, le schéma de principe mis en ligne par Microsoft.
Pour mettre en place Azure Bastion, il y a deux licences (SKUs) différentes : « De base » et « Standard ». La version standard est plus évoluée, car elle intègre quelques fonctionnalités supplémentaires. De ce fait, elle est également plus coûteuse que la version « De base » avec un coût horaire qui est plus élevé. Ci-dessous, un tableau comparatif des fonctionnalités, ce qui pourra évoluer dans le temps.
Le coût d’Azure Bastion dépend du type de SKU retenu. Il y a un coût à l’heure (à partir de 0,198€ par heure), auquel il faut ajouter la consommation en termes de « Transfert de données sortantes » tout en sachant que chaque mois les 5 premiers Go sont offerts. Il faut avoir conscience que le Bastion est très intéressant en matière de sécurité, mais qu’il y a un coût à l’usage qui n’est pas négligeable.
La présentation étant faite, passons à la configuration d’Azure Bastion. Finalement, ce service intégré à Azure reprend le principe du bastion en matière de sécurité informatique.
III. Configuration d’Azure Bastion
Pour créer un Bastion à partir du portail Azure, il y a deux possibilités : le configurer au sein d’une machine virtuelle, ou le configurer à partir de la section « Bastions » du portail Azure.
A. Configurer un accès bastion pour une VM
Prenons le cas où l’on souhaite activer un bastion uniquement pour accéder à une seule VM. Cela s’effectue en quelques clics : on sélectionne la VM dans le portail Azure, puis dans « Vue d’ensemble« , on clique sur « Connecter » puis on sélectionne « Bastion« .
Ici, on a le choix entre créer un bastion avec la configuration par défaut (ce qui va générer un réseau virtuel, un groupe de ressources, etc…) ou avec une configuration manuelle (ce que l’on verra dans un second temps). La création du Bastion en mode automatique, c’est-à-dire avec les valeurs par défaut, prend environ 10 minutes dès lors que l’on a appuyé sur le bouton « Créer un bastion avec les valeurs par défaut« . Avec la configuration manuelle, il faudra compter un peu de temps supplémentaire afin de définir les différents paramètres.
Dès que la création est finie, il faut accéder à la section « Bastion » dans la VM pour laquelle la fonctionnalité est activée. Ainsi, on peut voir que l’on bastion est bien provisionné (état « Succeeded ») et on peut s’authentifier à l’aide d’un compte sur cette VM (soit avec un mot de passe, soit à partir d’informations stockées dans Azure Key Vault).
Ensuite, on clique sur « Connexion » et la connexion à la VM s’ouvre dans un nouvel onglet. La première fois, il sera utile d’activer les pop-up : un message s’affiche dans le navigateur pour vous le demander.
Au bout de quelques secondes, me voilà connecté sur ma VM en RDP par l’intermédiaire de mon Bastion ! J’accède à ma VM de façon sécurisée, à distance, à partir de n’importe quel ordinateur simplement à l’aide d’une connexion au portail Azure et d’un navigateur récent !
Passons maintenant à la mise en œuvre d’un bastion Azure pour plusieurs VMs.
B. Configurer un accès bastion pour un ensemble de VMs
Cette fois-ci, c’est un bastion pour plusieurs VMs que nous allons créer. Sur mon environnement Azure, j’ai un ensemble de serveurs virtuels connectés sur un réseau virtuel Azure (VNet). L’objectif est de mettre en place un bastion de manière à me connecter de façon sécurisée à l’ensemble de ces serveurs virtuels.
Pour cela, on va créer un bastion à partir de la section « Bastions » du portail Azure. Voici l’adresse pour y accéder : Bastions – Microsoft Azure
Ensuite, on crée un nouveau bastion. On commence par choisir son abonnement et son groupe de ressources (soit un RG existant, ou un nouveau).
Puis, ce sont les détails de l’instance qu’il faut configurer :
- Nom : le nom du bastion
- Région : l’emplacement de l’hôte bastion, il est recommandé d’utiliser la même région que celle utilisée par vos VMs (ceci permet d’éviter une latence supplémentaire)
- Niveau : « Standard » ou « De base« , selon le type de SKU dont vous avez besoin
- Nombre d’instances : avec le mode « Standard« , on peut ajuster le nombre d’instances. Au-delà de 2 instances, il y a un coût supplémentaire, mais il faut savoir que « Chaque instance peut prendre en charge 25 connexions RDP simultanées et 50 connexions SSH simultanées pour les charges de travail moyennes« . Autant dire que 2 instances, c’est déjà bien.
Ensuite, l’étape « Configurer les réseaux virtuels » doit être configurée. Ici, je sélectionne mon réseau virtuel existant où sont connectés mes serveurs virtuels, à savoir « VNET-10.10.0.0-16« . Aïe, mon réseau virtuel n’est pas conforme et ne peut pas accueillir mon bastion ! En cliquant sur « Gérer la configuration du sous-réseau« , nous pouvons remédier à cela.
La configuration du réseau virtuel s’affiche. En complément des sous-réseaux existants, il faut créer un nouveau « Sous-réseau« , comme ceci :
Ce nouveau sous-réseau doit impérativement s’appeler « AzureBastionSubnet » et il sera utilisé exclusivement par Azure Bastion.
Vous devez définir une adresse réseau, avec un masque de sous-réseau (à minima /26). Pour ma part, ce sera le réseau « 10.10.90.0/24« , tandis que mes serveurs virtuels sont en « 10.10.100.0/24« . Il n’est pas nécessaire de configurer les autres options.
Une fois le sous-réseau « AzureBastionSubnet » créé, vous devez cliquer sur « Créer un bastion » pour revenir au sein de l’assistant de création d’un bastion.
Cette fois-ci, la configuration est validée et il m’est possible de sélectionner ce nouveau sous-réseau.
Passons à l’étape « Adresse IP publique« . Vous pouvez créer une adresse IP publique ou utiliser une adresse IP existante, ainsi que donner un nom à cette adresse IP publique.
C’est tout pour la configuration principale du bastion. Dans l’onglet « Avancé« , on peut activer ou désactiver certaines options liées au SKU « Standard ». Il est possible de revenir sur ces options par la suite.
Voilà, on peut lancer la création du bastion Azure ! Go !
Après environ 10 minutes, le bastion Azure sera prêt ! Il apparaît dans la liste des bastions de votre abonnement, et bien sûr pour le moment, la liste des sessions actives est vide.
IV. Tester l’accès au bastion Azure
Désormais, on va tester notre bastion Azure fraîchement créé ! Pour vous connecter à votre machine virtuelle en passant par le Bastion, la connexion doit être initialisée depuis le portail Azure (à moins de recourir au client natif – voir partie suivante).
Au sein d’une machine virtuelle connectée au même VNet que le bastion, si j’accède à la section « Bastion« , je peux voir le message « Utilisation du bastion : it-connect-bastion » : ce qui est parfait ! Ainsi, je n’ai plus qu’à rentrer des informations d’identification pour accéder à ma VM via mon bastion !
Note : en cliquant sur « Paramètres de connexion« , on peut choisir le protocole, indiquer le numéro de port et choisir la langue pour le clavier.
À partir du moment où l’on se connecte à une ou plusieurs VMs, dans la liste des sessions du bastion, on peut voir les sessions en cours avec plusieurs informations : nom de la VM, nom de l’utilisateur, protocole, etc… Voici un exemple :
Par ailleurs, la section « Métriques » permet d’avoir différents graphiques, notamment sur le nombre de sessions sur une période. Le graphique ci-dessous, correspondant à une période de 8 minutes, montre bien l’évolution des connexions dans le temps.
V. Connexion au bastion avec le client RDP natif de Windows
Nous venons de voir comment établir une connexion à une ou plusieurs VMs à partir du portail Azure. En complément, on peut activer l’option « Prise en charge native du client » qui permet de se connecter avec des outils natifs, notamment le client « Bureau à distance » de Windows.
Voici où s’active cette option :
Note : l’option « Connexion basée sur IP » permet d’initier des connexions à des machines virtuelles à partir de l’adresse IP, ce qui permet d’utiliser Azure Bastion pour se connecter sur des serveurs on-premise ! Cette fonctionnalité est détaillée dans la documentation de Microsoft : Microsoft Learn – Azure Bastion – Connexion via IP
Une fois la modification effectuée, il faut passer par Azure CLI sur le poste client pour se connecter à la VM. Tout d’abord, il faut s’authentifier (az login) et sélectionner son abonnement, avant d’initier la connexion RDP/SSH au travers du bastion.
Voici une commande qui permet d’établir une connexion à ma VM « SRV-WSUS » hébergée sur Azure :
az network bastion rdp --name "it-connect-bastion" --resource-group "IT-Connect_Bastion" --target-resource-id "/subscriptions//resourceGroups/IT-CONNECT_VM_SRV_WSUS/providers/Microsoft.Compute/virtualMachines/SRV-WSUS"
En ce qui concerne les options :
- Le mot clé « rdp » peut être remplacé par « ssh » en fonction du protocole à utiliser
- –name : nom du bastion
- –resource-group : nom du groupe de ressources associé au bastion
- –target-resource-id : chemin complet vers la ressource cible, à savoir la VM (vous pouvez vous aider de la commande « az vm list » pour obtenir l’information)
Le client RDP est initialisé par Azure CLI, comme ceci :
Après authentification, le client Bureau à distance ouvre une connexion sur l’hôte distant, en RDP, en passant par le bastion. À l’usage, cela peut s’avérer plus appréciable que d’utiliser le mode Web.
Attention, si l’on utilise la console « Azure Cloud Shell » intégrée à Windows Terminal, cela ne fonctionne pas (une erreur Python est renvoyée). Il faut installer Azure CLI sur sa machine et l’utiliser à partir d’une console PowerShell (via Windows Terminal, c’est possible, mais sans passer par la console mentionnée précédemment).
VI. Conclusion
Nous venons de voir comment créer un bastion dans Azure et comment l’utiliser pour se connecter à différentes machines virtuelles ! Si vous passez des adresses IP publiques à l’utilisation d’un bastion, pensez à supprimer l’adresse IP publique sur vos différentes VMs (à moins qu’elle soit utile pour autre chose, auquel cas, vous pouvez désactiver le RDP/SSH).