Skip to content
Learni
Voir tous les tutoriels
Sécurité Cloud

Comment configurer IAM avancé avec Terraform AWS en 2026

18 minADVANCED
Read in English

Introduction

La gestion des identités et des accès (IAM) est critique pour sécuriser les environnements cloud. Avec AWS et Terraform, vous pouvez automatiser la création de rôles, utilisateurs et politiques avec un contrôle granulaire. Ce tutoriel avancé vous guide pas à pas vers une configuration production-ready incluant conditions, permissions boundaries et rotation automatique.

Prérequis

  • AWS CLI configuré avec credentials
  • Terraform 1.9+
  • Connaissances solides en HCL et IAM AWS
  • Compte AWS avec droits administrateur

Initialisation du projet Terraform

main.tf
terraform {
  required_version = ">= 1.9"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.80"
    }
  }
}

provider "aws" {
  region = "eu-west-3"
}

Ce bloc initialise Terraform et le provider AWS. Il garantit la reproductibilité et utilise la dernière version stable du provider pour supporter les nouvelles fonctionnalités IAM.

Création d'un utilisateur IAM sécurisé

iam_user.tf
resource "aws_iam_user" "app_user" {
  name = "app-service-user"
  path = "/service/"

  tags = {
    Environment = "production"
    ManagedBy   = "terraform"
  }
}

resource "aws_iam_access_key" "app_user_key" {
  user = aws_iam_user.app_user.name
}

Création d'un utilisateur IAM dédié avec chemin spécifique. L'access key est générée mais doit être stockée via AWS Secrets Manager en production.

Politique IAM avec conditions avancées

iam_policy.tf
resource "aws_iam_policy" "restricted_s3_policy" {
  name        = "RestrictedS3Access"
  description = "Accès S3 avec conditions IP et MFA"

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect = "Allow"
      Action = ["s3:GetObject", "s3:PutObject"]
      Resource = "arn:aws:s3:::my-secure-bucket/*"
      Condition = {
        IpAddress = { "aws:SourceIp" = ["10.0.0.0/8"] }
        Bool = { "aws:MultiFactorAuthPresent" = "true" }
      }
    }]
  })
}

Cette politique conditionnelle limite l'accès par IP et exige la MFA. Les conditions IAM offrent une couche de sécurité supplémentaire critique en production.

Attachement de la politique à l'utilisateur

iam_attachment.tf
resource "aws_iam_user_policy_attachment" "app_user_attach" {
  user       = aws_iam_user.app_user.name
  policy_arn = aws_iam_policy.restricted_s3_policy.arn
}

L'attachement lie la politique conditionnelle à l'utilisateur. Toujours utiliser des attachments plutôt que des politiques inline pour une meilleure traçabilité.

Rôle IAM avec permission boundary

iam_role.tf
resource "aws_iam_role" "lambda_execution_role" {
  name = "LambdaSecureRole"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Action = "sts:AssumeRole"
      Effect = "Allow"
      Principal = { Service = "lambda.amazonaws.com" }
    }]
  })

  permissions_boundary = aws_iam_policy.restricted_s3_policy.arn
}

Le rôle inclut une permission boundary qui limite les permissions maximales même si une politique permissive est attachée accidentellement.

Bonnes pratiques

  • Utilisez toujours des permission boundaries sur les rôles
  • Préférez les conditions IAM (IP, MFA, tags) plutôt que des politiques trop larges
  • Stockez les credentials via Secrets Manager et non en clair
  • Activez le logging CloudTrail sur toutes les actions IAM
  • Appliquez le principe du moindre privilège avec revue trimestrielle

Erreurs courantes à éviter

  • Oublier les conditions sur les politiques permettant un contournement
  • Utiliser des wildcards (*) excessifs dans les ressources
  • Ne pas versionner les politiques Terraform
  • Ignorer la rotation des access keys
  • Attacher des politiques directement aux utilisateurs au lieu des rôles

Pour aller plus loin

Approfondissez la gestion IAM avec nos formations expertes sur Learni Group.