Aller au contenu

GUIDE TECHNIQUE · TERRAFORM

Terraform State : sécuriser S3 et le verrouillage

Mettre sous contrôle le Terraform State d’une équipe : comprendre le backend S3, activer la conservation des versions, le chiffrement, les permissions IAM et le verrouillage natif use_lockfile avant toute migration de state.

Niveau Avancé6 min de lecture— vuesTerraform

L’ESSENTIEL EN BREF

Les étapes clés

Ce guide présente 6 étapes, de « Inventorier les states et les exécutions concurrentes » à « Documenter la restauration et la réponse aux incidents ».

Avant de commencer : Compte AWS de recette autorisé et bucket de state préalablement créé par une procédure d’administration.

01 · CADRAGE

Périmètre et résultat visé

Résultat attendu : Bucket S3 privé, chiffré, versionné et contrôlé par IAM.

Public concerné : Ingénieurs cloud AWS, équipes plateformes, DevOps confirmés, responsables RUN et sécurité infrastructure

Environnement et versions

Terraform récent avec backend S3 prenant en charge use_lockfile. S3 et IAM AWS ; les exemples utilisent la région eu-west-3 uniquement si le bucket y est effectivement situé.

Contrôlez les versions, les droits et les options disponibles dans votre environnement avant de suivre la procédure.

02 · AVANT DE COMMENCER

Prérequis et points de contrôle

  • Compte AWS de recette autorisé et bucket de state préalablement créé par une procédure d’administration.
  • Versioning S3, chiffrement et règles d’accès au bucket validés avec l’équipe sécurité.
  • Rôle ou identité IAM à privilèges limités et méthode d’authentification sans clés statiques dans le code.
  • Un state non productif ou un laboratoire pour vérifier init et le verrouillage, avec fenêtre de changement si migration.

03 · VUE D’ENSEMBLE

Comprendre l’architecture et les flux

ARCHITECTURE TECHNIQUEComprendre la chaîne de bout en bout
01Code Terraform
02Backend S3
03Bucket chiffré et versionné
04Objet tfstate
05Lockfile .tflock
06Runners autorisés
Le state décrit les objets gérés et peut contenir des valeurs sensibles. S3 stocke le state ; use_lockfile active un fichier de verrouillage pour empêcher deux écritures simultanées. La politique IAM limite la lecture et l’écriture au périmètre prévu.

04 · TUTORIEL

Procédure complète, étape par étape

Suivez les étapes dans l’ordre et contrôlez chaque résultat avant de poursuivre. Renseignez les paramètres adaptés à votre environnement.

01

ÉTAPE 1 / 6

Inventorier les states et les exécutions concurrentes

Une migration sans cartographie expose à un écrasement d’état ou à l’utilisation de deux sources de vérité.

  1. Identifier les projets, environnements, pipelines, comptes AWS et responsables du state.
  2. Déterminer s’il existe déjà un backend distant et vérifier son mode de verrouillage.
  3. Suspendre les écritures concurrentes pour toute opération de migration planifiée.
Exemple techniqueÀ adapter à votre environnement
terraform version
terraform workspace show
terraform state list
Ce qui se passe à cette étape
1Inventaire
2Responsables
3Gel des écritures

À vérifier : La liste des environnements et des ressources suivies est connue avant modification.

Point de vigilance : terraform state list peut exposer des noms de ressources ; ne publier aucune sortie issue d’un environnement client.

02

ÉTAPE 2 / 6

Préparer un bucket de state sécurisé et restaurable

Un backend distant n’est pas automatiquement sécurisé : la conservation des versions et les permissions doivent être établies avant usage.

  1. Faire créer un bucket dédié au state, avec block public access, chiffrement au repos et versioning.
  2. Tester l’accès via un rôle IAM ; restreindre bucket, préfixe et fichiers .tflock nécessaires.
  3. Contrôler les règles d’audit, de rétention et les opérations de restauration S3 versioning.
Exemple techniqueÀ adapter à votre environnement
aws s3api get-bucket-versioning --bucket NOM_DU_BUCKET
aws s3api get-public-access-block --bucket NOM_DU_BUCKET
aws s3api get-bucket-encryption --bucket NOM_DU_BUCKET
Ce qui se passe à cette étape
1Bucket
2Versioning
3Accès contrôlé

À vérifier : Versioning, accès privé et chiffrement sont confirmés pour le bucket de recette.

Point de vigilance : Le versioning protège contre certaines erreurs de manipulation, pas contre la suppression malveillante ou l’absence de sauvegarde gouvernée.

03

ÉTAPE 3 / 6

Déclarer le backend S3 et son verrouillage natif

Le paramètre use_lockfile est la méthode native S3 recommandée ; le verrouillage fondé sur DynamoDB est déprécié dans la documentation actuelle.

  1. Renseigner bucket, key, région réelle du bucket et use_lockfile=true.
  2. Éviter toute clé AWS, secret, token ou mot de passe directement dans les fichiers .tf ou options -backend-config.
  3. Différencier les fichiers d’état par environnement et vérifier que les permissions couvrent aussi la clé .tflock.
Exemple techniqueÀ adapter à votre environnement
# backend.tf (exemple de structure à adapter)
terraform {
  backend "s3" {
    bucket       = "NOM_DU_BUCKET"
    key          = "plateforme/recette/terraform.tfstate"
    region       = "eu-west-3"
    encrypt      = true
    use_lockfile = true
  }
}
Ce qui se passe à cette étape
1Backend
2State S3
3Lockfile

À vérifier : Le backend référence un emplacement unique et active le verrouillage par fichier.

Point de vigilance : Le bucket doit déjà exister ; terraform init ne crée pas automatiquement son propre backend S3.

04

ÉTAPE 4 / 6

Initialiser le backend sans migration accidentelle

La première initialisation et le déplacement d’un state existant sont deux opérations différentes qui ne doivent pas être confondues.

  1. Sur un laboratoire neuf sans state à migrer, exécuter terraform init avec les identifiants IAM du rôle autorisé.
  2. Si un state local existe, le sauvegarder de façon sécurisée et organiser une migration encadrée avec terraform init -migrate-state ; examiner les demandes de confirmation.
  3. Vérifier l’emplacement réellement configuré ; ne pas utiliser -reconfigure pour masquer un écart de state sans investigation.
Exemple techniqueÀ adapter à votre environnement
# Laboratoire neuf, après contrôle du backend :
terraform init
terraform validate
terraform plan
Ce qui se passe à cette étape
1Initialisation
2Backend accepté
3Plan contrôlé

À vérifier : Le backend S3 est initialisé et le plan est calculé dans l’environnement attendu.

Point de vigilance : Un plan sauvé (.tfplan) ou une copie de state peut contenir des secrets : traitement confidentiel obligatoire.

05

ÉTAPE 5 / 6

Tester les autorisations et le verrouillage

Le vrai critère est d’empêcher les écritures concurrentes tout en autorisant les opérations normales d’un runner légitime.

  1. Vérifier que le rôle de travail possède les droits nécessaires sur le state et sur .tflock, sans accès à tous les buckets.
  2. Dans un laboratoire, organiser un test d’exécution simultanée contrôlé et vérifier qu’une seconde écriture attend ou échoue proprement.
  3. Observer l’objet de verrouillage pendant l’opération et vérifier sa disparition après la fin du processus.
Exemple techniqueÀ adapter à votre environnement
# Exemple de vérification non destructive du state suivi :
terraform state list
# Tester les accès et le lock sous supervision,
# sans exécuter deux apply concurrents en production.
Ce qui se passe à cette étape
1Accès IAM
2Verrou
3Fin contrôlée

À vérifier : Le processus de verrouillage évite deux mises à jour simultanées du même state.

Point de vigilance : Ne jamais contourner un verrou avec -lock=false ou terraform force-unlock par réflexe.

06

ÉTAPE 6 / 6

Documenter la restauration et la réponse aux incidents

La réversibilité exige de savoir retrouver une version saine et les acteurs habilités avant une panne.

  1. Documenter le préfixe de state, les propriétaires, la rétention et les sauvegardes.
  2. Tester en recette l’identification d’une ancienne version S3 sans la restaurer dans un state actif de production.
  3. Prévoir un plan de récupération validé par un pair avant toute modification manuelle de state.
Exemple techniqueÀ adapter à votre environnement
aws s3api list-object-versions \
  --bucket NOM_DU_BUCKET \
  --prefix plateforme/recette/terraform.tfstate
Ce qui se passe à cette étape
1Versions
2Analyse
3Restauration approuvée

À vérifier : Les versions disponibles sont identifiées et la procédure de restauration est explicitement gouvernée.

Point de vigilance : Ne jamais réécrire un state de production depuis une sauvegarde sans analyse de l’infrastructure réelle et validation.

RÉFÉRENCES TECHNIQUES

Documentation officielle

Retrouvez les prérequis, les fonctionnalités et les versions prises en charge par Terraform. Vérifiez les commandes sur un environnement de test avant leur utilisation en production.

Consulter la documentation officielle

05 · RECETTE

Comment vérifier que tout fonctionne ?

Résultat attenduContrôles avant de considérer la procédure terminée
01

Bucket S3 privé, chiffré, versionné et contrôlé par IAM.

02

use_lockfile=true et permissions sur la clé .tflock sont en place.

03

Le backend pointe vers le bon compte, bucket, préfixe et environnement.

04

Une exécution concurrente ne peut pas écrire simultanément le même state.

05

Une procédure de restauration existe et n’expose aucun secret dans Git ou dans les logs.

06 · DIAGNOSTIC

Problèmes fréquents et résolution

AccessDenied durant init

Cause probable : Permissions IAM manquantes ou mauvaise identité active

Que faire : Vérifier l’identité du runner, le bucket, la clé et les droits sur .tflock.

Error acquiring the state lock

Cause probable : Une exécution concurrente détient le verrou ou un incident a laissé un verrou

Que faire : Identifier le processus propriétaire et documenter la décision avant tout déverrouillage.

State introuvable

Cause probable : Mauvais bucket, key, région ou workspace

Que faire : Comparer les paramètres à la cartographie et vérifier les versions S3 existantes.

Migration inattendue

Cause probable : Backend précédemment local ou différent

Que faire : Stopper et sauvegarder le state avant toute confirmation de migration.

07 · QUESTIONS PRATIQUES

Questions fréquentes

Pourquoi versionner le bucket S3 ?

Pour disposer de versions antérieures en cas de corruption ou suppression accidentelle, avec une procédure contrôlée de récupération.

DynamoDB est-il indispensable au verrouillage ?

Non. Le backend S3 récent prend en charge use_lockfile ; le verrouillage DynamoDB est déprécié.

Un state marqué sensible est-il chiffré dans Git ?

Non. sensitive masque certains affichages mais ne remplace pas la protection du state et des sauvegardes.

Peut-on partager un même state entre tous les environnements ?

Il est généralement préférable d’isoler les environnements et les droits pour réduire l’impact d’une erreur.

AUTRES TECHNOLOGIES

Guides complémentaires

Tous les guides Terraform

VOTRE ENVIRONNEMENT

Besoin d’aller plus loin sur votre environnement ?

Infrastructure as Code, modules et gouvernance : échangeons sur la fiabilité et la sécurité de vos déploiements Terraform.

Échanger avec ADN Consulting

Pour aller plus loin