Exercice 04 : Stocker des fichiers avec Azure Blob Storage
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un compte de stockage et un conteneur Blob via la CLI Azure
- ✅ Uploader des fichiers et les lister
- ✅ Configurer les niveaux d'accès d'un conteneur
- ✅ Générer une URL SAS (Shared Access Signature) pour partager un fichier
Durée estimée : 30 minutes
Difficulté : ⭐☆☆☆☆ (Débutant)
Prérequis : Compte Azure gratuit, Azure CLI installée
📖 Contexte
Azure Blob Storage est le service de stockage d'objets de Microsoft Azure. "Blob" signifie "Binary Large Object". Il est utilisé pour stocker des images, vidéos, logs, sauvegardes, fichiers statiques de sites web... L'équivalent de S3 chez AWS. La durabilité est de 99.999999999999999% (16 neuf) avec le stockage géo-redondant.
📋 Énoncé
Créez un compte de stockage Azure, gérez des fichiers et partagez-les via des URLs temporaires.
🧭 Déroulement de l'exercice
Tâche 1 : Créer le compte de stockage
# Se connecter à Azure
az login
# Créer un groupe de ressources dédié
az group create \
--name rg-stockage-exercice \
--location francecentral
# Créer le compte de stockage (nom unique globalement : 3-24 chars, minuscules/chiffres)
STORAGE_ACCOUNT="devopsstorage$(date +%Y%m%d%H%M | tail -c 7)"
echo "Nom du compte : $STORAGE_ACCOUNT"
az storage account create \
--name $STORAGE_ACCOUNT \
--resource-group rg-stockage-exercice \
--location francecentral \
--sku Standard_LRS \ # Localement Redondant (le moins cher)
--kind StorageV2 \
--access-tier Hot # Accès fréquent
# Voir le compte créé
az storage account show \
--name $STORAGE_ACCOUNT \
--resource-group rg-stockage-exercice \
--query "{nom:name,etat:statusOfPrimary,sku:sku.name}" \
--output tableTâche 2 : Créer des conteneurs et uploader des fichiers
# Récupérer la clé de connexion
ACCOUNT_KEY=$(az storage account keys list \
--account-name $STORAGE_ACCOUNT \
--resource-group rg-stockage-exercice \
--query '[0].value' \
--output tsv)
# Créer deux conteneurs (comme des "dossiers racine")
az storage container create \
--name documents \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY \
--public-access off # Privé par défaut
az storage container create \
--name images-publiques \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY \
--public-access blob # Accès public au niveau Blob
# Créer des fichiers de test
echo "Document confidentiel - ne pas partager" > document-prive.txt
echo "<h1>Image publique de test</h1>" > image-test.html
# Uploader les fichiers
az storage blob upload \
--container-name documents \
--file document-prive.txt \
--name docs/document-prive.txt \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY
az storage blob upload \
--container-name images-publiques \
--file image-test.html \
--name test/image.html \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY
# Lister les blobs
az storage blob list \
--container-name documents \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY \
--output tableTâche 3 : Tester les niveaux d'accès
# URL directe du blob public (conteneur images-publiques)
PUBLIC_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/images-publiques/test/image.html"
echo "URL publique : $PUBLIC_URL"
curl $PUBLIC_URL
# URL directe du blob privé → 403 Forbidden
PRIVATE_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/documents/docs/document-prive.txt"
curl $PRIVATE_URL
# → AuthorizationFailureTâche 4 : Générer une URL SAS
Une SAS (Shared Access Signature) est une URL temporaire qui donne accès à un fichier privé pendant une durée définie.
# Générer une SAS valable 2 heures
END_TIME=$(date -u -d "+2 hours" +"%Y-%m-%dT%H:%MZ")
SAS_URL=$(az storage blob generate-sas \
--container-name documents \
--name "docs/document-prive.txt" \
--account-name $STORAGE_ACCOUNT \
--account-key $ACCOUNT_KEY \
--permissions r \ # r=read, w=write, d=delete
--expiry $END_TIME \
--https-only \
--full-uri \
--output tsv)
echo "URL SAS (valable 2h) : $SAS_URL"
# Tester l'accès via la SAS
curl "$SAS_URL"
# → Contenu du document privé
# Après 2h, l'URL sera invalide (403 Signature not valid)Indice : Les URLs SAS sont parfaites pour partager des fichiers temporairement avec des utilisateurs sans compte Azure (ex: envoyer un rapport à un client). La SAS peut être révoquée en changeant la clé de compte, ou en créant une SAS basée sur une "Stored Access Policy" (révocable individuellement).
Tâche 5 : Nettoyer les ressources
# Supprimer le groupe de ressources (supprime tout ce qu'il contient)
az group delete --name rg-stockage-exercice --yes --no-wait✅ Vérification du résultat
- Le compte de stockage et les 2 conteneurs sont créés
curl $PUBLIC_URLretourne le contenu HTML du blob publiccurl $PRIVATE_URLretourne une erreur 403- La SAS URL permet d'accéder au blob privé temporairement
💡 À retenir
Niveaux d'accès d'un conteneur :
| Niveau | Accès sans authentification |
|---|---|
| Privé | ❌ Aucun |
| Blob | ✅ Lecture des blobs (pas la liste) |
| Conteneur | ✅ Lecture + liste des blobs |
Redondance du stockage Azure :
| SKU | Copies | Protection contre |
|---|---|---|
| LRS | 3 (1 datacenter) | Défaillance d'un rack |
| ZRS | 3 zones de dispo | Défaillance d'un datacenter |
| GRS | 6 (2 régions) | Catastrophe régionale |
✨ Solution Complète
# Upload rapide
az storage blob upload \
--container-name mon-conteneur \
--file ./mon-fichier.txt \
--name chemin/dans/blob.txt \
--account-name MON_COMPTE \
--auth-mode login # Utilise l'identité connectée (az login)
# Télécharger
az storage blob download \
--container-name mon-conteneur \
--name chemin/dans/blob.txt \
--file ./telechargement.txt \
--account-name MON_COMPTE