---
# System prepended metadata

title: '# TP Azure – Architecture Bastion & VM privée'

---

# 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