Garden of KnowledgeApplied Sciences › Computer Science › Software › AWS
February 25, 2026

IAM — Identity and Access Management

IAM est le service AWS de gestion des identités et des accès. Il définit qui peut faire quoi sur quelles ressources AWS.

Concepts fondamentaux§

Principe du moindre privilège§

N’accorder que les permissions strictement nécessaires pour accomplir une tâche. Pas de wildcards * en production sauf si réellement nécessaire.

Principe du zero trust§

Ne jamais faire confiance implicitement, même à l’intérieur du réseau. Vérifier chaque accès.

Entités IAM§

Utilisateurs (Users)§

Représentent des personnes ou des applications ayant besoin d’un accès à long terme. Chaque utilisateur a des credentials permanents (mot de passe + clés d’accès).

# Créer un utilisateur
aws iam create-user --user-name alice

# Créer des clés d'accès (accès programmatique)
aws iam create-access-key --user-name alice

# Lister les utilisateurs
aws iam list-users

Bonne pratique : ne pas utiliser le compte root AWS pour le travail quotidien. Créer un utilisateur IAM avec les permissions nécessaires. Activer MFA sur le compte root.

Groupes (Groups)§

Regroupent des utilisateurs pour leur attribuer des permissions communes.

aws iam create-group --group-name Developpeurs
aws iam add-user-to-group --user-name alice --group-name Developpeurs
aws iam attach-group-policy \
    --group-name Developpeurs \
    --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

Rôles (Roles)§

Les rôles sont des identités IAM sans credentials permanents. Une entité (service AWS, utilisateur, compte externe) assume temporairement un rôle et reçoit des credentials éphémères (15 min à 12h).

Cas d’usage principaux :

# Assumer un rôle (cross-account ou élévation de privilèges)
aws sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/MonRole \
    --role-session-name ma-session

# Résultat : credentials temporaires (AccessKeyId + SecretAccessKey + SessionToken)

Service Accounts§

Identités utilisées par des services AWS (EC2, Lambda, ECS) pour interagir avec d’autres services AWS. Implémentés via des rôles attachés à la ressource.

Politiques IAM (Policies)§

Une politique est un document JSON définissant les permissions.

Structure d’une politique§

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "IdentifiantOptionnelDeLaRegle",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::mon-bucket/*",
      "Condition": {
        "StringEquals": {
          "s3:prefix": ["uploads/"]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "s3:DeleteObject",
      "Resource": "*"
    }
  ]
}

Effect : Allow ou Deny. Un Deny explicite l’emporte toujours sur un Allow.

Action : opérations AWS au format service:operation. Wildcards possibles : s3:*, ec2:Describe*.

Resource : ARN (Amazon Resource Name) de la ressource. Format : arn:partition:service:region:account-id:resource.

Condition : restreindre selon le contexte (IP source, heure, tags, MFA requis, etc.).

Exemples de politiques commentées§

Accès S3 à un bucket spécifique avec condition :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::mon-bucket-prod",
        "arn:aws:s3:::mon-bucket-prod/*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

Politique de rôle EC2 pour accès DynamoDB :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteItem",
        "dynamodb:Query",
        "dynamodb:Scan"
      ],
      "Resource": "arn:aws:dynamodb:eu-west-1:123456789012:table/MaTable"
    }
  ]
}

Trust Policy d’un rôle (qui peut assumer ce rôle) :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Types de politiques§

TypeAttaché àUsage
Politiques gérées AWSUtilisateur, groupe, rôlePolitiques standard AWS (ex: AdministratorAccess)
Politiques gérées clientUtilisateur, groupe, rôlePolitiques personnalisées réutilisables
Politiques inlineUne entité spécifiquePermission très spécifique à une entité
Politiques de ressourceLa ressource (S3, SQS, KMS)Contrôle depuis la ressource
SCPs (Service Control Policies)Comptes AWS OrganizationsGarde-fous au niveau organisation

STS — Security Token Service§

AWS STS génère des credentials temporaires.

# Obtenir l'identité courante
aws sts get-caller-identity

# Assumer un rôle
CREDS=$(aws sts assume-role \
    --role-arn arn:aws:iam::COMPTE:role/ROLE \
    --role-session-name session-$(date +%s) \
    --duration-seconds 3600)

export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r .Credentials.AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r .Credentials.SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r .Credentials.SessionToken)

MFA — Multi-Factor Authentication§

# Activer MFA virtuel pour un utilisateur
aws iam create-virtual-mfa-device \
    --virtual-mfa-device-name mon-mfa \
    --outfile /tmp/qrcode.png \
    --bootstrap-method QRCodePNG

aws iam enable-mfa-device \
    --user-name alice \
    --serial-number arn:aws:iam::COMPTE:mfa/mon-mfa \
    --authentication-code1 123456 \
    --authentication-code2 654321

IAM Access Analyzer§

Identifie les ressources accessibles depuis l’extérieur du compte (S3 publics, rôles cross-account, politiques trop permissives).

aws accessanalyzer list-analyzers
aws accessanalyzer list-findings --analyzer-arn arn:aws:...

Politiques de mots de passe§

aws iam update-account-password-policy \
    --minimum-password-length 14 \
    --require-symbols \
    --require-numbers \
    --require-uppercase-characters \
    --require-lowercase-characters \
    --allow-users-to-change-password \
    --max-password-age 90 \
    --password-reuse-prevention 5

Bonnes pratiques§

PratiqueRaison
Ne jamais utiliser le root pour le travailAccès illimité, intraçable
MFA sur tous les comptes humainsProtection contre la compromission
Rôles plutôt que clés d’accès pour les servicesPas de credentials long terme à gérer
Rotation régulière des clés d’accèsLimiter l’impact en cas de fuite
Politiques restrictives avec conditionsPrincipe du moindre privilège
CloudTrail activéAudit de toutes les actions IAM
Utiliser AWS Organizations + SCPsGarde-fous multi-comptes
Tagger les ressources IAMFaciliter l’audit et la gestion
—The Gardener