Skip to content

Commit 027cf34

Browse files
authored
AWS_AI_Rule 1: Detect Idle SageMaker endpoint (#122)
1 parent bd46bf1 commit 027cf34

34 files changed

Lines changed: 1697 additions & 372 deletions

README.fr.md

Lines changed: 83 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
![PyPI](https://img.shields.io/pypi/v/cleancloud)
44
![Python Versions](https://img.shields.io/pypi/pyversions/cleancloud)
5-
![Docker Pulls](https://img.shields.io/docker/pulls/getcleancloud/cleancloud)
65
![License](https://img.shields.io/badge/License-MIT-yellow.svg)
7-
[![Security Scanning](https://github.com/cleancloud-io/cleancloud/actions/workflows/security-scan.yml/badge.svg)](https://github.com/cleancloud-io/cleancloud/actions/workflows/security-scan.yml)
8-
![GitHub stars](https://img.shields.io/github/stars/cleancloud-io/cleancloud?style=social)
96

107
**Languages / Langues :**
118
🇬🇧 [English](README.md) | 🇫🇷 [Français](README.fr.md)
@@ -33,7 +30,7 @@ C'est CleanCloud. Scannez vos environnements AWS, Azure et GCP, obtenez des find
3330
| Hygiène multi-comptes / multi-abonnements / multi-projets ||||
3431
| Application planifiée et CI/CD (codes de sortie) ||||
3532

36-
- **30 règles de détection sélectives et haut signal :** volumes orphelins, bases de données inactives, instances arrêtées, registres inutilisés, et plus — conçues pour éviter les faux positifs en environnements IaC, chacune avec une estimation de coût déterministe
33+
- **31 règles de détection sélectives et haut signal :** volumes orphelins, bases de données inactives, instances arrêtées, registres inutilisés, et plus — conçues pour éviter les faux positifs en environnements IaC, chacune avec une estimation de coût déterministe. Les règles IA/ML (SageMaker) sont opt-in via `--category ai`
3734
- **Gouvernance et application de politique (opt-in) :** `--fail-on-confidence HIGH` ou `--fail-on-cost 100` — appliquer des seuils de gaspillage sur un planning, géré par les équipes platform ou FinOps
3835
- **Scan multi-comptes (AWS) :** scannez des AWS Organizations entières en une exécution — fichier de config, IDs inline, ou auto-découverte via `--org`
3936
- **Scan multi-abonnements (Azure) :** scannez tous les abonnements Azure en parallèle — auto-découverte via Management Group, détail des coûts par abonnement inclus
@@ -63,18 +60,88 @@ Toutes les opérations sont en lecture seule. Sûr pour les comptes de productio
6360
- Gouvernance d'hygiène planifiée — job hebdomadaire qui détecte les nouveaux gaspillages et applique les seuils sur tous les comptes
6461
- Rapports pré-revue — exportez les findings en markdown avant une revue trimestrielle des coûts ou un board meeting
6562

63+
## Exemple de résultat détaillé
64+
6665
```
67-
6 problèmes d'hygiène détectés :
66+
6 problèmes détectés :
67+
68+
1. [AWS] Instance RDS inactive (aucune connexion depuis 21 jours)
69+
Risque : Élevé
70+
Confiance : High
71+
Ressource : aws.rds.instance → db-prod-analytics
72+
Région : us-east-1
73+
Règle : aws.rds.instance.idle
74+
Raison : Instance RDS sans connexion depuis 21 jours
75+
Détails :
76+
- instance_class: db.r5.large
77+
- engine: postgres 15.4
78+
- estimated_monthly_cost: ~$380/mois
79+
80+
2. [AWS] Volume EBS non attaché
81+
Risque : Faible
82+
Confiance : High
83+
Ressource : aws.ebs.volume → vol-0a1b2c3d4e5f67890
84+
Région : us-east-1
85+
Règle : aws.ebs.volume.unattached
86+
Raison : Volume non attaché depuis 47 jours
87+
Détails :
88+
- size_gb: 500
89+
- state: available
90+
- tags: {"Project": "legacy-api", "Owner": "platform"}
91+
92+
3. [AWS] NAT Gateway inactive
93+
Risque : Moyen
94+
Confiance : Medium
95+
Ressource : aws.ec2.nat_gateway → nat-0abcdef1234567890
96+
Région : us-west-2
97+
Règle : aws.ec2.nat_gateway.idle
98+
Raison : Aucun trafic détecté depuis 21 jours
99+
Détails :
100+
- name: staging-nat
101+
- total_bytes_out: 0
102+
- estimated_monthly_cost: ~$32/mois
103+
104+
4. [AWS] Load Balancer inactif (aucune cible saine)
105+
Risque : Moyen
106+
Confiance : High
107+
Ressource : aws.elbv2.load_balancer → alb-staging-api
108+
Région : us-east-1
109+
Règle : aws.elbv2.load_balancer.idle
110+
Raison : Load balancer sans cible saine depuis 30 jours
111+
Détails :
112+
- type: application
113+
- estimated_monthly_cost: ~$18/mois
114+
115+
5. [AWS] Elastic IP non attachée
116+
Risque : Faible
117+
Confiance : High
118+
Ressource : aws.ec2.elastic_ip → eipalloc-0a1b2c3d4e5f6
119+
Région : eu-west-1
120+
Règle : aws.ec2.elastic_ip.unattached
121+
Raison : Elastic IP non associée à aucune instance ou ENI (ancienneté : 92 jours)
68122
69-
1. [AWS] Volume EBS non attaché — $40/mois
70-
2. [AWS] NAT Gateway inactive — $32.40/mois
71-
3. [AWS] Elastic IP non attachée — $0/mois
72-
...
123+
6. [AWS] Ancien snapshot EBS (438 jours)
124+
Risque : Faible
125+
Confiance : High
126+
Ressource : aws.ebs.snapshot → snap-0a1b2c3d4e5f67890
127+
Région : us-west-2
128+
Règle : aws.ebs.snapshot.old
129+
Raison : Snapshot âgé de 438 jours sans activité récente
130+
Détails :
131+
- size_gb: 200
132+
- estimated_monthly_cost: ~$10/mois
73133
74-
Gaspillage mensuel estimé : ~$147
75-
Régions scannées : us-east-1, us-west-2, eu-west-1
134+
--- Résumé du scan ---
135+
Total findings : 6
136+
Par risque : faible: 3 moyen: 2 élevé: 1
137+
Par confiance : high: 5 medium: 1
138+
Gaspillage minimum estimé : ~$480/mois
139+
(5 findings sur 6 chiffrés)
140+
Régions scannées : us-east-1, us-west-2, eu-west-1 (auto-détectées)
76141
```
77142

143+
Pas encore de compte cloud ? `cleancloud demo` affiche un exemple de sortie sans aucun credential.
144+
78145
## Mentionné dans la presse
79146

80147
- [Korben](https://korben.info/cleancloud-nettoyeur-cloud-aws-azure.html) 🇫🇷 — Grand média tech français
@@ -104,6 +171,7 @@ Régions scannées : us-east-1, us-west-2, eu-west-1
104171
| Flag | Fonction |
105172
|---|---|
106173
| `--provider aws\|azure\|gcp` | Fournisseur cloud à scanner *(obligatoire)* |
174+
| `--category hygiene\|ai\|all` | Catégorie de règles : `hygiene` (défaut), `ai` (SageMaker, AWS uniquement) ou `all` (hygiene + IA) |
107175
| `--region REGION` | Scanner une seule région |
108176
| `--all-regions` | Toutes les régions actives — AWS/Azure uniquement |
109177
| **AWS multi-comptes** | |
@@ -221,54 +289,6 @@ pip uninstall cleancloud && pipx install cleancloud && pipx ensurepath
221289

222290
---
223291

224-
## Exemple de résultat détaillé
225-
226-
```
227-
6 problèmes d'hygiène détectés :
228-
229-
1. [AWS] Volume EBS non attaché
230-
Risque : Faible
231-
Confiance : High
232-
Ressource : aws.ebs.volume → vol-0a1b2c3d4e5f67890
233-
Région : us-east-1
234-
Règle : aws.ebs.volume.unattached
235-
Raison : Volume non attaché depuis 47 jours
236-
Détails :
237-
- size_gb: 500
238-
- state: available
239-
- tags: {"Project": "legacy-api", "Owner": "platform"}
240-
241-
2. [AWS] NAT Gateway inactive
242-
Risque : Moyen
243-
Confiance : Medium
244-
Ressource : aws.ec2.nat_gateway → nat-0abcdef1234567890
245-
Région : us-west-2
246-
Règle : aws.ec2.nat_gateway.idle
247-
Raison : Aucun trafic détecté depuis 21 jours
248-
Détails :
249-
- name: staging-nat
250-
- total_bytes_out: 0
251-
- estimated_monthly_cost_usd: 32.40
252-
253-
3. [AWS] Elastic IP non attachée
254-
Risque : Faible
255-
Confiance : High
256-
Ressource : aws.ec2.elastic_ip → eipalloc-0a1b2c3d4e5f6
257-
Région : eu-west-1
258-
Règle : aws.ec2.elastic_ip.unattached
259-
Raison : Elastic IP non associée à aucune instance ou ENI (ancienneté : 92 jours)
260-
261-
--- Résumé du scan ---
262-
Total findings : 6
263-
Par risque : faible: 5 moyen: 1
264-
Par confiance : high: 2 medium: 4
265-
Gaspillage minimum estimé : ~$147/mois
266-
(4 findings sur 6 chiffrés)
267-
Régions scannées : us-east-1, us-west-2, eu-west-1 (auto-détectées)
268-
```
269-
270-
Pas encore de compte cloud ? `cleancloud demo` affiche un exemple de sortie sans aucun credential.
271-
272292
### Rapport markdown partageable
273293

274294
```bash
@@ -317,6 +337,7 @@ Pour des exemples de sortie complets incluant `doctor`, JSON, CSV et markdown :
317337
- Plateforme : instances RDS inactives (HIGH)
318338
- Observabilité : logs CloudWatch à rétention infinie
319339
- Gouvernance : ressources sans tags, security groups inutilisés
340+
- IA/ML *(opt-in : `--category ai`)* : endpoints SageMaker inactifs avec zéro invocations depuis 14+ jours — endpoints GPU flaggés risque HIGH ($500–$23K/mois)
320341

321342
**Azure :**
322343
- Compute : VMs arrêtées (non désallouées) (HIGH)
@@ -562,7 +583,9 @@ Guide complet : [Configuration GCP →](docs/gcp.md)
562583

563584
**Policy-as-code**`cleancloud.yaml` avec packs de règles, exceptions par équipe, et seuils de coût en config — la principale demande de gouvernance FinOps pour 2025/2026
564585

565-
**Plus de règles AWS** — lacunes de cycle de vie S3, gaspillage IA/GPU (endpoints SageMaker inactifs, instances GPU orphelines), Redshift inactif
586+
**Plus de règles IA/ML** — clusters de calcul Azure ML inactifs, endpoints Vertex AI inactifs, instances de notebook SageMaker inutilisées, artefacts d'entraînement orphelins
587+
588+
**Plus de règles AWS** — lacunes de cycle de vie S3, Redshift inactif, fuite de coût NAT Gateway (services internes routant via NAT au lieu de VPC endpoints — S3, DynamoDB, ECR, SSM), VPC endpoints inutilisés
566589

567590
**Plus de règles Azure** — Azure Firewall inactif, pools de nœuds AKS inactifs, pools Azure Batch inutilisés
568591

0 commit comments

Comments
 (0)