
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.
Cloud Custodian (c7n)
Cloud Custodian, également connu sous le nom de c7n, est un moteur de règles pour la gestion des comptes et des ressources cloud publics. Il permet aux utilisateurs de définir des politiques pour une infrastructure cloud bien gérée, à la fois sécurisée et optimisée en termes de coûts. Il consolide les nombreux scripts ad hoc des 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 assurant une conformité en temps réel aux politiques de sécurité (comme le chiffrement et les exigences d'accès), aux politiques de balisage, et à la gestion des coûts via le nettoyage des ressources inutilisées et la gestion des ressources hors heures de travail.
Custodian prend également en charge l'exécution de politiques sur des actifs d'infrastructure en tant que code pour fournir un retour directement sur les postes de travail des développeurs ou dans les pipelines CI.
Les politiques Custodian sont écrites dans des fichiers de configuration YAML simples qui permettent aux utilisateurs de spécifier des politiques sur un type de ressource (EC2, ASG, Redshift, CosmosDB, Topic Pub/Sub) 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é. Il peut également être exécuté comme une simple tâche cron sur un serveur pour s'exécuter sur de grandes flottes existantes.
Cloud Custodian est un projet CNCF en phase d'incubation, dirigé par une communauté de centaines de contributeurs.
Fonctionnalités
- Prise en charge complète des services et ressources cloud publics avec une riche bibliothèque d'actions et de filtres pour créer des politiques.
- Exécution de politiques sur des actifs d'infrastructure en tant que code (terraform, etc.).
- Prise en charge du filtrage arbitraire des ressources avec des conditions booléennes imbriquées.
- Simulation de toute politique pour voir ce qu'elle ferait.
- Provisionnement automatique 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 correspondant à une politique.
- Sorties structurées dans le stockage d'objets natif du cloud des ressources correspondant à une politique.
- Utilisation intelligente du cache pour minimiser les appels API.
- Prise en charge multi-compte/abonnement/projet.
- Éprouvé en production sur des environnements cloud très volumineux.
Liens
- Page d'accueil
- Documentation
- Feuille de route du projet
- Installation pour les développeurs
- Présentations
- Chaîne YouTube
Installation rapide
Custodian est publié sur pypi sous forme de série de packages avec le préfixe c7n, et est également disponible en tant qu'image docker.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
Utilisation
La première étape pour utiliser Cloud Custodian (c7n) est d'é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 affectées par cette politique, les actions que la politique entreprendra sur les ressources correspondantes, et un mode qui contrôle comment la politique s'exécutera.
Les meilleurs guides de démarrage sont les tutoriels spécifiques au fournisseur cloud.
En guise de rapide illustration, voici quelques exemples de politiques pour les ressources AWS.
- appliquera qu'aucun bucket S3 n'ait l'accès cross-compte activé.
- terminera toute nouvelle instance EC2 qui n'a pas de volume EBS chiffré.
- marquera toute instance EC2 qui n'a pas les balises "Environment", "AppId", et soit "OwnerContact" soit "DeptID" pour être arrêtée dans quatre jours.
policies:
- name: s3-cross-account
description: |
Vérifie les buckets S3 avec un accès cross-compte et
supprime l'accès cross-compte.
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: |
Provisionne une lambda et une cible d'événement CloudWatch
qui examine toutes les nouvelles instances et termine celles avec
des volumes non chiffrés.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
Planifie une ressource qui ne respecte pas les politiques de conformité des balises pour être arrêtée dans quatre jours. Notez qu'une politique distincte utilisant le filtre `marked-for-op` est nécessaire pour arrêter réellement les instances après quatre jours.
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 l'exemple de politique à l'aide de ces commandes :
# Valider la configuration (notez que cela se produit par défaut lors de l'exécution)
$ custodian validate policy.yml
# Exécution à vide (dryrun) des politiques (aucune action exécutée) pour voir quelles ressources
# correspondent à chaque politique.
$ custodian run --dryrun -s out policy.yml
# Exécuter la politique
$ custodian run -s out policy.yml
Vous pouvez également exécuter Cloud Custodian via Docker :
# Télécharger l'image
$ docker pull cloudcustodian/c7n
$ mkdir output
# Exécuter la politique
#
# Cela exécutera la politique en utilisant uniquement les variables d'environnement pour l'authentification
$ 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