Leçon 5 / 8
Leçon 05 · Microsoft Azure

Réseaux virtuels

VNet — Virtual Network

Un Virtual Network (VNet) est le bloc de construction fondamental du réseau dans Azure. C'est un réseau privé isolé dans le cloud, qui te permet de faire communiquer tes ressources Azure entre elles de façon sécurisée, sans passer par l'internet public.

Chaque VNet est défini par un espace d'adressage IP en notation CIDR (ex. 10.0.0.0/16), qui détermine la plage d'adresses privées disponibles. Un VNet est lié à une région Azure : tu ne peux pas étirer un VNet sur deux régions (pour ça, il faudra du VNet Peering ou un VPN Gateway).

💡

Choisis un espace d'adressage suffisamment large dès le départ — difficile à modifier après coup. Une plage /16 (65 536 adresses) est couramment utilisée pour un environnement de production, avec des sous-réseaux /24 (254 adresses utilisables) pour chaque couche applicative.

Sous-réseaux (Subnets)

Un VNet est divisé en sous-réseaux (subnets). Chaque ressource Azure (VM, App Service Environment, base de données managée…) est déployée dans un subnet. Azure réserve 5 adresses dans chaque subnet (réseau, passerelle, DNS x2, broadcast), donc un /24 offre 251 adresses utilisables.

Bonne pratique : segmenter par rôle

  • Subnet public (10.0.1.0/24) — ressources accessibles depuis Internet (load balancers, Azure Bastion).
  • Subnet privé applicatif (10.0.2.0/24) — VMs, containers. Pas d'IP publique directe.
  • Subnet privé données (10.0.3.0/24) — bases de données managées, caches.
  • GatewaySubnet (10.0.255.0/27) — obligatoire si tu utilises un VPN Gateway ou ExpressRoute. Doit s'appeler exactement GatewaySubnet.
  • AzureBastionSubnet (10.0.254.0/27) — dédié à Azure Bastion (minimum /26 recommandé).

Groupes de sécurité réseau (NSG)

Un Network Security Group (NSG) est un pare-feu stateless Azure qui filtre le trafic réseau. Il contient des règles de sécurité entrantes (inbound) et sortantes (outbound). Chaque règle définit : protocole, plage de ports source/destination, adresses source/destination, et une action (Allow/Deny).

Priorités et évaluation

Les règles sont évaluées par ordre de priorité croissante (100 = plus haute priorité, 4096 = la plus basse). Dès qu'une règle correspond au trafic, elle s'applique et l'évaluation s'arrête. Des règles par défaut non supprimables existent (priorité 65000-65500) : elles autorisent le trafic intra-VNet et sortant vers Internet, et bloquent tout le reste.

# Créer un NSG
az network nsg create \
  --resource-group MonRG \
  --name MonNSG \
  --location francecentral

# Ajouter une règle entrante : autoriser SSH (port 22) depuis une IP spécifique
az network nsg rule create \
  --resource-group MonRG \
  --nsg-name MonNSG \
  --name AllowSSH \
  --priority 100 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes 203.0.113.0/24 \
  --destination-port-ranges 22

# Ajouter une règle entrante : autoriser HTTP/HTTPS depuis Internet
az network nsg rule create \
  --resource-group MonRG \
  --nsg-name MonNSG \
  --name AllowWeb \
  --priority 200 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes Internet \
  --destination-port-ranges 80 443

# Associer un NSG à un subnet
az network vnet subnet update \
  --resource-group MonRG \
  --vnet-name MonVNet \
  --name SubnetPublic \
  --network-security-group MonNSG
⚠️

Un NSG peut être associé à un subnet (appliqué à toutes les VMs du subnet) ou directement à une carte réseau (NIC) d'une VM. Si les deux sont configurés, les règles de la NIC s'appliquent d'abord sur le trafic entrant, et les règles du subnet s'appliquent d'abord sur le trafic sortant. Évite de multiplier les associations pour garder tes règles lisibles.

IP publiques et privées

Toute ressource dans un VNet reçoit une IP privée (depuis la plage CIDR du subnet). Les IPs privées peuvent être dynamiques (attribuées par DHCP, peuvent changer au redémarrage) ou statiques (fixées, recommandées pour les serveurs critiques).

Les IPs publiques sont des ressources Azure à part entière, associables à une NIC ou un load balancer. Elles existent en deux SKUs :

  • Basic — dynamique ou statique, sans zone de disponibilité, SLA moindre. En voie de dépréciation.
  • Standard — toujours statique, zone-redundant par défaut, SLA 99,99 %. A privilégier.
# Créer une IP publique Standard statique
az network public-ip create \
  --resource-group MonRG \
  --name MonIPPublique \
  --sku Standard \
  --allocation-method Static \
  --location francecentral

# Voir l'adresse IP assignée
az network public-ip show \
  --resource-group MonRG \
  --name MonIPPublique \
  --query ipAddress \
  --output tsv

VNet Peering

Le VNet Peering permet de connecter deux VNets pour que leurs ressources communiquent via le réseau backbone Microsoft, sans passer par Internet et sans chiffrement supplémentaire nécessaire. Le trafic est privé, rapide, et à faible latence.

Le peering fonctionne dans la même région (regional peering) et entre régions différentes (global peering). Il est non transitif : si VNet-A peere avec VNet-B et VNet-B peere avec VNet-C, VNet-A ne voit pas VNet-C automatiquement.

# Peering de VNet-A vers VNet-B
az network vnet peering create \
  --resource-group MonRG \
  --name PeeringAversB \
  --vnet-name VNet-A \
  --remote-vnet VNet-B \
  --allow-vnet-access

# Peering de VNet-B vers VNet-A (obligatoire — le peering est bidirectionnel mais chaque sens se configure)
az network vnet peering create \
  --resource-group MonRG \
  --name PeeringBversA \
  --vnet-name VNet-B \
  --remote-vnet VNet-A \
  --allow-vnet-access
💡

Les espaces d'adressage des deux VNets peerés ne doivent pas se chevaucher. Planifie tes plages CIDR soigneusement avant de déployer — une fois les ressources créées, changer les plages d'adressage d'un VNet est complexe.

Azure Bastion

Azure Bastion est un service PaaS qui te permet d'accéder en SSH ou RDP à tes VMs directement depuis le portail Azure, via ton navigateur, sans exposer d'IP publique sur tes VMs. Plus besoin d'ouvrir le port 22 ou 3389 dans ton NSG vers Internet.

Bastion se déploie dans un subnet dédié nommé AzureBastionSubnet (taille minimum /26), avec une IP publique Standard. Il fait le proxy de la connexion SSH/RDP entre ton navigateur et la VM privée.

# Créer l'AzureBastionSubnet dans un VNet existant
az network vnet subnet create \
  --resource-group MonRG \
  --vnet-name MonVNet \
  --name AzureBastionSubnet \
  --address-prefix 10.0.254.0/26

# Créer l'IP publique pour Bastion
az network public-ip create \
  --resource-group MonRG \
  --name BastionIP \
  --sku Standard \
  --allocation-method Static

# Déployer Azure Bastion (SKU Basic)
az network bastion create \
  --resource-group MonRG \
  --name MonBastion \
  --vnet-name MonVNet \
  --public-ip-address BastionIP \
  --location francecentral \
  --sku Basic

Exemple pratique : VNet complet avec 2 subnets et NSG

Voici la séquence complète pour créer une infrastructure réseau de base sous Azure CLI : un VNet avec un subnet public et un subnet privé, un NSG autorisant HTTP et SSH, associé au subnet public.

## 1. Variables de base
RG=MonRG
LOCATION=francecentral
VNET=MonVNet

## 2. Créer le groupe de ressources
az group create --name $RG --location $LOCATION

## 3. Créer le VNet avec le subnet public d'un coup
az network vnet create \
  --resource-group $RG \
  --name $VNET \
  --address-prefix 10.0.0.0/16 \
  --subnet-name SubnetPublic \
  --subnet-prefix 10.0.1.0/24

## 4. Ajouter le subnet privé
az network vnet subnet create \
  --resource-group $RG \
  --vnet-name $VNET \
  --name SubnetPrive \
  --address-prefix 10.0.2.0/24

## 5. Créer le NSG
az network nsg create \
  --resource-group $RG \
  --name NSG-Public

## 6. Règle : SSH depuis mon IP uniquement
az network nsg rule create \
  --resource-group $RG \
  --nsg-name NSG-Public \
  --name AllowSSH \
  --priority 100 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes MonIP/32 \
  --destination-port-ranges 22

## 7. Règle : HTTP/HTTPS depuis Internet
az network nsg rule create \
  --resource-group $RG \
  --nsg-name NSG-Public \
  --name AllowWeb \
  --priority 200 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes Internet \
  --destination-port-ranges 80 443

## 8. Associer le NSG au subnet public
az network vnet subnet update \
  --resource-group $RG \
  --vnet-name $VNET \
  --name SubnetPublic \
  --network-security-group NSG-Public

## 9. Vérifier la configuration
az network vnet show \
  --resource-group $RG \
  --name $VNET \
  --output table
// À retenir
  • Un VNet est un réseau privé isolé dans Azure, défini par un espace d'adressage CIDR.
  • Divise ton VNet en subnets par rôle : public, privé applicatif, privé données, GatewaySubnet.
  • Un NSG filtre le trafic entrant/sortant. Les règles sont évaluées par priorité croissante (100 = plus haute).
  • Les IPs publiques Standard (statiques) sont à privilégier sur les Basic (en voie de dépréciation).
  • Le VNet Peering connecte deux VNets via le backbone Microsoft — rapide, privé, non transitif.
  • Azure Bastion : accès SSH/RDP sans IP publique sur les VMs, depuis le portail Azure.