Authentifier Terraform sur Azure
Terraform permet la définition, l’aperçu et le déploiement d’une infrastructure cloud. Terraform vous permet de créer des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier un fournisseur de services cloud, tel qu’Azure, et les éléments qui composent votre infrastructure cloud. Après avoir créé vos fichiers de configuration, vous créez un plan d’exécution qui vous permet d’afficher un aperçu de vos modifications d’infrastructure avant leur déploiement. Une fois que vous avez vérifié les modifications, vous appliquez le plan d’exécution pour déployer l’infrastructure.
Pour utiliser des commandes Terraform sur votre abonnement Azure, vous devez d’abord authentifier Terraform auprès de cet abonnement. Cet article aborde certains scénarios courants d’authentification sur Azure.
Dans cet article, vous apprendrez comment :
- Comprendre les scénarios d’authentification Terraform et Azure courants
- S’authentifier par le biais d’un compte Microsoft à partir de Cloud Shell (avec Bash ou PowerShell)
- S’authentifier par le biais d’un compte Microsoft à partir de Windows (avec Bash ou PowerShell)
- Créer un principal de service avec Azure CLI
- Créer un principal de service avec Azure PowerShell
- Spécifier les informations d’identification du principal de service dans des variables d’environnement
- Spécifier les informations d’identification du principal de service dans un bloc provider Terraform
1. Configurer votre environnement
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Configurez Terraform : Si vous ne l’avez pas déjà fait, configurez Terraform à l’aide de l’une des options suivantes :
2. Authentifier Terraform auprès d’Azure
Scénarios d’authentification Terraform et Azure
Terraform prend uniquement en charge l’authentification sur Azure par le biais d’Azure CLI. L’authentification à l’aide d’Azure PowerShell n’est pas prise en charge. Ainsi, même si vous pouvez utiliser le module Azure PowerShell avec Terraform, vous devez d’abord vous authentifier auprès d’Azure en utilisant Azure CLI.
Cet article explique comment authentifier Terraform auprès d’Azure pour les scénarios suivants. Pour plus d’informations sur les options d’authentification de Terraform auprès d’Azure, consultez Authentification à l’aide d’Azure CLI.
- S’authentifier par le biais d’un compte Microsoft à l’aide de Cloud Shell (avec Bash ou PowerShell)
- S’authentifier par le biais d’un compte Microsoft à l’aide de Windows (avec Bash ou PowerShell)
- Authentifiez-vous via un principal de service :
- Si vous n’avez pas de principal de service, créez-en un.
- Authentifiez-vous auprès d’Azure en utilisant des variables d’environnement ou en utilisant le bloc provider Terraform.
S’authentifier auprès d’Azure par le biais d’un compte Microsoft
Un compte Microsoft est un nom d’utilisateur (associé à une adresse e-mail et ses informations d’identification) utilisé pour se connecter aux services Microsoft, comme Azure. Un compte Microsoft peut être associé à un ou plusieurs abonnements Azure, l’un d’entre eux étant celui par défaut.
Les étapes suivantes vous montrent comment :
- Se connecter à Azure de manière interactive avec un compte Microsoft
- Répertorier les abonnements Azure associés au compte (y compris la valeur par défaut)
- Définissez l'abonnement actif.
Ouvrez une ligne de commande qui a accès à Azure CLI.
Exécutez az login sans aucun paramètre et suivez les instructions pour vous connecter à Azure.
az login
Points essentiels :
- Une fois la connexion établie,
az login
affiche la liste des abonnements Azure associés au compte Microsoft connecté, y compris l’abonnement par défaut.
- Une fois la connexion établie,
Pour confirmer l’abonnement Azure actuel, exécutez az account show.
az account show
Pour voir tous les noms et ID d’abonnement Azure d’un compte Microsoft spécifique, exécutez az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Points essentiels :
- Remplacez l’espace réservé
<microsoft_account_email>
par l’adresse e-mail du compte Microsoft dont vous voulez lister les abonnements Azure. - Avec un compte Live (comme Hotmail ou Outlook), vous aurez peut-être besoin de spécifier l’adresse e-mail complète. Par exemple, si votre adresse e-mail est
admin@hotmail.com
, vous aurez peut-être besoin de remplacer l’espace réservé parlive.com#admin@hotmail.com
.
- Remplacez l’espace réservé
Pour utiliser un abonnement Azure spécifique, exécutez az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Points essentiels :
- Remplacez l’espace réservé
<subscription_id_or_subscription_name>
par l’ID (ou le nom) de l’abonnement que vous voulez utiliser. - L’appel de
az account set
n’affiche pas les résultats du basculement vers l’abonnement Azure spécifié. Toutefois, vous pouvez utiliseraz account show
pour confirmer que l’abonnement Azure actuel a changé. - Si vous exécutez la commande
az account list
de l’étape précédente, vous pouvez voir que l’abonnement Azure par défaut a été remplacé par l’abonnement que vous avez spécifié avecaz account set
.
- Remplacez l’espace réservé
Créer un principal du service
Les outils automatisés qui déploient ou utilisent des services Azure, tels que Terraform, doivent toujours avoir des autorisations restreintes. Au lieu que les applications se connectent en tant qu’utilisateur entièrement privilégié, Azure propose des principaux de service.
La procédure la plus courante consiste à se connecter de manière interactive à Azure, à créer un principal de service, à tester ce principal de service, puis à l’utiliser à des fins d’authentification ultérieure (soit de manière interactive, soit à partir de vos scripts).
Pour créer un principal de service, connectez-vous à Azure. Après vous être authentifié auprès d’Azure par le biais d’un compte Microsoft, revenez ici.
Si vous créez un principal de service à partir de Git Bash, définissez la variable d’environnement
MSYS_NO_PATHCONV
. (Cette étape n’est pas nécessaire si vous utilisez Cloud Shell.)export MSYS_NO_PATHCONV=1
Points essentiels :
- Vous pouvez définir la variable d’environnement
MSYS_NO_PATHCONV
globalement (pour toutes les sessions de terminal) ou localement (uniquement pour la session active). Puisque la création d’un principal de service n’est pas une opération fréquente, l’exemple définit la valeur pour la session active. Pour définir cette variable d’environnement globalement, ajoutez le paramètre au fichier~/.bashrc
.
- Vous pouvez définir la variable d’environnement
Pour créer un principal de service, exécutez az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Points essentiels :
- Vous pouvez remplacer
<service-principal-name>
par un nom personnalisé pour votre environnement ou omettre complètement le paramètre. Si vous omettez le paramètre, le nom du principal de service est généré en fonction de la date et de l’heure actuelles. - À la fin de l’opération,
az ad sp create-for-rbac
affiche plusieurs valeurs. Les valeursappId
,password
ettenant
sont utilisées à l’étape suivante. - Le mot de passe ne peut pas être récupéré en cas de perte. Par conséquent, vous devez conserver votre mot de passe en lieu sûr. Si vous oubliez votre mot de passe, vous pouvez réinitialiser les informations d’identification du principal de service.
- Pour cet article, un principal de service doté d’un rôle Contributeur est utilisé. Pour plus d’informations sur les rôles de contrôle d’accès en fonction du rôle, consultez RBAC : rôles intégrés.
- La sortie de la création du principal de service comprend des informations d’identification sensibles. Veillez à ne pas inclure ces informations d’identification dans votre code ou vérifiez les informations d’identification dans votre contrôle de code source.
- Pour plus d’informations sur les options lors de la création d’un principal de service avec Azure CLI, consultez l’article Créer un principal de service Azure avec Azure CLI.
- Vous pouvez remplacer
Spécifier les informations d’identification du principal de service dans des variables d’environnement
Une fois que vous avez créé un principal de service, vous pouvez spécifier ses informations d’identification pour Terraform par le biais de variables d’environnement.
Modifiez le fichier
~/.bashrc
en ajoutant les variables d’environnement suivantes.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Pour exécuter le script
~/.bashrc
, exécutezsource ~/.bashrc
(ou son équivalent abrégé. ~/.bashrc
). Vous pouvez aussi quitter et rouvrir Cloud Shell pour que le script s’exécute automatiquement.. ~/.bashrc
Une fois les variables d’environnement définies, vous pouvez vérifier leurs valeurs comme suit :
printenv | grep ^ARM*
Points essentiels :
- Comme pour toute variable d’environnement, pour accéder à une valeur d’abonnement Azure à partir d’un script Terraform, utilisez la syntaxe suivante :
${env.<environment_variable>}
. Par exemple, pour accéder à la valeurARM_SUBSCRIPTION_ID
, spécifiez${env.ARM_SUBSCRIPTION_ID}
. - La création et l’application de plans d’exécution Terraform apportent des modifications à l’abonnement Azure associé au principal de service. Cela peut parfois prêter à confusion si vous êtes connecté à un abonnement Azure et que les variables d’environnement pointent vers un autre abonnement Azure. Examinons l’exemple suivant pour mieux comprendre. Supposons que vous avez deux abonnements Azure : AboA et AboB. Si l’abonnement Azure actif est AboA (déterminé par le biais de la commande
az account show
) alors que les variables d’environnement pointent vers AboB, toutes les modifications apportées par Terraform le sont sur AboB. Vous avez donc besoin de vous connecter à votre abonnement AboB pour exécuter des commandes Azure CLI ou Azure PowerShell afin de voir vos modifications.
Spécifier les informations d’identification du principal de service dans un bloc provider Terraform
Le bloc provider Azure définit la syntaxe qui vous permet de spécifier les informations d’authentification de votre abonnement Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Attention
La possibilité de spécifier les informations d’identification de votre abonnement Azure dans un fichier de configuration Terraform peut s’avérer pratique, notamment dans le cadre de tests. Toutefois, il n’est pas recommandé de stocker des informations d’identification dans un fichier en texte clair, celui-ci pouvant être lu par des personnes non approuvées.
3. Vérifier les résultats
Vérifiez que vous vous êtes authentifié auprès de l’abonnement Azure en affichant l’abonnement actif.
Pour vérifier l’abonnement Azure actif par le biais d’Azure CLI, exécutez az account show.
az account show
Étapes suivantes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour