Aller au contenu principal

Cloud Custodian

Overview

Cloud Custodian, c'est le framework de governance cloud open-source qui pense que les politiques doivent être automatisées, pas manuelles. Développé par Capital One et maintenant utilisé par des centaines d'entreprises, il permet de définir des règles de sécurité, conformité et coûts en code YAML et de les appliquer automatiquement sur AWS, Azure, GCP et plus de 50 services cloud. Si tu veux automatiser la governance de ton cloud, c'est parfait.

Cloud Custodian fonctionne avec des politiques déclaratives en YAML qui définissent des filtres (quoi surveiller) et des actions (quoi faire). Exécution serverless (Lambda, Azure Functions), intégration native avec les services cloud, notifications multi-canaux (Slack, email, SNS), et reporting détaillé.

Cloud Custodian se distingue par sa couverture multi-cloud exhaustive (AWS, Azure, GCP, 200+ services supportés), son approche policy-as-code (tout en YAML versionné), et sa conception serverless (pas d'infrastructure à maintenir).


Informations essentielles

PropriétéValeur
Site officielhttps://cloudcustodian.io/
Repositoryhttps://github.com/cloud-custodian/cloud-custodian
LicenceApache 2.0
DéveloppeurCloud Custodian Project (originalement Capital One)
LangagePython
Clouds supportésAWS, Azure, GCP, Kubernetes, Alibaba Cloud, Tencent Cloud

Fonctionnalités principales

Multi-cloud exhaustif

  • AWS : 150+ services (EC2, S3, RDS, Lambda, etc.)
  • Azure : 50+ services (VM, Storage, SQL Database, etc.)
  • GCP : 30+ services (Compute Engine, BigQuery, etc.)
  • Kubernetes : Workloads, ConfigMaps, Secrets, etc.
  • Plus de 200 types de ressources au total

Modes d'exécution flexibles

  • Pull mode : Exécution périodique (cron, CloudWatch Events)
  • Push mode : Réaction temps réel aux événements cloud
  • Serverless : Lambda (AWS), Azure Functions, Cloud Functions (GCP)
  • Container : Docker, Kubernetes Jobs
  • Local : Exécution en ligne de commande

Actions automatisées

  • Remediation : Correction automatique des non-conformités
  • Notification : Alertes Slack, email, SNS, webhooks
  • Tagging : Application automatique de tags
  • Stop/Start : Arrêt/démarrage de ressources
  • Suppression : Nettoyage automatique avec grace period

Policy-as-Code

  • Politiques en YAML lisible et versionnable
  • Filtres expressifs avec opérateurs logiques
  • Variables et templating pour réutilisabilité
  • Validation et test des politiques
  • Intégration CI/CD native

Cas d'usage

  • Cost optimization : Arrêt automatique de ressources inutilisées
  • Security governance : Application des politiques de sécurité
  • Compliance : Conformité PCI, SOX, HIPAA automatisée
  • Tagging enforcement : Application cohérente des tags
  • Resource cleanup : Nettoyage automatique des ressources temporaires

Installation

Via pip

pip install c7n
pip install c7n-aws # Support AWS
pip install c7n-azure # Support Azure
pip install c7n-gcp # Support GCP
pip install c7n-kube # Support Kubernetes

Via Docker

docker pull cloudcustodian/c7n:latest
docker run -it cloudcustodian/c7n:latest custodian version

Configuration AWS

# Configuration des credentials AWS
aws configure

# Test de la configuration
custodian version
custodian schema aws

Utilisation basique

Politique simple - Instances non taggées

# policies/untagged-instances.yml
policies:
- name: ec2-untagged-instances
resource: aws.ec2
description: "Find EC2 instances without required tags"
filters:
- "tag:Owner": absent
- "tag:Environment": absent
actions:
- type: notify
template: default.html
priority_header: 1
subject: "EC2 Instances Without Required Tags - {{account}} : {{region}}"
to:
- security@company.com
transport:
type: ses
region: us-east-1
- type: mark-for-op
tag: custodian_cleanup
message: "Instance will be stopped in 2 days due to missing tags"
op: stop
days: 2

Politique coûts - Instances oubliées

# policies/forgotten-instances.yml
policies:
- name: ec2-forgotten-instances
resource: aws.ec2
description: "Stop instances running more than 30 days"
filters:
- type: instance-age
days: 30
- "State.Name": running
- "tag:Environment": "development"
actions:
- type: notify
template: default.html
subject: "Long Running Development Instance - {{account}}"
to:
- devops@company.com
transport:
type: sns
topic: arn:aws:sns:us-east-1:123456789012:custodian-alerts
- stop

Exécution des politiques

# Dry-run (simulation)
custodian run --dry-run policies/untagged-instances.yml \
--output-dir ./output \
--region us-east-1

# Exécution réelle
custodian run policies/untagged-instances.yml \
--output-dir ./output \
--region us-east-1

# Exécution multi-régions
custodian run policies/ --output-dir ./output --region all

Déploiement serverless (Lambda)

# custodian-serverless.yml
policies:
- name: s3-cross-account-access
resource: aws.s3
mode:
type: cloudtrail
events:
- CreateBucket
- DeleteBucket
- PutBucketPolicy
timeout: 200
memory: 256
filters:
- type: cross-account
actions:
- type: notify
violation_desc: "S3 Bucket has cross-account access"
action_desc: "Alert security team about cross-account S3 access"
to:
- security@company.com
transport:
type: sns
topic: arn:aws:sns:us-east-1:123456789012:security-alerts

Politique Azure

# policies/azure-unused-vms.yml
policies:
- name: azure-unused-virtual-machines
resource: azure.vm
description: "Find unused Azure VMs"
filters:
- type: instance-view
key: statuses[?code=='PowerState/running']
value: empty
- type: metric
metric: Percentage CPU
aggregation: average
op: lt
threshold: 5
period: 7200
actions:
- type: notify
template: default.html
subject: "Unused Azure VM Found"
to:
- azure-admin@company.com
- deallocate

Avantages

  • Multi-cloud natif : AWS, Azure, GCP, K8s dans un seul outil, pas de vendor lock-in
  • Policy-as-Code : politiques en YAML versionnable, review et CI/CD standards
  • Serverless by design : pas d'infrastructure à maintenir, ça scale automatiquement
  • Communauté active : utilisé par des centaines d'entreprises, patterns éprouvés
  • Actions riches : du simple tagging à la remediation complexe, très flexible

Limitations

  • Courbe d'apprentissage pour les filtres complexes : mais la doc est excellente avec exemples
  • Peut générer beaucoup de bruit sans filtres bien pensés : mais c'est le cas de tout outil de governance
  • Certaines actions peuvent être irréversibles : mais le dry-run est là pour ça

Alternatives

  • AWS Config Rules : Limité à AWS, moins flexible
  • Azure Policy : Limité à Azure, moins d'actions
  • GCP Organization Policy : Limité à GCP, moins granulaire
  • Terraform Sentinel : Limité au moment du déploiement

Ressources