Appliquer automatiquement des tags à vos ressources Azure

Publié par Yohann NIKAS
Catégorie : Azure / Azure Functions
20/03/2026

Lorsque l’on déploie des ressources Azure, le tagging passe souvent au second plan. Les tags sont oubliés, partiels ou appliqués différemment selon les équipes, ce qui complique rapidement le suivi des coûts, la lisibilité et la gouvernance de la plateforme.

L’objectif de ce tutoriel est de montrer comment mettre en place un mécanisme simple pour appliquer automatiquement des tags standardisés dès la création des ressources, sans ajouter de contraintes aux déploiements existants.

Nous allons, pour cela, utiliser une Azure Function car cela permet de gérer l’évolutivité et la complexité des scénarios souvent présents au sein d’une plateforme d’intégration. Mais s’il ne s’agit que d’un besoin simple, le meilleur moyen pour l’adresser reste les Azure Policies qui permettent d’agir sur les ressources au moment de leur création (voir ce tutoriel).

 

Les tags indispensables à standardiser

 

Sans règles claires, les tags finissent vite par perdre leur utilité : noms différents pour un même concept, valeurs incohérentes ou informations manquantes selon les déploiements. Définir un socle commun permet d’avoir des ressources lisibles et exploitables, quel que soit l’outil ou l’équipe à l’origine du déploiement.

Ce tableau illustre un exemple de tags simples et largement suffisants pour démarrer :

 

Nom du tag Signification Exemple de valeur
application Application ou service porté par la ressource catalog-api
environment Environnement d’exécution dev
owner Équipe ou responsable de la ressource azure-team

 

Ces tags servent de base commune. Ils peuvent ensuite être enrichis ou adaptés en fonction des contraintes de gouvernance ou des usages internes. Cela ne remet pas en cause le mécanisme présenté dans ce tutoriel.

 

Architecture retenue pour le tagging automatique

 

Le principe est volontairement simple : on calcule et applique automatiquement les tags au moment du déploiement, sans dépendre des pratiques des équipes ou des outils utilisés. Une fois en place, le mécanisme fonctionne de manière transparente et ne nécessite aucune action manuelle.

À chaque création de ressource Azure, un événement est émis. Cet événement déclenche un traitement centralisé qui génère les tags attendus et les applique immédiatement à la ressource concernée. Le déploiement peut ainsi rester focalisé sur l’infrastructure, tandis que le tagging est géré de façon systématique et homogène.

Un schéma unique permet d’illustrer cette chaîne de traitement :

 

Workflow for tag creation

 

Implémentation du tagging au déploiement

 

Étape 1 – Comprendre le principe général

 

Le mécanisme repose sur trois éléments :

  1. Azure émet un événement lorsqu’une ressource est créée
  2. Event Grid intercepte cet événement
  3. Une Azure Function applique automatiquement les tags à la ressource concernée

 

Aucune logique n’est embarquée dans les templates de déploiement.
Le tagging est centralisé et automatique.

 

Architecture diagramme for tag creation

 

Étape 2 – Créer une Azure Function déclenchée par Event Grid

 

La fonction est déclenchée à chaque événement de création de ressource.

Son rôle est de :

  • recevoir l’événement Event Grid
  • extraire l’URI de la ressource Azure
  • appeler l’API Azure Resource Manager
  • appliquer un jeu de tags standardisés

 

Étape 3 – Code minimal de la Function de tagging

 

Déclaration de la Function

Ce code définit une fonction déclenchée par Event Grid :

 

[Function("AutoTag")]
public async Task Run([EventGridTrigger] string eventGridEvent)
{
    AzureResourceEvent resourceEvent =
        JsonConvert.DeserializeObject<AzureResourceEvent>(eventGridEvent);

    string resourceUri = resourceEvent.Data.ResourceUri;
    _logger.LogInformation("Tagging resource {ResourceUri}", resourceUri);

    string accessToken = await GetAccessTokenAsync();
    await ApplyTagsAsync(resourceUri, accessToken);
}

 

Cette méthode ne fait qu’une chose : orchestrer le tagging.

 

Récupération du token Azure

La Function utilise l’identité managée pour appeler l’API Azure :

 

private async Task<string> GetAccessTokenAsync()
{
    TokenRequestContext context =
        new TokenRequestContext(
            new[] { "https://management.azure.com/.default" });

    AccessToken token = await _credential.GetTokenAsync(context);
    return token.Token;
}

 

Ici, on n’utilise aucun secret, ni aucune clé : l’identité managée doit simplement avoir le rôle Contributor (ou équivalent) sur le périmètre ciblé.

 

Application des tags sur la ressource

C’est ici que les tags sont définis et appliqués :

 

private async Task ApplyTagsAsync(string resourceUri, string accessToken)
{
    Dictionary<string, string> tags = new Dictionary<string, string>
    {
        { "application", "demo-app" },
        { "environment", "dev" },
        { "owner", "cloud-team" }
    };

    var payload = new
    {
        tags = tags
    };

    string url = $"https://management.azure.com{resourceUri}?api-version=2022-09-01";
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, url);
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    request.Content = new StringContent(
        JsonConvert.SerializeObject(payload),
        Encoding.UTF8,
         "application/json"
    );

    HttpResponseMessage response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
}

 

À ce stade, le code assure que :

  • les tags sont centralisés
  • leur format est homogène
  • toute ressource supportant les tags est automatiquement conforme

 

Modèles de données Event Grid

Ces classes servent uniquement à lire l’événement :

 

public class AzureResourceEvent
{
    public AzureResourceEventData Data { get; set; }
}

public class AzureResourceEventData
{
    public string ResourceUri { get; set; }
}

 

Créer le System Topic Event Grid

 
Le System Topic permet de recevoir les événements liés aux ressources Azure :

 

{
  "type": "Microsoft.EventGrid/systemTopics",
  "apiVersion": "2022-06-15",
  "name": "resource-events",
  "location": "global",
  "properties": {
    "source": "/subscriptions/<subscription-id>",
    "topicType": "Microsoft.Resources.Subscriptions"
  }
}

 

Résultat : Ce topic écoute toutes les créations de ressources dans la souscription.

 

Souscrire la Function aux événements de création

 
Cette souscription relie Event Grid à la fonction :

 

{
  "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
  "apiVersion": "2022-06-15",
  "name": "resource-events/autotag-subscription",
  "properties": {
    "destination": {
      "endpointType": "AzureFunction",
      "properties": {
        "resourceId": "<function-app-resource-id>",
        "functionName": "AutoTag"
      }
    },
    "filter": {
      "includedEventTypes": [
        "Microsoft.Resources.ResourceWriteSuccess"
      ]
    }
  }
}

 

Résultat : à chaque création ou mise à jour réussie d’une ressource, la fonction est systématiquement appelée.

 

Vérifier le bon fonctionnement

 
Créer une ressource Azure simple (par exemple un compte de stockage).

Puis vérifier les tags directement sur le portail, ou dans votre pipeline de déploiement via un simple script : az resource show --ids <resource-id> --query tags

Les tags définis dans la Function doivent apparaître automatiquement.

 

Ce que ce mécanisme apporte immédiatement

  • Plus aucun oubli de tags
  • Une gouvernance cohérente sans effort
  • Une logique centralisée et maintenable
  • Un code simple, lisible et extensible

 

Faire évoluer le tagging automatique

 

Le mécanisme présenté dans ce tutoriel constitue une base volontairement simple, mais il peut être enrichi sans remettre en cause l’architecture.

Plusieurs évolutions sont possibles selon les besoins des équipes :

  • Générer des tags dynamiques à partir du contexte, par exemple en dérivant la valeur de l’environnement depuis la souscription, le resource group ou des variables d’environnement de la fonction.
  • Remplacer ou compléter des tags existants, en conservant ceux déjà présents sur la ressource et en ne forçant que les tags manquants ou non conformes.
  • Centraliser la définition des tags dans une source externe, comme Azure App Configuration, afin de modifier les règles de tagging sans redéployer la fonction.
  • Mettre en place une liste blanche de tags autorisés, pour garantir que seuls des noms et formats validés puissent être appliqués.
  • Ajouter des règles conditionnelles, par exemple appliquer certains tags uniquement sur des types de ressources spécifiques ou sur des environnements donnés.

Ces évolutions permettent d’adapter progressivement le tagging automatique au niveau de maturité de la gouvernance Azure, tout en conservant un point d’entrée unique et maîtrisé.