Retour aux mises à jour
New releaseSep 5, 2026

cloud-custodian v0.9.52.0

Moteur de règles pour la sécurité cloud, l'optimisation des coûts et la gouvernance, DSL en yaml pour des politiques permettant d'interroger, filtrer et agir sur les ressources.

Partager

Cloud Custodian (c7n)

Cloud Custodian Logo


slack CI CII Best Practices

Cloud Custodian, également connu sous le nom de c7n, est un moteur de règles pour gérer les comptes et ressources de cloud public. Il permet aux utilisateurs de définir des politiques pour permettre une infrastructure cloud bien gérée, à la fois sécurisée et optimisée en coûts. Il consolide bon nombre des scripts ad hoc que possèdent les organisations en un outil léger et flexible, avec des métriques et des rapports unifiés.

Custodian peut être utilisé pour gérer les environnements AWS, Azure et GCP en garantissant une conformité en temps réel aux politiques de sécurité (comme le chiffrement et les exigences d'accès), aux politiques de tags, et à la gestion des coûts via la collecte des ressources inutilisées et la gestion des ressources en dehors des heures de travail.

Custodian prend également en charge l'exécution de politiques sur des actifs d'infrastructure as code afin de fournir des retours directement sur les postes de travail des développeurs ou dans les pipelines CI.

Les politiques Custodian sont écrites dans de simples fichiers de configuration YAML qui permettent aux utilisateurs de spécifier des politiques sur un type de ressource (EC2, ASG, Redshift, CosmosDB, PubSub Topic) et sont construites à partir d'un vocabulaire de filtres et d'actions.

Il s'intègre aux capacités serverless natives du cloud de chaque fournisseur pour assurer une application en temps réel des politiques avec un provisionnement intégré. Ou il peut être exécuté comme une simple tâche cron sur un serveur pour s'exécuter sur de grands parcs existants.

Cloud Custodian est un projet CNCF Incubating, mené par une communauté de centaines de contributeurs.

Fonctionnalités

  • Prise en charge complète des services et ressources de cloud public avec une riche bibliothèque d'actions et de filtres pour construire des politiques.
  • Exécuter des politiques sur des actifs d'infrastructure as code (terraform, etc).
  • Prend en charge le filtrage arbitraire sur les ressources avec des conditions booléennes imbriquées.
  • Exécuter une politique en mode simulation (dry run) pour voir ce qu'elle ferait.
  • Provisionne automatiquement des fonctions serverless et des sources d'événements ( AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP AuditLog & Pub/Sub, etc)
  • Sorties de métriques natives du fournisseur cloud sur les ressources ayant correspondu à une politique
  • Sorties structurées vers le stockage objet natif du cloud des ressources ayant correspondu à une politique.
  • Utilisation intelligente du cache pour minimiser les appels API.
  • Prend en charge l'utilisation multi-comptes/abonnements/projets.
  • Éprouvé - en production sur certains environnements cloud très volumineux.

Liens

Installation rapide

Custodian est publié sur pypi sous la forme d'une série de paquets avec le préfixe c7n, il est également disponible sous forme d'image docker.

$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n

Utilisation

La première étape pour utiliser Cloud Custodian (c7n) consiste à écrire un fichier YAML contenant les politiques que vous souhaitez exécuter. Chaque politique spécifie le type de ressource sur lequel la politique s'exécutera, un ensemble de filtres qui contrôlent les ressources qui seront affectées par cette politique, les actions que la politique effectuera sur les ressources correspondantes, et un mode qui contrôle la manière dont la politique s'exécutera.

Les meilleurs guides de démarrage sont les tutoriels spécifiques à chaque fournisseur cloud.

Pour un aperçu rapide, voici quelques exemples de politiques pour les ressources AWS.

  1. imposera qu'aucun bucket S3 n'ait l'accès inter-comptes activé.
  2. mettra fin à toute instance EC2 nouvellement lancée qui ne dispose pas d'un volume EBS chiffré.
  3. étiquettera toute instance EC2 qui ne possède pas les étiquettes suivantes « Environment », « AppId », et soit « OwnerContact » soit « DeptID » pour être arrêtée dans quatre jours.
policies:
 - name: s3-cross-account
   description: |
     Checks S3 for buckets with cross-account access and
     removes the cross-account access.
   resource: aws.s3
   region: us-east-1
   filters:
     - type: cross-account
   actions:
     - type: remove-statements
       statement_ids: matched

 - name: ec2-require-non-public-and-encrypted-volumes
   resource: aws.ec2
   description: |
    Provision a lambda and cloud watch event target
    that looks at all new instances and terminates those with
    unencrypted volumes.
   mode:
    type: cloudtrail
    role: CloudCustodian-QuickStart
    events:
      - RunInstances
   filters:
    - type: ebs
      key: Encrypted
      value: false
   actions:
    - terminate

 - name: tag-compliance
   resource: aws.ec2
   description: |
     Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.
   filters:
    - State.Name: running
    - "tag:Environment": absent
    - "tag:AppId": absent
    - or:
      - "tag:OwnerContact": absent
      - "tag:DeptID": absent
   actions:
    - type: mark-for-op
      op: stop
      days: 4

Vous pouvez valider, tester et exécuter Cloud Custodian avec la politique d'exemple à l'aide de ces commandes :

# Validate the configuration (note this happens by default on run)
$ custodian validate policy.yml

# Dryrun on the policies (no actions executed) to see what resources
# match each policy.
$ custodian run --dryrun -s out policy.yml

# Run the policy
$ custodian run -s out policy.yml

Vous pouvez également exécuter Cloud Custodian via Docker :

# Download the image
$ docker pull cloudcustodian/c7n
$ mkdir output

# Run the policy
#
# This will run the policy using only the environment variables for authentication
$ docker run -it \
  -v $(pwd)/output:/home/custodian/output \
  -v $(pwd)/policy.yml:/home/custodian/policy.yml \
  --env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
  cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml

Catégories