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
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é
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
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
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
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.