
cloud-custodian v0.9.52.0
Motor de reglas para seguridad en la nube, optimización de costos y gobernanza, DSL en yaml para políticas que consultan, filtran y ejecutan acciones sobre recursos.
Cloud Custodian (c7n)
Cloud Custodian, también conocido como c7n, es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios definir políticas para habilitar una infraestructura de nube bien gestionada, que sea segura y optimizada en costos. Consolida muchos de los scripts ad hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas e informes unificados.
Custodian se puede utilizar para gestionar entornos AWS, Azure y GCP asegurando el cumplimiento en tiempo real de políticas de seguridad (como requisitos de cifrado y acceso), políticas de etiquetado y gestión de costos mediante la recolección de basura de recursos no utilizados y la gestión de recursos fuera del horario laboral.
Custodian también admite la ejecución de políticas sobre activos de infraestructura como código para proporcionar retroalimentación directamente en las estaciones de trabajo de los desarrolladores o dentro de pipelines CI.
Las políticas de Custodian se escriben en archivos de configuración YAML simples que permiten a los usuarios especificar políticas sobre un tipo de recurso (EC2, ASG, Redshift, CosmosDB, PubSub Topic) y se construyen a partir de un vocabulario de filtros y acciones.
Se integra con las capacidades serverless nativas de la nube de cada proveedor para proporcionar cumplimiento en tiempo real de las políticas con aprovisionamiento integrado. O se puede ejecutar como un simple trabajo cron en un servidor para ejecutarse contra grandes flotas existentes.
Cloud Custodian es un proyecto Incubating de CNCF, liderado por una comunidad de cientos de contribuyentes.
Características
- Soporte integral para servicios y recursos de nube pública con una amplia biblioteca de acciones y filtros para construir políticas.
- Ejecutar políticas sobre activos de infraestructura como código (terraform, etc.).
- Admite filtrado arbitrario sobre recursos con condiciones booleanas anidadas.
- Realizar una simulación de cualquier política para ver qué haría.
- Aprovisiona automáticamente funciones serverless y fuentes de eventos ( AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP AuditLog & Pub/Sub, etc.)
- Salidas de métricas nativas del proveedor de nube sobre recursos que coincidieron con una política.
- Salidas estructuradas hacia almacenamiento de objetos nativo de la nube de qué recursos coincidieron con una política.
- Uso inteligente de caché para minimizar las llamadas a la API.
- Admite uso multi-cuenta/suscripción/proyecto.
- Probado en batalla - en producción en algunos entornos de nube muy grandes.
Enlaces
- Página principal
- Documentación
- Hoja de ruta del proyecto
- Instalación para desarrolladores
- Presentaciones
- Canal de YouTube
Instalación rápida
Custodian se publica en pypi como una serie de paquetes con el prefijo
c7n, también está disponible como imagen docker.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
Uso
El primer paso para usar Cloud Custodian (c7n) es escribir un archivo YAML que contenga las políticas que desea ejecutar. Cada política especifica el tipo de recurso sobre el que se ejecutará la política, un conjunto de filtros que controlan qué recursos se verán afectados por esta política, acciones que la política tomará sobre los recursos coincidentes, y un modo que controla cómo se ejecutará la política.
Las mejores guías de inicio son los tutoriales específicos de cada proveedor de nube.
Como un recorrido rápido, a continuación se muestran algunas políticas de ejemplo para recursos de AWS.
- aplicará que ningún bucket S3 tenga habilitado el acceso entre cuentas.
- terminará cualquier instancia EC2 recién lanzada que no tenga un volumen EBS cifrado.
- etiquetará cualquier instancia EC2 que no tenga las siguientes etiquetas "Environment", "AppId", y ya sea "OwnerContact" o "DeptID" para que sea detenida en cuatro días.
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
Puede validar, probar y ejecutar Cloud Custodian con la política de ejemplo con estos comandos:
# 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
También puede ejecutar Cloud Custodian mediante 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
# Run the policy (using AWS's generated credentials from STS)
#
# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to
# the docker container to support authentication to AWS using the same credentials
# credentials that are available to the local user if authenticating with STS.