1. Les identités IAM #
Utilisateurs, groupes, rôles.
Vocabulaire #
| Notion | Usage | Bonne pratique |
|---|---|---|
| Utilisateur IAM | Identité permanente avec mot de passe ou clés | À éviter pour les humains : préférer Identity Center |
| Groupe | Regrouper des utilisateurs pour leur attacher des politiques | Jamais de politique attachée directement à un utilisateur |
| Rôle | Identité endossée temporairement (personne, service, autre compte) | La solution par défaut pour les applications |
| Politique | Document JSON qui autorise ou refuse des actions | Moindre privilège, conditions |
Humains et applications #
2. Les politiques #
Le document JSON qui donne les droits.
Anatomie d'une politique #
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "LectureRapports",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::rapports-prod", "arn:aws:s3:::rapports-prod/*"],
"Condition": { "Bool": { "aws:SecureTransport": "true" } }
}]
}Chaque instruction indique un effet (Allow ou Deny), des actions, des ressources (ARN) et éventuellement des conditions (IP source, MFA, étiquettes, chiffrement en transit).
Évaluation #
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::123456789012:role/app \
--action-names s3:GetObject --resource-arns arn:aws:s3:::rapports-prod/janvier.pdf3. Bonnes pratiques #
Le moindre privilège en pratique.
Règles #
- MFA pour tous les humains, utilisateur racine verrouillé.
- Identity Center et rôles : pas de clés d'accès longues durées sur les postes ni dans le code.
- Partir des politiques gérées par AWS pour découvrir, puis écrire des politiques ajustées ; IAM Access Analyzer propose des politiques à partir de l'activité réelle.
- Séparer les comptes par environnement et poser des SCP (interdire de désactiver CloudTrail, limiter les régions).
- Revoir régulièrement les accès inutilisés (dernier accès dans la console IAM).
aws iam generate-credential-report && aws iam get-credential-report --query Content --output text | base64 -d | head
aws accessanalyzer list-findings --analyzer-arn <arn>