Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 715 minIntermédiaire

Créer une VM Linux sur Azure et la protéger avec un NSG

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • choisir une taille, une image et un disque pour une VM ;
  • créer une VM Linux avec l'Azure CLI et cloud-init ;
  • filtrer les flux avec les règles d'un NSG ;
  • arrêter vraiment une VM pour ne plus payer le calcul.

3 exercices corrigés1 schéma

Une machine virtuelle Azure est le service IaaS de base : un serveur virtuel dont tu choisis la taille, le système et le réseau, et dont tu administres tout ce qui tourne à l'intérieur. Elle se protège avec un groupe de sécurité réseau (NSG, Network Security Group), une liste de règles de filtrage à états qui décide quels flux peuvent l'atteindre. Ce chapitre présente les composants d'une VM, le fonctionnement d'un NSG, puis un lab complet : une VM Ubuntu qui sert une page web, accessible en SSH depuis ta seule adresse IP, arrêtée et supprimée proprement.

Les composants d'une VM Azure

Une VM n'est pas une ressource unique : c'est un assemblage. az vm create crée automatiquement ce qui manque.

ComposantRôleChoix dans ce lab
TailleNombre de processeurs virtuels et mémoire. La série B est dite burstable : elle accumule des crédits de processeur au repos et les dépense lors des pics, idéale pour un petit serveur ; la série D est généralisteStandard_B1s : 1 vCPU, 1 Gio, comprise dans les services gratuits pendant 12 mois
ImageLe système installé, désigné par un URN éditeur:offre:référence:versionCanonical:ubuntu-24_04-lts:server:latest, Ubuntu 24.04 LTS
Disque du systèmeUn disque managé : HDD Standard, SSD Standard ou SSD PremiumCelui par défaut
Réseau virtuel et sous-réseauLe réseau privé de la VMCréés par la commande : 10.0.0.0/16, sous-réseau 10.0.0.0/24
Carte réseauRelie la VM au sous-réseau, porte son adresse privéeAdresse 10.0.0.4 : Azure réserve les premières adresses de chaque sous-réseau
Adresse IP publiqueRend la VM joignable depuis InternetSKU Standard, fermée par défaut tant qu'aucune règle ne l'ouvre
Groupe de sécurité réseauFiltre les flux entrants et sortantsCréé vide, puis deux règles ajoutées à la main

Ubuntu 26.04 LTS est aussi disponible (Canonical:ubuntu-26_04-lts:server:latest). Pour trouver une image, az vm image list-offers --location francecentral --publisher Canonical --output table liste les offres de l'éditeur, az vm image list --location francecentral --publisher Canonical --offer ubuntu-26_04-lts --all --output table les versions d'une offre, et az vm list-skus --location francecentral --size Standard_B --output table vérifie qu'une taille existe dans ta région.

Le groupe de sécurité réseau (NSG)

Un NSG est une liste de règles, associée à un sous-réseau ou à une carte réseau. Chaque règle porte une priorité (de 100 à 4096), un sens (entrant ou sortant), une source et une destination (adresse, plage CIDR ou étiquette de service), un port, un protocole et une action (autoriser ou refuser).

  • Les règles sont examinées par priorité croissante : la plus petite d'abord. La première qui correspond s'applique, et l'examen s'arrête.
  • Le NSG est à états : si un flux entrant est autorisé, la réponse repart sans règle sortante, comme sur pfSense (cours pfSense).
  • Les étiquettes de service remplacent des listes d'adresses tenues à jour par Microsoft : Internet, VirtualNetwork, AzureLoadBalancer, Storage…
  • Quand un NSG est associé au sous-réseau et un autre à la carte réseau, un flux entrant doit être autorisé par les deux : celui du sous-réseau d'abord, puis celui de la carte.

Tout NSG contient six règles par défaut, impossibles à supprimer, avec les priorités les plus basses :

SensNomPrioritéSourceDestinationAction
EntrantAllowVNetInBound65000VirtualNetworkVirtualNetworkAutoriser
EntrantAllowAzureLoadBalancerInBound65001AzureLoadBalancerToutesAutoriser
EntrantDenyAllInbound65500ToutesToutesRefuser
SortantAllowVnetOutBound65000VirtualNetworkVirtualNetworkAutoriser
SortantAllowInternetOutBound65001ToutesInternetAutoriser
SortantDenyAllOutBound65500ToutesToutesRefuser

Résultat : tout ce qui vient d'Internet est refusé tant qu'une règle de priorité plus forte ne l'autorise pas, et la VM peut sortir vers Internet (pour ses mises à jour, par exemple).

InternetTon adresse IPClient webAutre adresseDépôts Ubunturéseau virtuel 10.0.0.0/16sous-réseau 10.0.0.0/24vm-web01Ubuntu 24.04, Nginx10.0.0.4IP publique192.0.2.50NSG vm-web01NSGSSH 22 : règle 100HTTP 80 : règle 110SSH 22 : refusé, 65500sortie : règle 65001
Le NSG examine les règles par priorité croissante ; ce qui n'est pas autorisé est refusé

Lab : une VM web Ubuntu protégée par un NSG

Ce lab coûte quelques centimes s'il dure une heure, et la VM B1s entre dans les services gratuits la première année. Supprime tout à la fin.

1. Prépare le groupe de ressources et repère ton adresse publique.

bash
az group create --name rg-cloud-lab --location francecentral --tags cours=cloud

# Ton adresse IP publique, telle qu'Azure la verra
MON_IP=$(curl -s https://api.ipify.org)
echo "$MON_IP"

2. Écris un fichier cloud-init. Au premier démarrage, cloud-init installe Nginx et écrit une page d'accueil, sans que tu te connectes (cours Virtualisation).

bash
cat > cloud-init.yaml <<'EOF'
#cloud-config
package_update: true
packages:
  - nginx
runcmd:
  - echo '<meta charset="utf-8"><h1>vm-web01 répond, Sorbier Logistique</h1>' > /var/www/html/index.html
EOF

3. Crée la VM, sans aucune règle d'accès (--nsg-rule NONE) : tu ouvriras ensuite exactement ce qu'il faut.

bash
az vm create \
  --resource-group rg-cloud-lab \
  --name vm-web01 \
  --image Canonical:ubuntu-24_04-lts:server:latest \
  --size Standard_B1s \
  --admin-username sioadmin \
  --generate-ssh-keys \
  --public-ip-sku Standard \
  --nsg-rule NONE \
  --custom-data cloud-init.yaml

--generate-ssh-keys utilise ta clé de ~/.ssh ou en crée une : la VM n'accepte alors que l'authentification par clé, sans mot de passe (cours Linux). Au bout d'une à deux minutes, la commande affiche un résumé :

json
{
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "192.0.2.50",
  "resourceGroup": "rg-cloud-lab"
}

Ici, 192.0.2.50 est une adresse d'exemple : Azure t'en attribue une de ses plages publiques, différente à chaque lab. Utilise la tienne. Le NSG a été nommé vm-web01NSG, l'adresse publique vm-web01PublicIP.

4. Ouvre le SSH pour toi seul, et le HTTP pour tout le monde.

bash
az network nsg rule create \
  --resource-group rg-cloud-lab \
  --nsg-name vm-web01NSG \
  --name autoriser-ssh-admin \
  --priority 100 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes "$MON_IP/32" \
  --destination-port-ranges 22

az network nsg rule create \
  --resource-group rg-cloud-lab \
  --nsg-name vm-web01NSG \
  --name autoriser-http \
  --priority 110 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes Internet \
  --destination-port-ranges 80

# Les règles du NSG, avec les règles par défaut
az network nsg rule list --resource-group rg-cloud-lab --nsg-name vm-web01NSG --include-default --output table

5. Teste.

bash
IP_VM=$(az vm show --show-details --resource-group rg-cloud-lab --name vm-web01 --query publicIps --output tsv)
curl "http://$IP_VM"
ssh sioadmin@"$IP_VM"

curl doit afficher <meta charset="utf-8"><h1>vm-web01 répond, Sorbier Logistique</h1>. Si tu obtiens la page par défaut de Nginx, cloud-init n'a pas fini : dans la session SSH, cloud-init status --wait attend la fin et affiche status: done. Essaie aussi le SSH depuis une autre connexion (le partage de connexion de ton téléphone, par exemple) : il doit échouer, faute de règle.

6. Arrête la VM pour de bon, puis supprime tout.

bash
# Désallouer : le calcul n'est plus facturé (le disque et l'IP publique le restent)
az vm deallocate --resource-group rg-cloud-lab --name vm-web01

# Ou programmer un arrêt automatique chaque jour à 18 h UTC
az vm auto-shutdown --resource-group rg-cloud-lab --name vm-web01 --time 1800

# Fin du lab
az group delete --name rg-cloud-lab --yes --no-wait
État de la VMComment on y arriveCalcul facturéDisque et IP publique facturés
En cours d'exécutionaz vm start, démarrageOuiOui
Arrêtée (allouée)sudo shutdown dans la VM, az vm stopOuiOui
Arrêtée (désallouée)az vm deallocate, bouton Arrêter du portail, arrêt automatiqueNonOui
Suppriméeaz vm delete, az group deleteNonNon, si on supprime aussi le disque et l'IP

Sécuriser l'administration d'une VM

  • N'ouvre jamais le SSH ni le RDP à tout Internet. Des robots balaient en permanence toutes les adresses publiques et testent des mots de passe sur les ports 22 et 3389. Limite la source à une adresse connue, comme dans le lab.
  • Pour se passer d'adresse publique d'administration, Azure propose Azure Bastion, un bastion managé qui donne une session SSH ou RDP dans le navigateur, et l'accès juste-à-temps (just-in-time) de Microsoft Defender for Cloud, une option payante qui n'ouvre le port que pour une durée limitée après une demande. Chez Sorbier, on passe plutôt par le VPN du siège : l'administration se fait depuis le VLAN 99 ADMIN, comme pour les serveurs locaux (cours Authentification).
  • Applique les mises à jour. Les images Ubuntu installent automatiquement les correctifs de sécurité avec unattended-upgrades ; Azure Update Manager permet de suivre et planifier les mises à jour de tout un parc de VM, dans Azure ou sur site.
  • Sauvegarde la VM avec Azure Backup (chapitre 13) : en IaaS, c'est à toi de le faire.

Exercices

Exercice 1 sur 3 Lire un NSG Réussi À revoir

Le NSG d'une VM web de Sorbier contient ces règles entrantes, en plus des règles par défaut :

PrioritéNomSourcePortProtocoleAction
100ssh-siege203.0.113.17/3222TCPAutoriser
110webInternet80, 443TCPAutoriser
120bloquer-sshToutes22TCPRefuser
200rdpToutes3389TCPAutoriser

Pour chaque flux, dis s'il passe et quelle règle décide.

  1. Une connexion SSH depuis le pare-feu du siège, 203.0.113.17.
  2. Une connexion SSH depuis le pare-feu de Mâcon, 198.51.100.40.
  3. Un client qui consulte le site en HTTPS.
  4. Un robot qui tente une connexion RDP depuis l'étranger.
  5. Un ping depuis Internet.
  6. La réponse du serveur à la requête HTTPS du client.
  7. La VM qui télécharge ses mises à jour sur les dépôts Ubuntu.
Voir la réponseMasquer la réponse de l'exercice 1
  1. Passe, règle 100.
  2. Bloqué, règle 120 : la règle 100 ne correspond pas (autre source), la 110 non plus (autre port).
  3. Passe, règle 110.
  4. Passe, règle 200 : c'est une faille. Une VM Linux n'a pas besoin du port 3389, et aucun service d'administration ne doit être ouvert à toutes les sources. Supprime cette règle.
  5. Bloqué par la règle par défaut DenyAllInbound (65500) : aucune règle n'autorise l'ICMP.
  6. Passe sans règle : le NSG est à états, la réponse d'un flux autorisé repart automatiquement.
  7. Passe, règle sortante par défaut AllowInternetOutBound (65001).

Tu avais trouvé ?

Exercice 2 sur 3 Trouver l'erreur Réussi À revoir

Une étudiante veut « tout bloquer sauf le SSH depuis son adresse ». Elle crée deux règles entrantes : priorité 300, autoriser le TCP 22 depuis Toutes les sources ; priorité 4000, refuser tout depuis Toutes les sources. Elle pense que la règle 4000 limite la 300. Qu'en est-il, et comment corriger ?

Voir la réponseMasquer la réponse de l'exercice 2

La règle 300 est examinée avant la 4000 (priorité plus forte) et elle correspond à toute tentative de SSH : le port 22 est ouvert au monde entier. Pour le trafic venu d'Internet, la règle 4000 n'ajoute rien : DenyAllInbound le refuse déjà. Elle a même un effet de bord : examinée avant AllowVNetInBound (65000) et AllowAzureLoadBalancerInBound (65001), elle bloque aussi les autres VM du réseau virtuel et les sondes d'un équilibreur de charge. Correction : une seule règle d'autorisation du TCP 22 dont la source est son adresse IP en /32. Le refus du reste est assuré par les règles par défaut.

Tu avais trouvé ?

Exercice 3 sur 3 Combien ça coûte encore ? Réussi À revoir

Pour chaque situation, dis ce qui est encore facturé.

  1. Le soir, l'étudiant tape sudo poweroff dans sa VM.
  2. Il clique sur Arrêter dans le portail.
  3. Il supprime la VM avec az vm delete.
  4. Il supprime le groupe de ressources.
Voir la réponseMasquer la réponse de l'exercice 3
  1. Tout : la VM est arrêtée mais allouée, son calcul est facturé, comme son disque et son adresse IP.
  2. Le disque et l'adresse IP publique : le bouton Arrêter du portail désalloue la VM, le calcul n'est plus facturé.
  3. Ça dépend des options de suppression fixées à la création de la VM. Si elles ne prévoient pas de supprimer les ressources liées, le disque du système et l'adresse IP publique restent, et sont facturés ; la carte réseau, le NSG et le réseau virtuel restent aussi, sans coût, mais encombrent l'abonnement. Vérifie avec az resource list --resource-group rg-cloud-lab --output table.
  4. Rien : toutes les ressources du groupe sont supprimées.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Azure Blob Storage : stockage objet, niveaux d'accès et redondanceRevoir le sommaire du cours