Quand Terraform autorise ce que le portail refuse
Si tu gères ton infrastructure Azure avec Terraform, tu as peut-être découvert un problème frustrant : des rule collections dont le nom contient des espaces — créées via ARM templates ou azapi_resource — sont impossibles à modifier via le portail Azure, qui refuse ces noms à la validation. La solution ? Azure CLI, qui dialogue directement avec l’API REST sans ces restrictions.
Prérequis
Avant de commencer, assure-toi d’avoir :
- Azure CLI installé et à jour (
az --version) - L’extension azure-firewall (installée automatiquement à la première commande
az network firewall) - Les droits suffisants sur la souscription Azure (rôle
Network Contributorou supérieur) - Le nom exact de ta Firewall Policy, du Rule Collection Group et du Resource Group
Comprendre la hiérarchie Azure Firewall Policy
Dans Azure Firewall Policy, la structure est la suivante :
Firewall Policy
└── Rule Collection Group (ex: "NetworkRuleCollectionGroup")
└── Rule Collection (ex: "Allow Internal Traffic") ← nom avec espace
└── Rule (ex: "Allow DNS")
Le portail Azure bloque à l’étape Rule Collection si le nom contient un espace. L’Azure CLI, lui, transmet le nom directement à l’API REST sans validation restrictive côté client.
Étape 1 — Définir les variables bash
Commence par déclarer tes variables pour éviter les répétitions :
RG="mon-resource-group" POLICY="ma-firewall-policy" RCG_NAME="NetworkRuleCollectionGroup" COLLECTION_NAME="Allow Internal Traffic" # ← nom avec espace PRIORITY=1100
Étape 2 — Vérifier que le Rule Collection Group existe
az network firewall policy rule-collection-group show \ --resource-group "$RG" \ --policy-name "$POLICY" \ --name "$RCG_NAME"
Si le groupe n’existe pas encore, crée-le :
az network firewall policy rule-collection-group create \ --resource-group "$RG" \ --policy-name "$POLICY" \ --name "$RCG_NAME" \ --priority 200
Étape 3 — Créer la Network Rule Collection avec espace
C’est ici le cœur du workaround. La commande add-filter-collection crée une rule collection réseau et y injecte une première règle en même temps :
az network firewall policy rule-collection-group collection add-filter-collection \ --resource-group "$RG" \ --policy-name "$POLICY" \ --rule-collection-group-name "$RCG_NAME" \ --name "$COLLECTION_NAME" \ --action Allow \ --collection-priority $PRIORITY \ --rule-name "Allow DNS" \ --rule-type NetworkRule \ --description "Autoriser la résolution DNS" \ --source-addresses "10.0.0.0/8" \ --destination-addresses "8.8.8.8" "8.8.4.4" \ --destination-ports 53 \ --ip-protocols UDP TCP
⚠️ Important :
add-filter-collectionexige qu’au moins une règle soit fournie dès la création de la collection. Il n’est pas possible de créer une collection vide.
Étape 4 — Ajouter des règles supplémentaires
Une fois la collection créée, ajoute d’autres règles avec collection rule add :
az network firewall policy rule-collection-group collection rule add \ --resource-group "$RG" \ --policy-name "$POLICY" \ --rule-collection-group-name "$RCG_NAME" \ --collection-name "$COLLECTION_NAME" \ --name "Allow HTTPS" \ --rule-type NetworkRule \ --source-addresses "10.0.0.0/8" \ --destination-addresses "*" \ --destination-ports 443 \ --ip-protocols TCP
Étape 5 — Vérifier le résultat
Affiche l’état complet du Rule Collection Group :
az network firewall policy rule-collection-group show \ --resource-group "$RG" \ --policy-name "$POLICY" \ --name "$RCG_NAME" \ --output table
Ou liste toutes les collections :
az network firewall policy rule-collection-group collection list \ --resource-group "$RG" \ --policy-name "$POLICY" \ --rule-collection-group-name "$RCG_NAME" \ --output table
Pourquoi ce problème existe-t-il ?
Le provider Terraform azurerm applique une validation côté client plus restrictive que l’API Azure elle-même.
Des configurations créées via ARM templates, azapi_resource, ou une ancienne version du provider peuvent se retrouver dans un état que le portail ne sait plus modifier.
L’Azure CLI, en tant que couche directement au-dessus de l’API REST Azure, ne souffre pas de ces restrictions et reste le meilleur outil de contournement.
Récapitulatif des commandes clés
| Action | Commande |
|---|---|
| Créer un Rule Collection Group | rule-collection-group create |
| Créer une collection réseau | collection add-filter-collection |
| Ajouter une règle | collection rule add |
| Lister les collections | collection list |
| Afficher le groupe complet | rule-collection-group show |
💡 Astuce finale : Si tu veux remettre les pieds dans Terraform après cet ajout manuel, pense à importer la ressource avec terraform import ou à utiliser azapi_resource qui offre bien plus de flexibilité sur les noms que le provider azurerm classique.







