# TP Azure – Architecture Bastion & VM privée > **Guide pas à pas** — Mise en place d'une architecture sécurisée avec une VM bastion (publique) et une VM privée (isolée), partage de fichiers Azure Files, et accès bureau à distance. --- ## Table des matières 1. [Créer le groupe de ressources](#1--créer-le-groupe-de-ressources) 2. [Créer le réseau virtuel (VNet)](#2--créer-le-réseau-virtuel-vnet) 3. [Créer la VM Bastion (publique)](#3--créer-la-vm-bastion-publique) 4. [Créer la VM Private (isolée)](#4--créer-la-vm-private-isolée) 5. [Se connecter à la VM privée via le bastion](#5--se-connecter-à-la-vm-privée-via-le-bastion) 6. [Transférer des fichiers entre les VMs](#6--transférer-des-fichiers-entre-les-vms) 7. [Créer un sous-réseau dédié](#7--créer-un-sous-réseau-dédié) 8. [Configurer Azure Files (partage de fichiers)](#8--configurer-azure-files-partage-de-fichiers) 9. [Monter Azure Files sur les deux VMs](#9--monter-azure-files-sur-les-deux-vms) 10. [Installer un bureau à distance (RDP + XFCE)](#10--installer-un-bureau-à-distance-rdp--xfce) --- ## 1 — Créer le groupe de ressources Le groupe de ressources est le conteneur logique qui regroupe toutes les ressources Azure du TP. ![Création du groupe de ressources dans le portail Azure](https://hackmd.io/_uploads/HJisA9zHbe.png) > On crée un nouveau groupe de ressources depuis le portail Azure. Choisissez un nom explicite (ex: `rg-tp-bastion`) et la région la plus proche. --- ## 2 — Créer le réseau virtuel (VNet) Le réseau virtuel permet aux VMs de communiquer entre elles via des adresses IP privées. ![Recherche et création d'un réseau virtuel](https://hackmd.io/_uploads/Hk2sysMS-l.png) > On accède au service **Réseaux virtuels** depuis le portail Azure pour créer notre VNet. ![Configuration de base du VNet — nom et région](https://hackmd.io/_uploads/rJTZesfHWe.png) > Remplissez le nom du réseau virtuel et sélectionnez la même région que le groupe de ressources. ![Configuration de l'espace d'adressage IP](https://hackmd.io/_uploads/ByvcXjfrbe.png) > Définissez l'espace d'adressage du VNet (ex: `10.0.0.0/16`). C'est la plage d'IP disponible pour toutes les VMs du réseau. ![Configuration du sous-réseau par défaut](https://hackmd.io/_uploads/Bkmo7izBWl.png) > Azure crée automatiquement un sous-réseau par défaut (ex: `10.0.0.0/24`). Les premières VMs seront placées dans ce sous-réseau. ![Récapitulatif de la configuration réseau](https://hackmd.io/_uploads/Hy5oQjGHWl.png) > Vérifiez les paramètres avant de valider la création. ![Déploiement du VNet terminé](https://hackmd.io/_uploads/rkMVNjGSZx.png) > ✅ Le réseau virtuel est déployé et prêt à accueillir les VMs. --- ## 3 — Créer la VM Bastion (publique) La VM bastion est la **seule machine accessible depuis Internet**. Elle sert de passerelle SSH pour atteindre la VM privée. ### 3.1 — Créer la clé SSH ![Création de la paire de clés SSH](https://hackmd.io/_uploads/S1TrSiGSWl.png) > On génère une paire de clés SSH. Azure crée la clé et vous propose de télécharger la clé privée (fichier `.pem`). **Conservez-la précieusement.** ### 3.2 — Configurer et déployer la VM ![VM bastion déployée — vue d'ensemble](https://hackmd.io/_uploads/BJtMHjzB-l.png) > La VM bastion est créée avec Ubuntu Server. Elle possède une IP publique pour être accessible depuis Internet. ![Détails de la VM bastion — réseau et IP](https://hackmd.io/_uploads/BJSmHiMSbg.png) > Récapitulatif des informations réseau de la VM bastion. ### 3.3 — Informations de la VM Bastion | Élément | Valeur | |---|---| | Nom | **vm-bastion** | | IP publique | **98.66.160.186** | | IP privée | 10.0.0.4 | | OS | Ubuntu 24.04 | | Ports ouverts | **SSH 22** | | Accès Internet | OUI | > C'est la **seule machine visible depuis Internet**. Elle joue le rôle de passerelle (bastion). ![Enregistrement du chemin de la clé SSH](https://hackmd.io/_uploads/Bk6cIizBWl.png) > Notez bien le chemin du fichier `.pem` sur votre machine locale. Vous en aurez besoin pour chaque connexion SSH. ### 3.4 — Se connecter à la VM Bastion ```bash ssh -i tpkey.pem abder@98.66.160.186 ``` ![Connexion SSH réussie à vm-bastion](https://hackmd.io/_uploads/Hk1TOifSbx.png) > ✅ Connexion SSH établie avec la VM bastion. On est prêt à créer la VM privée. --- ## 4 — Créer la VM Private (isolée) La VM privée n'a **aucune IP publique** et n'est accessible que depuis la VM bastion. ### 4.1 — Demander un quota si nécessaire ![Demande de quota pour la taille de VM](https://hackmd.io/_uploads/ryQ35sGHWl.png) > Si la taille de VM souhaitée n'est pas disponible, il faut faire une demande de quota auprès d'Azure. ![Validation de la demande de quota](https://hackmd.io/_uploads/rypa5ofSWx.png) > Azure traite la demande. Une fois approuvée, la taille sera disponible. ### 4.2 — Configuration de base Même processus que pour la VM bastion, avec quelques différences clés. ![Configuration de base de la VM privée](https://hackmd.io/_uploads/r15MnifrWx.png) > On crée la VM avec le même OS (Ubuntu 24.04) mais dans le même VNet que la VM bastion. ![Choix de la taille de la VM privée](https://hackmd.io/_uploads/SJbX2jfSZg.png) > Sélectionnez une taille adaptée à vos besoins et votre budget. ![Configuration de l'authentification](https://hackmd.io/_uploads/HJ_Q2jMH-x.png) > Utilisez la **même clé SSH** que la VM bastion pour simplifier les connexions. ### 4.3 — Configuration réseau — Point critique ![Configuration réseau de la VM privée — pas d'IP publique](https://hackmd.io/_uploads/Bkol2sMSbl.png) > **Point crucial :** On ne crée **aucune IP publique** pour cette VM. Elle sera uniquement accessible via le réseau privé. ![Sélection du VNet et du sous-réseau](https://hackmd.io/_uploads/rJVWhjzBWg.png) > Placez la VM dans le **même réseau virtuel** que la VM bastion pour qu'elles puissent communiquer. ![Validation de la configuration réseau](https://hackmd.io/_uploads/Bk3JaifSWg.png) > Vérifiez qu'aucune IP publique n'est assignée et que le VNet est correct. ### 4.4 — Informations de la VM Private ![Vue d'ensemble de la VM privée](https://hackmd.io/_uploads/Sy6baifrWx.png) > La VM privée est déployée. Notez l'absence d'IP publique. ![Détails réseau de la VM privée](https://hackmd.io/_uploads/B1SMTsGHZe.png) > L'IP privée de la VM est `10.0.0.5`, accessible uniquement depuis le réseau interne. ![Confirmation du déploiement](https://hackmd.io/_uploads/Bkb76sMBbl.png) > ✅ La VM privée est opérationnelle. | Élément | Valeur | |---|---| | Nom | **vm-private** | | IP publique | ❌ Aucune | | IP privée | **10.0.0.5** | | OS | Ubuntu 24.04 | | Accès Internet direct | ❌ | | Accès depuis vm-bastion | ✅ | > Elle est **invisible depuis Internet** et accessible uniquement depuis vm-bastion. --- ## 5 — Se connecter à la VM privée via le bastion ### 5.1 — Transférer la clé SSH vers le bastion Depuis la VM bastion, on doit pouvoir se connecter à la VM privée. Il faut d'abord y transférer la clé SSH. ![Transfert de la clé SSH vers vm-bastion](https://hackmd.io/_uploads/ByUWAiMr-l.png) > On copie la clé privée `.pem` sur la VM bastion pour pouvoir rebondir vers la VM privée. ![Vérification de la clé sur vm-bastion](https://hackmd.io/_uploads/SyxGCszrZx.png) > La clé SSH est bien présente sur la VM bastion. On peut maintenant se connecter à la VM privée. ### 5.2 — Se connecter depuis le bastion vers la VM privée ```bash ssh -i tpkey.pem abder@10.0.0.5 ``` ![Préparation de la connexion SSH vers vm-private](https://hackmd.io/_uploads/BkHG0sfSWe.png) > On utilise l'adresse IP privée (`10.0.0.5`) pour se connecter, puisque la VM n'a pas d'IP publique. ![Connexion SSH réussie à vm-private depuis vm-bastion](https://hackmd.io/_uploads/Hkl_RizBWe.png) > ✅ **Connexion réussie !** On est connecté à la VM privée en rebondissant via le bastion. Le flux est : PC → vm-bastion (IP publique) → vm-private (IP privée). --- ## 6 — Transférer des fichiers entre les VMs ### 6.1 — Créer un dossier partagé sur vm-private Sur vm-private : ```bash mkdir ~/partage chmod 755 ~/partage ls -l ~ ``` ### 6.2 — Créer un fichier test ```bash echo "Fichier depuis vm-private" > ~/partage/secret.txt cat ~/partage/secret.txt ``` ### 6.3 — Revenir sur vm-bastion ```bash exit ``` ![Création du dossier et du fichier sur vm-private](https://hackmd.io/_uploads/BylL1nzBWl.png) > On crée le dossier `partage` et un fichier `secret.txt` sur la VM privée, puis on revient sur le bastion. ![Retour sur vm-bastion après exit](https://hackmd.io/_uploads/SJKI1hfBZg.png) > On est de retour sur `vm-bastion`. On va maintenant récupérer le fichier créé sur la VM privée. ### 6.4 — Copier un fichier depuis vm-private vers vm-bastion Sur vm-bastion : ```bash scp -i tpkey.pem abder@10.0.0.5:/home/abder/partage/secret.txt . cat secret.txt ``` > Résultat attendu : `Fichier depuis vm-private` ### 6.5 — Copier un fichier depuis vm-bastion vers vm-private ```bash echo "Fichier depuis bastion" > envoi.txt scp -i tpkey.pem envoi.txt abder@10.0.0.5:/home/abder/partage/ ``` Vérification (se reconnecter à vm-private) : ```bash ssh -i tpkey.pem abder@10.0.0.5 ls ~/partage cat ~/partage/envoi.txt ``` ![Transfert SCP réussi entre les deux VMs](https://hackmd.io/_uploads/SykvJ2GrWg.png) > ✅ Le transfert de fichiers fonctionne dans les deux sens via SCP en utilisant la clé SSH et l'IP privée. --- ## 7 — Créer un sous-réseau dédié On isole la VM privée dans un sous-réseau séparé pour une meilleure segmentation réseau. ### 7.1 — Créer le sous-réseau ![Création d'un nouveau sous-réseau dans le VNet](https://hackmd.io/_uploads/SJ9HznfrZx.png) > Dans les paramètres du VNet, on ajoute un second sous-réseau (ex: `subnet-private` avec la plage `10.0.1.0/24`). ![Configuration du sous-réseau](https://hackmd.io/_uploads/rkjdfnzSbx.png) > Définissez le nom et la plage d'adresses du nouveau sous-réseau. ### 7.2 — Déplacer la VM privée dans le nouveau sous-réseau ![Changement de sous-réseau de la VM privée](https://hackmd.io/_uploads/HJnPNnzSbg.png) > On modifie la carte réseau de vm-private pour la déplacer vers le nouveau sous-réseau. ![Confirmation : vm-private est dans le sous-réseau dédié](https://hackmd.io/_uploads/S1LT4hMrWl.png) > ✅ La VM privée est maintenant isolée dans son propre sous-réseau (`subnet-private`), renforçant la segmentation réseau. --- ## 8 — Configurer Azure Files (partage de fichiers) Azure Files permet de créer un partage de fichiers accessible par les deux VMs simultanément. ### 8.1 — Créer le compte de stockage ![Création du compte de stockage Azure](https://hackmd.io/_uploads/r1TqrhfBZg.png) > On crée un compte de stockage Azure qui hébergera le partage de fichiers. ![Compte de stockage déployé avec succès](https://hackmd.io/_uploads/BJsOI3fSZg.png) > ✅ Le compte de stockage est déployé. ![Vue d'ensemble du compte de stockage](https://hackmd.io/_uploads/SJjt83zrbe.png) > Le dashboard du compte de stockage montre les informations principales et les services disponibles. ### 8.2 — Créer le partage de fichiers ![Création d'un nouveau partage de fichiers Azure Files](https://hackmd.io/_uploads/r1fh_3zSZx.png) > Dans la section **Partages de fichiers**, on crée un nouveau partage (ex: `partage`). ![Partage de fichiers créé](https://hackmd.io/_uploads/SJgEc3fSbg.png) > ✅ Le partage de fichiers est créé et prêt à être monté sur les VMs. ### 8.3 — Récupérer le script de connexion ![Script de connexion affiché par Azure](https://hackmd.io/_uploads/BkFR5nGrWe.png) > Azure fournit un script de montage pour Linux. On va l'adapter pour nos VMs. --- ## 9 — Monter Azure Files sur les deux VMs ### 9.1 — Monter sur vm-bastion #### Installer le support CIFS ```bash sudo apt update sudo apt install -y cifs-utils ``` ![Installation de cifs-utils sur vm-bastion](https://hackmd.io/_uploads/BJCg3hGH-x.png) > Le package `cifs-utils` permet à Linux de monter des partages de fichiers SMB/CIFS comme Azure Files. #### Créer le dossier de montage et le fichier d'identifiants ```bash sudo mkdir -p /media/partage sudo mkdir -p /etc/smbcredentials sudo nano /etc/smbcredentials/tpstorageabder.cred ``` ![Création du fichier d'identifiants Azure](https://hackmd.io/_uploads/ByA332frZg.png) > Le fichier `.cred` contient le nom du compte de stockage et la clé d'accès. Ces informations se trouvent dans le portail Azure. #### Ajouter le montage automatique dans `/etc/fstab` ```bash sudo nano /etc/fstab ``` Ajoutez cette ligne à la fin du fichier : ``` //tpstorageabder.file.core.windows.net/partage /media/partage cifs nofail,credentials=/etc/smbcredentials/tpstorageabder.cred,dir_mode=0777,file_mode=0777,serverino,nosharesock,mfsymlinks,actimeo=30 ``` ![Ajout de la ligne de montage dans fstab](https://hackmd.io/_uploads/rkiYp3fHWg.png) > La ligne dans `/etc/fstab` assure que le partage sera monté automatiquement à chaque démarrage de la VM. ![Azure Files monté avec succès sur vm-bastion](https://hackmd.io/_uploads/HyMZA3MBZx.png) > ✅ Azure Files est monté et fonctionnel sur vm-bastion. Le dossier `/media/partage` est maintenant synchronisé avec le cloud. ### 9.2 — Monter sur vm-private On se connecte à la VM privée et on répète le même processus. ![Connexion à vm-private pour le montage](https://hackmd.io/_uploads/ryiqA3zS-l.png) > On rebondit via le bastion pour accéder à la VM privée. ![Installation de cifs-utils sur vm-private](https://hackmd.io/_uploads/HJL0A3MHZx.png) > On installe les mêmes dépendances sur la VM privée. ![Création des identifiants sur vm-private](https://hackmd.io/_uploads/HkR00hMrWl.png) > On crée le fichier d'identifiants Azure Files sur la VM privée. ![Configuration de fstab sur vm-private](https://hackmd.io/_uploads/SkyR0hfrWl.png) > On ajoute la même ligne de montage dans `/etc/fstab` de la VM privée. ![Montage réussi sur vm-private](https://hackmd.io/_uploads/Bk7G1TGSZg.png) > ✅ Le montage fonctionne aussi sur vm-private. ![Vérification du partage — fichiers synchronisés](https://hackmd.io/_uploads/H1eWy6fS-x.png) > Les fichiers créés depuis une VM apparaissent automatiquement sur l'autre grâce au partage Azure Files. ![Test de lecture/écriture sur le partage](https://hackmd.io/_uploads/SJZHy6GBbg.png) > ✅ Le partage Azure Files est fonctionnel sur les deux VMs. Les fichiers sont synchronisés en temps réel. --- ## 10 — Installer un bureau à distance (RDP + XFCE) ### 10.1 — Installer l'environnement graphique ![Installation des paquets pour l'interface graphique](https://hackmd.io/_uploads/BkZjMt7HZl.png) > On installe un serveur XRDP et un environnement de bureau léger sur la VM bastion. ### 10.2 — Configurer les règles réseau pour RDP ![Ajout de la règle RDP (port 3389) dans le NSG](https://hackmd.io/_uploads/HJu8GYmHZg.png) > On ajoute une règle de sécurité entrante pour autoriser le **port 3389 (RDP)** dans le NSG de la VM bastion. ![Configuration de la règle RDP](https://hackmd.io/_uploads/r18vztmHWg.png) > Paramètres de la règle : autoriser le trafic TCP entrant sur le port 3389 depuis n'importe quelle source. ![Règle RDP activée dans le NSG](https://hackmd.io/_uploads/HJx-mtXSWx.png) > ✅ La règle RDP est active. La connexion bureau à distance est maintenant autorisée. ### 10.3 — Se connecter en bureau à distance ![Connexion RDP depuis le client Windows](https://hackmd.io/_uploads/S1bF7FQHbe.png) > Ouvrez **Connexion Bureau à distance** sur Windows et entrez l'IP publique de vm-bastion. ### 10.4 — Créer un mot de passe utilisateur ```bash sudo passwd abder ``` ![Création du mot de passe pour la connexion RDP](https://hackmd.io/_uploads/r1aUNYXBZe.png) > RDP nécessite un mot de passe (contrairement à SSH qui utilise une clé). On en crée un pour l'utilisateur `abder`. ![Confirmation du mot de passe](https://hackmd.io/_uploads/HJzCUYmS-g.png) > Le mot de passe est défini. On peut maintenant se connecter via RDP. ### 10.5 — Installer XFCE (résolution du bug d'écran noir) > ⚠️ **Bug courant** : l'environnement de bureau par défaut peut afficher un écran noir via RDP. **XFCE** est une alternative légère qui fonctionne correctement. > **Note :** Si la VM est surchargée avec la taille gratuite (B2ats_v2), passez à une taille supérieure pour supporter l'interface graphique. ![Changement de taille de VM pour supporter le bureau](https://hackmd.io/_uploads/rytf0tQHbl.png) > On augmente la taille de la VM pour qu'elle ait assez de ressources pour l'environnement graphique. ![Installation de XFCE en cours](https://hackmd.io/_uploads/HkT0pKXHbx.png) > Installation de l'environnement de bureau XFCE via `sudo apt install xfce4`. ![XFCE installé — prêt pour la connexion](https://hackmd.io/_uploads/H1QbTY7Bbg.png) > ✅ XFCE est installé et configuré comme environnement de bureau par défaut pour XRDP. ### 10.6 — Résultat final — Bureau à distance fonctionnel ![Bureau à distance connecté — écran de connexion XFCE](https://hackmd.io/_uploads/HkVqaFQHbg.png) > L'écran de connexion XFCE s'affiche via RDP. Entrez vos identifiants (`abder` + le mot de passe créé). ![Bureau XFCE fonctionnel via RDP](https://hackmd.io/_uploads/ry79H9QSZe.png) > ✅ **Le bureau à distance est fonctionnel !** On accède à l'interface graphique de la VM bastion depuis notre PC via RDP. --- ## Récapitulatif de l'architecture ``` ┌──────────────┐ ┌─────────────────────────────────────┐ │ Votre PC │ │ Réseau Virtuel Azure │ │ │ │ │ │ │──SSH──▶│ ┌─────────────┐ ┌─────────────┐ │ │ │──RDP──▶│ │ vm-bastion │───▶│ vm-private │ │ │ │ │ │ IP: pub+priv│ │ IP: priv │ │ │ │ │ │ Port 22,3389│ │ Aucun port │ │ └──────────────┘ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ └───────┬───────────┘ │ │ │ │ │ ┌────────▼────────┐ │ │ │ Azure Files │ │ │ │ /media/partage │ │ │ └─────────────────┘ │ └─────────────────────────────────────┘ ``` ### Résumé des ressources | Ressource | Rôle | |---|---| | **Groupe de ressources** | Conteneur logique pour toutes les ressources | | **VNet + 2 sous-réseaux** | Réseau privé pour la communication inter-VMs | | **vm-bastion** | Passerelle SSH/RDP accessible depuis Internet | | **vm-private** | Machine isolée, accessible uniquement via le bastion | | **Azure Files** | Partage de fichiers monté sur les deux VMs | | **NSG** | Règles de pare-feu (SSH 22, RDP 3389) | ### Principes de sécurité appliqués | Principe | Mise en œuvre | |---|---| | **Moindre privilège** | vm-private n'a aucune IP publique | | **Bastion / Jump host** | Un seul point d'entrée depuis Internet | | **Segmentation réseau** | Sous-réseaux séparés pour chaque rôle | | **Authentification par clé** | SSH par clé `.pem`, pas de mot de passe | | **Partage centralisé** | Azure Files évite les copies manuelles | --- > **Guide réalisé par Abder** — TP Azure : Architecture Bastion & VM privée