Examen AWS Well-Architected
Ce workflow effectue un examen structuré du framework AWS Well-Architected (WAF) sur les fichiers IaC et l'infrastructure déployée de votre workload. Il identifie les risques sur les 6 piliers du WAF et crée des issues GitHub pour suivre la correction.
Prérequis
- AWS CLI configurée et authentifiée
- Fichiers IaC présents dans le repository (Terraform, CloudFormation, CDK ou SAM)
- Serveur MCP GitHub configuré et authentifié
Étapes du workflow
Étape 1 : Charger la référence du framework Well-Architected
Récupérer les bonnes pratiques actuelles du WAF AWS :
https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html- Lenses spécifiques aux piliers en fonction du type de workload (Serverless, SaaS, etc.)
Étape 2 : Découvrir l'IaC et l'architecture
Analyser le repository à la recherche de fichiers IaC :
- Terraform :
**/*.tf - CloudFormation/SAM :
**/*.yaml,**/*.json(templates CFn) - CDK :
lib/**/*.ts,bin/**/*.ts,cdk.json
Identifier les services AWS clés utilisés (compute, données, réseau, sécurité, observabilité) et générer un diagramme d'architecture Mermaid.
Étape 3 : Examen par pilier
Pilier 1 : Excellence opérationnelle
- [ ] Toute l'infrastructure définie en IaC (aucune modification manuelle via console)
- [ ] Stratégie de tagging cohérente appliquée sur toutes les ressources
- [ ] Alarmes CloudWatch définies pour les métriques clés
- [ ] Pipeline de déploiement automatisé (aucun déploiement manuel)
- [ ] CloudTrail activé pour l'audit logging
- [ ] Runbooks ou documentation opérationnelle présents
Pilier 2 : Sécurité
- [ ] Les rôles IAM utilisent des politiques avec privilèges minimaux (pas d'actions
*sans justification) - [ ] Pas de credentials en dur dans l'IaC ou le code
- [ ] Secrets gérés via Secrets Manager ou SSM Parameter Store
- [ ] Buckets S3 avec accès public bloqué et chiffrement côté serveur activé
- [ ] Ressources sensibles placées dans des subnets privés
- [ ] Groupes de sécurité restreignant l'entrée aux ports/CIDR minimums requis
- [ ] Chiffrement KMS activé pour les datastores sensibles (RDS, EBS, S3, SQS, DynamoDB)
- [ ] SSL/TLS appliqué sur tous les endpoints (
enforceSSL: true) - [ ] GuardDuty activé (
aws guardduty list-detectors) - [ ] AWS WAF configuré sur les API exposées publiquement et les distributions CloudFront
- [ ] Suppression MFA activée sur les buckets S3 critiques
Pilier 3 : Fiabilité
- [ ] Déploiements Multi-AZ pour les bases de données de production (RDS Multi-AZ, DynamoDB Global Tables)
- [ ] Auto Scaling configuré avec politiques appropriées pour EC2/ECS
- [ ] Versioning et politiques de cycle de vie S3 configurés
- [ ] Sauvegardes automatiques RDS activées avec période de rétention appropriée
- [ ] DynamoDB Point-in-Time Recovery (PITR) activé
- [ ] Dead Letter Queues (DLQ) configurées pour Lambda, SQS, SNS
- [ ] Vérifications de santé Route 53 configurées pour le basculement DNS
- [ ] Concurrence réservée Lambda définie pour éviter le throttling par effet de voisinage
Pilier 4 : Efficacité des performances
- [ ] Types d'instances correctement dimensionnés (mémoire Lambda, type EC2, classe RDS)
- [ ] Instances Graviton/ARM utilisées lorsque disponibles (Lambda
arm64, EC2 Graviton) - [ ] Mise en cache implémentée (ElastiCache, DAX, CloudFront, caching API Gateway)
- [ ] CloudFront utilisé pour la distribution mondiale de contenu statique
- [ ] Aurora Serverless ou DynamoDB On-Demand pour les patterns de charge variable
- [ ] Lambda Provisioned Concurrency pour les chemins synchrones critiques en latence
Pilier 5 : Optimisation des coûts
- [ ] EC2 Reserved Instances ou Savings Plans pour les workloads à charge stable
- [ ] Politiques de cycle de vie S3 déplaçant les données vers des niveaux de stockage moins chers
- [ ] Architecture Lambda
arm64adoptée (réduction de 20% des coûts) - [ ] VPC Endpoints pour S3/DynamoDB afin d'éviter les frais NAT Gateway
- [ ] Volumes EBS gp2 migrés vers gp3 (même performance, 20% moins cher)
- [ ] Environnements de développement/test avec arrêts automatiques planifiés
- [ ] AWS Budgets et Cost Anomaly Detection configurés
- [ ] Volumes EBS non attachés et instances EC2 inactives identifiés
Pilier 6 : Durabilité
- [ ] Instances Graviton/ARM sélectionnées lorsque disponibles
- [ ] Services serverless/gérés préférés aux EC2 toujours actifs
- [ ] Politiques de cycle de vie S3 réduisant le stockage de données long terme inutile
- [ ] Auto Scaling configuré pour éviter le sur-provisionnement
- [ ] Sélection des régions considérant les engagements AWS en énergie renouvelable
Étape 4 : Classification des risques
Pour chaque finding, classifier :
- Risque Élevé : Vulnérabilité de sécurité, point de défaillance unique, pas de sauvegarde/récupération
- Risque Moyen : Fiabilité sous-optimale, inefficacité des coûts, préoccupation de performance
- Risque Faible : Écart des bonnes pratiques, opportunité d'optimisation mineure
Étape 5 : Confirmation utilisateur
🏗️ Résumé de l'examen AWS Well-Architected
📊 Résultats de l'examen :
• Fichiers IaC analysés : X
• Services AWS identifiés : Y
• Nombre total de findings : Z
• Risque élevé : A (action immédiate requise)
• Risque moyen : B (à traiter bientôt)
• Risque faible : C (sympa à avoir)
🔴 Top findings à risque élevé :
1. [Pilier] : [Finding] — [Pourquoi c'est important]
2. [Pilier] : [Finding] — [Pourquoi c'est important]
💡 Cela créera Z issues GitHub individuelles + 1 issue EPIC.
❓ Procéder à la création des issues GitHub ? (o/n)
Étape 6 : Créer les issues individuelles des findings
Étiqueter avec "well-architected" et le nom du pilier (p. ex. "security", "reliability").
Titre : [WAF-<PILIER>] [Finding bref] — [Niveau de risque]
Corps :
## 🏗️ Finding Well-Architected : [Titre bref]
**Pilier** : [Nom] | **Niveau de risque** : [Élevé/Moyen/Faible] | **Effort** : [Faible/Moyen/Élevé]
### 📋 Description
[Explication claire du finding et pourquoi c'est important]
### 🔧 Correction
**Correction IaC** (préférée) :
```hcl
# Exemple Terraform
resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
bucket = aws_s3_bucket.example.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
}
}
}
Fallback AWS CLI :
aws s3api put-bucket-encryption --bucket <name> \
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms"}}]}'
📚 Référence AWS
- [Lien WAF Best Practice]
- [Lien documentation AWS]
✅ Validation
- [ ] Changement implémenté en IaC et déployé
- [ ] La règle AWS Config passe (si applicable)
- [ ] Le finding Security Hub résolu (si applicable)
Question Well-Architected : [Question WAF à laquelle cela correspond]
### Étape 7 : Créer l'issue EPIC de suivi
Étiqueter avec "well-architected" et "epic".
**Titre** : `[EPIC] Examen AWS Well-Architected — X findings sur 6 piliers`
**Corps** : Résumé exécutif avec tableau de répartition par pilier (nombre de findings par pilier et niveau de risque), diagramme d'architecture Mermaid, checklist priorisée liant tous les issues individuelles (Élevé → Moyen → Faible), et critères de succès :
- Tous les findings à risque élevé résolus
- Les findings moyen ont des plans d'atténuation acceptés
- Pas de régression dans les alarmes CloudWatch ou règles Config existantes
## Gestion des erreurs
- **Aucun fichier IaC trouvé** : Limiter l'examen à la découverte de ressources en direct via AWS CLI et noter l'écart
- **Permissions AWS insuffisantes** : Lister les permissions lecture seule requises pour l'examen
- **Échec de création GitHub** : Afficher tous les findings en markdown formaté à la console
## Critères de succès
- ✅ Les 6 piliers WAF examinés contre l'IaC et l'infrastructure en direct
- ✅ Tous les findings classifiés par niveau de risque et pilier
- ✅ Étapes de correction exploitables avec exemples IaC pour chaque finding
- ✅ Issues GitHub créées pour le suivi d'équipe
- ✅ Diagramme d'architecture généré pour le contexte EPIC
- ✅ Références documentation AWS incluses