Aller au contenu
Infrastructure as Code medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Variables, secrets et variable sets dans HCP Terraform

11 min de lecture

logo terraform

Quand vous travaillez en équipe, gérer des variables dans des fichiers .tfvars locaux devient vite ingérable : chaque poste a sa propre version, les secrets traînent sur les disques, et rien n’est partageable. HCP Terraform centralise les variables et les secrets dans la plateforme, avec masquage, partage et permissions, et permet de distribuer des valeurs communes entre workspaces via les variable sets.

  • Les deux types de variables dans HCP Terraform : Terraform et environnement
  • Comment créer et gérer des variables dans un workspace
  • Comment marquer une variable comme sensible (masquée)
  • Comment créer un variable set et le partager entre workspaces
  • L’ordre de précédence des variables (qui gagne quand il y a conflit)

HCP Terraform distingue deux catégories de variables :

TypeCe qu’il configureÉquivalent local
Terraform variableLes valeurs de vos variable {} HCLterraform.tfvars ou -var
Environment variableL’environnement d’exécution (credentials, proxy, debug)export TF_VAR_... ou export AWS_...

Ces variables alimentent les blocs variable {} de votre configuration. Par exemple, si votre code déclare :

variable "instance_type" {
type = string
default = "t3.micro"
}

Vous pouvez définir la valeur t3.small dans le workspace HCP Terraform sans toucher au code. La variable du workspace écrase la valeur default.

Ces variables configurent l’environnement dans lequel Terraform s’exécute. Les plus courantes :

VariableUsage
AWS_ACCESS_KEY_IDCredentials AWS
AWS_SECRET_ACCESS_KEYCredentials AWS (sensible)
AWS_DEFAULT_REGIONRégion AWS par défaut
TF_LOGNiveau de log Terraform (DEBUG, TRACE…)
GOOGLE_CREDENTIALSCredentials GCP (sensible)
  1. Ouvrez les réglages du workspace

    Dans l’interface web : WorkspaceVariables.

  2. Ajoutez une variable Terraform

    Cliquez + Add variable → choisissez Terraform variable :

    ChampExemple
    Keyinstance_type
    Valuet3.small
    CategoryTerraform variable
    SensitiveNon
    HCLNon (sauf si la valeur est une liste ou une map)
  3. Ajoutez une variable sensible

    Pour un secret (clé API, mot de passe), cochez Sensitive. Une fois enregistrée, la variable devient write-only : sa valeur n’est plus affichée dans l’interface ni lisible via l’API.

    ChampExemple
    Keydb_password
    Values3cure-P@ssw0rd!
    Sensitive✅ Oui

    Cela réduit fortement l’exposition, mais ne garantit pas à lui seul qu’une valeur ne finira jamais dans les logs ou le state si la configuration l’utilise dans un output non masqué ou dans un argument de ressource visible.

  4. Vérifiez lors du prochain run

    Lancez un terraform plan — les variables du workspace sont injectées automatiquement dans l’exécution distante.

Un variable set est un ensemble de variables que vous pouvez attacher à un ou plusieurs workspaces — ou même à toute votre organisation.

Variable setContenuScope
aws-credentials-devAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYTous les workspaces dev
common-tagsproject_name, environment, teamOrganisation entière
network-configvpc_id, subnet_idsWorkspaces d’un même project
  1. Naviguez dans les réglages de l’organisation

    OrganizationSettingsVariable setsCreate variable set.

  2. Configurez le scope

    Le scope disponible dépend du propriétaire du variable set :

    PropriétaireOptions de scope
    OrganizationTous les workspaces, des projects spécifiques, ou des workspaces spécifiques
    ProjectLe project entier, ou des workspaces spécifiques dans ce project
  3. Ajoutez les variables

    Les variables d’un set se configurent exactement comme celles d’un workspace (Terraform ou environnement, sensible ou non, HCL ou non).

  4. Enregistrez

    Les variables du set sont immédiatement disponibles dans les workspaces ciblés — aucun redémarrage de run nécessaire.

Depuis la page du variable set, vous pouvez ajouter ou retirer des workspaces et des projects à tout moment. Les changements prennent effet au prochain run.

Quand la même variable est définie à plusieurs endroits, HCP Terraform applique un ordre de priorité strict. Voici l’ordre complet, du plus prioritaire au moins prioritaire :

PrioritéSource
1 (haute)Variable set priority owned by organization
2Variable set priority owned by project
3Arguments CLI : -var et -var-file
4Variables locales TF_VAR_* (transmises en CLI-driven)
5Variable du workspace
6Variable set normal owned by project
7Variable set normal owned by organization
8Fichiers *.auto.tfvars et terraform.tfvars
9 (basse)default dans le bloc variable {} HCL

Imaginons une variable environment définie à trois endroits :

SourceValeurPriorité
Variable set org (normal)"default"7
Variable set project associate-004 (normal)"staging"6
Variable du workspace associate-004-01-init"production"5

Résultat : la valeur utilisée est "production" (priorité 5 > 6 > 7).

Bonne pratiquePourquoi
Un variable set par préoccupationSéparer credentials, tags, config réseau
Scope le plus petit possibleNe pas appliquer des credentials dev à la prod
Marquer sensible toute credentialMasquage irréversible dans l’interface et les logs
Utiliser les sets priority avec parcimonieRéservés aux contraintes d’organisation (tags obligatoires, région imposée)
Documenter les variable setsAjouter une description claire lors de la création
À faireÀ éviter
Marquer Sensitive les credentialsLaisser des clés en clair dans l’interface
Utiliser les dynamic credentialsStocker des clés cloud longue durée
Rotater les secrets régulièrementUn seul jeu de credentials pour tous les environnements
Séparer les credentials par environnementUn variable set aws-creds unique pour dev + prod
SymptômeCause probableSolution
Error: No value for required variableVariable non définie dans le workspace ni dans un variable setAjoutez la variable dans le workspace ou un set
La variable du workspace est ignoréeUn variable set priority écrase la valeurVérifiez les sets marqués priority
Le .tfvars local ne fonctionne pasFichier non nommé terraform.tfvars ou *.auto.tfvarsRenommez le fichier ou utilisez -var-file
Error: Variables may not be used hereConfusion entre variable Terraform et variable d’environnementVérifiez la catégorie (Terraform vs Environment)
La valeur complexe est mal interprétéeLa case HCL n’est pas cochéeCochez HCL pour les listes, maps et objects
Un secret apparaît dans les logsVariable non marquée SensitiveRecréez la variable avec Sensitive coché (irréversible)
  • HCP Terraform gère deux types de variables : Terraform (vos variable {}) et environnement (credentials, config d’exécution).
  • Les variables marquées Sensitive deviennent write-only (non lisibles dans l’UI ni via l’API), mais une valeur peut encore apparaître dans les logs ou le state si la configuration l’expose.
  • Les variable sets permettent de partager des variables entre workspaces sans duplication — scopez-les par workspace, project ou organisation.
  • L’ordre de précédence : priority sets > CLI (-var) > workspace > sets normaux > .auto.tfvars / terraform.tfvars > default HCL.
  • En remote, terraform.tfvars et *.auto.tfvars sont chargés, mais les autres fichiers .tfvars nécessitent -var-file.
  • Préférez les dynamic credentials aux clés cloud statiques.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn