Préparer l’accès sécurisé à Azure : création d’un Service Principal
Avant de pouvoir déployer des ressources dans Azure avec Terraform, il est nécessaire de fournir à celui-ci un accès sécurisé à notre environnement cible. Pour ce faire, nous allons créer ce qu’on appelle un Service Principal (SP), une identité utilisée pour représenter une application ou un outil (ici, Terraform) dans Azure.
Sommaire
I. Azure : qu’est-ce qu’un Service Principal ?
Un Service Principal est une entité enregistrée dans Microsoft Entra ID (anciennement Azure Active Directory) qui permet à une application de s’authentifier auprès d’Azure et d’effectuer des actions au nom d’un utilisateur ou d’un système. Il est conçu pour les scénarios automatisés, comme les déploiements dans un pipeline CI/CD ou les outils d’Infrastructure as Code.
Concrètement, un SP fonctionne un peu comme un compte de service, mais avec des autorisations limitées et adaptées au contexte d’utilisation. Pour que Terraform puisse utiliser ce Service Principal, il faut lui associer un secret (mot de passe) ainsi que des droits sur l’abonnement Azure.
II. Créer le SP via le portail Azure
Voici comment créer votre Service Principal et le secret d’authentification en mode graphique :
1) Connectez-vous au portail Azure.
2) Dans la barre de recherche, saisissez Inscriptions d’application (App registrations) et cliquez sur + Nouvelle inscription.

3) Donnez un nom à votre application (par exemple : terraform-sp), laissez les autres options par défaut et cliquez sur S’inscrire.

4) Une fois l’inscription terminée, notez les informations suivantes depuis l’écran d’accueil de l’application :
- ID de l’application (client)
- ID de l’annuaire (locataire)

5) Dans le menu de gauche (sous Gérer), allez dans Certificats & secrets et cliquez sur + Nouveau secret client.

6) Entrez une description, puis cliquez sur Ajouter.

7) Copiez immédiatement la valeur du secret généré (c’est la seule fois où elle sera visible).

Ces trois éléments (client_id, client_secret et tenant_id) seront utilisés dans le fichier terraform.tfvars pour que Terraform puisse s’authentifier automatiquement à Azure.
Un tenant Azure (ou « locataire ») correspond à une instance dédiée de Microsoft Entra ID (anciennement Azure Active Directory) qui représente une organisation. C’est dans ce tenant que sont gérés les comptes utilisateurs, les rôles, les groupes, les applications et les autorisations liées aux services Azure.
III. Attribuer des droits sur l’abonnement
Une fois votre Service Principal créé, il faut lui accorder des autorisations sur votre abonnement Azure pour qu’il puisse créer, modifier ou supprimer des ressources. Cette opération s’effectue à l’aide du système IAM (Identity and Access Management) d’Azure qui permet d’attribuer des rôles précis à des entités telles que des utilisateurs, des groupes ou des applications (comme un Service Principal).
Plus précisément, vous allez associer un rôle (par exemple, Contributeur) à votre Service Principal au niveau de l’abonnement (subscription) ou d’un groupe de ressources (resource group). Ce rôle détermine ce qu’il a le droit de faire (lecture, écriture, suppression, etc.). Sans cette étape, même si le Service Principal est bien créé, Terraform ne pourra pas déployer les ressources, car il n’aura pas les autorisations nécessaires.
1) Dans le portail Azure, ouvrez la section Abonnements et cliquez sur celui que vous souhaitez utiliser.

2) Allez dans l’onglet Contrôle d’accès (IAM), puis cliquez sur + Ajouter et Ajouter attribution de rôle.

3) Sous Rôles d'administration privilégié, choisissez le rôle Contributeur qui donne les droits nécessaires pour gérer des ressources sans pour autant autoriser la gestion des accès (IAM). Appuyez sur Suivant.

4) Dans l’étape suivante, cliquez sur + Sélectionner des membres, recherchez votre Service Principal par son nom, puis appuyez sur Sélectionner.

5) Terminez l'opération en cliquant sur Vérifier + attribuer.

Le rôle « Contributeur » est généralement suffisant pour les déploiements Terraform. Vous verrez votre SP avec son nouveau rôle sous l'onglet Role assignments sur la page Contrôle d'accès (IAM) :

Si vous souhaitez restreindre davantage les actions de votre Service Principal, Azure permet de créer des rôles personnalisés avec des permissions plus ciblées. Vous trouverez l'option dans le menu déroulant de + Ajouter de la page Contrôle d'accès (IAM).
IV. À quoi servent ces identifiants ?
Voici à quoi servent les identifiants créés et récupérés dans la section précédente suivi de leur équivalent dans Terraform :
- Application (client) ID : identifiant unique de votre SP = ARM_CLIENT_ID dans Terraform.
- Tenant ID : identifiant de l’annuaire Entra ID dans lequel est enregistré le SP = ARM_TENANT_ID dans Terraform.
- Client Secret : mot de passe que Terraform utilisera pour s’authentifier = ARM_CLIENT_SECRET dans Terraform.
- Subscription ID : identifiant de l’abonnement sur lequel Terraform déploiera les ressources = ARM_SUBSCRIPTION_ID dans Terraform.
Un abonnement (subscription) Azure est une unité de facturation qui regroupe un ensemble de ressources cloud. C’est dans un abonnement que vous déployez et gérez des services (machines virtuelles, bases de données, réseaux, etc.), avec une facturation associée à l’usage réel.
L’ensemble de ces identifiants sera utilisé dans le fichier terraform.tfvars pour alimenter les variables suivantes :
ARM_CLIENT_ID = "..."
ARM_CLIENT_SECRET = "..."
ARM_TENANT_ID = "..."
ARM_SUBSCRIPTION_ID = "..."
Pour éviter de versionner ces valeurs dans Git et exposer des données sensibles liées à votre compte Azure, vous pouvez les exporter sous forme de variables d’environnement en local dans votre terminal. Terraform reconnaît automatiquement toute variable précédée de TF_VAR_ comme correspondant à une variable déclarée dans variables.tf. Il n’est donc pas nécessaire de les inclure dans un fichier terraform.tfvars. Sous Linux ou macOS (ou via Git Bash sous Windows), utilisez la commande export, comme dans l’exemple ci-dessous :
export TF_VAR_ARM_CLIENT_ID="xxxx-xxxx-xxxx"
export TF_VAR_ARM_CLIENT_SECRET="xxxx-xxxx-xxxx"
export TF_VAR_ARM_SUBSCRIPTION_ID="xxxx-xxxx-xxxx"
export TF_VAR_ARM_TENANT_ID="xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_CLIENT_ID = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_CLIENT_SECRET = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_SUBSCRIPTION_ID = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_TENANT_ID = "xxxx-xxxx-xxxx"
Sous PowerShell, la syntaxe équivalente est la suivante :
$env:TF_VAR_ARM_CLIENT_ID = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_CLIENT_SECRET = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_SUBSCRIPTION_ID = "xxxx-xxxx-xxxx"
$env:TF_VAR_ARM_TENANT_ID = "xxxx-xxxx-xxxx"
Ces variables seront alors lues automatiquement lors de l'exécution de vos commandes Terraform.
V. Créer le SP en ligne de commande
Si vous préférez automatiser l'étape de création du SP ou simplement travailler en ligne de commande, vous pouvez également créer votre Service Principal avec Azure CLI.
Azure CLI (Command-Line Interface) est un outil multiplateforme proposé par Microsoft qui permet de gérer vos ressources Azure directement depuis un terminal. Il est disponible sous Windows, macOS et Linux et il permet d’exécuter des commandes pour créer des machines virtuelles, gérer les abonnements, déployer des ressources, interagir avec Entra ID, etc.
Nous vous invitons à consulter la page suivante pour avoir les instructions d'installation d'Azure CLI selon votre système d'exploitation :
Pour créer un Service Principal avec les droits nécessaires pour Terraform, vous pouvez utiliser cette commande :
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<SUBSCRIPTION_ID>"
Remplacez <SUBSCRIPTION_ID> par l’identifiant de votre abonnement Azure (celui que vous avez noté plus tôt dans le portail).
La commande retournera un bloc de données au format JSON contenant :
- appId : à utiliser comme ARM_CLIENT_ID dans Terraform.
- tenant : à utiliser comme ARM_TENANT_ID dans Terraform.
- password : à utiliser comme ARM_CLIENT_SECRET dans Terraform.
- le Subscription ID que vous avez déjà qui sera à utiliser comme ARM_SUBSCRIPTION_ID dans Terraform.
Voici un exemple de sortie typique :
{
"appId": "c5d9b2e5-1234-4abc-8bdf-abcdef123456",
"displayName": "terraform-sp",
"password": "v3rYS3cRet123456~",
"tenant": "e2e54321-5678-4def-9abc-9876543210ab"
}
Ces valeurs peuvent ensuite être exportées sous forme de variables d'environnement (voir section précédente) pour que Terraform puisse s’authentifier automatiquement.
Même si cette méthode est rapide et efficace, elle est surtout utile lorsque vous souhaitez automatiser entièrement la configuration ou intégrer Terraform dans un pipeline de déploiement. Pour un apprentissage en mode graphique, nous vous recommandons d’effectuer la création manuellement via le portail Azure pour bien comprendre chaque étape.
