# Cloud Custodian el CSPM Open Source

Muchas veces me consultan sobre el Cloud, como asegurarlo. Siempre aconsejo herramientas como [Prisma Cloud](https://www.paloaltonetworks.com/prisma/cloud) o [AquaSec](https://www.aquasec.com/), dependiendo la inversion que se quiera o pueda erogar. Ahora: ¿Existen alternativas?, la respuesta es Si! Para eso existe [Cloud Custodian](https://cloudcustodian.io/).

Primero, *¿Que es un CSPM o Cloud Security Posture Managment?* Es un conjunto de herramientas, practicas que nos dan una mano para evaluar, identificar y resolver errores de configuración, algún desvio en el cumplimiento o riesgos de seguridad. Hoy, por hoy, una herramienta fundamental en todo ambiente Cloud.

## ¿Que beneficios acarrea implementar un CSPM?

Tareas:

* Realización de escaneo continuo y determinación de la postura de seguridad en tiempo real.
    
* Permite a una organización obtener una visibilidad continua en todo el [infraestructurade nube.](https://geekflare.com/es/cloud-infra-app-monitoring/)
    
* [Detección auto](https://geekflare.com/es/cloud-infra-app-monitoring/)mática y corrección de configuraciones incorrectas y problemas de cumpl[imiento](https://geekflare.com/es/cloud-infra-app-monitoring/)
    
* [Realizar eva](https://geekflare.com/es/cloud-infra-app-monitoring/)luaciones comparativas y auditorías de cumplimiento para garantizar que la o[rganización siga las me](https://geekflare.com/es/cloud-infra-app-monitoring/)jores prácticas.
    

Tipicamente actua de la siguiente manera:

* Supervise continuamente el entorno y los servicios de la nube y proporcione una visibilidad completa de los componentes y las configuraciones.
    
* Compare las configuraciones y políticas de la nube con un conjunto de pautas aceptables.
    
* Detecte errores de configuración y cambios de política.
    
* Identificar amenazas existentes, nuevas y potenciales.
    
* Corrija las configuraciones incorrectas en función de las reglas preconstruidas y los estándares de la industria. Esto ayuda a reducir los riesgos debido a errores humanos que podrían resultar en configuraciones incorrectas.
    

## ¿Que es Cloud Custodian?

Lanzado en 2016, soportado por CNCF, esta herramienta escrita en Python fue desarrollada por la gente de Capital One. Basicamente es un motor de reglas para el manejo de cuentas de Cloud o el gobierno de recursos. Utiliza manifiestos en YAML que componen la politica a aplicar. Vamos a realizar algunos ejemplos, pero tienen que tener en mente que consta de Recursos O Servicios, donde vamos a realizar la magia, Filtros & Acciones. Puede sacarnos dolores de cabeza en varios dominios. Entre las características mas interesantes nos encontramos que es Agentless & multicloud.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401116462/950eceb3-7a13-4600-857a-74dece5650c1.webp align="center")

## Prueba de Concepto

Vamos a poner manos a las obra. El primero caso de uso, que quiero hacer con uds. es el siguiente. Vamos a trabajar sobre AWS, apagando los ambientes de testing. Algo que la gente de FinOps, nos agradecera a la hora del billing.

## Instalar Cloud Custodian

Yo uso Mac, en este caso, por ende:

```yaml
python3 -m venv custodian
source custodian/bin/activate
pip install c7n
```

Si vas a trabajar con otra plataforma, te dejo este [enlace](https://cloudcustodian.io/docs/quickstart/index.html#install-cc) a la documentación oficial.

## Creación de Usuario en AWS & Rol

Vamos a crear nuestro user cloudcustodian, darle acceso a EC2 y generar nuestras credenciales programáticas para accesar a AWS. Si no sabes como crear usuarios e instalar el cliente programático de AWS, revisa los links de fuentes.

*Para fines prácticos, agregue le Rol AmazonEC2FullAccess, algo que tienen que revisar por el principio de "Least Privilege".*

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401148559/8c24dd3c-1a28-48e1-a41a-1780df869563.png align="center")

Vamos a preparar el ambiente, generando una instancia EC2 con el tag de testing. Con eso estaremos listo para probar nuestra primer politica.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401168943/7f424c8e-91c7-4853-b888-0be2f4a98504.png align="center")

Ahora vamos a revisar nuestra politica. Pero antes quiero mostrarle los comandos para conocer sobre que recursos o servicios podemos trabajar, los filtros que podemos utilizar y las acciones. Para ello utilizaremos los comandos **custodian schema, custodian schema ec2.filters & custodian schema ec2.actions**.

Vamos a la politica, para ello creamos **ec2-policy.yaml**. Es muy sencilla de leer, primero el recurso que queremos modificar, luego el filtro y por ultimo la acción. En nuestra politica no solo paramos la instancia, si no tambien que renombramos el tag.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401189027/522673a5-1a77-4fec-b160-f36779f6ba88.png align="center")

Vamos a correr la politica, pero antes vamos a validarla. Para ello usaremos estos dos comandos: custodian validate y custodian run. En el run agregue el directorio para el output y tambien el flag --verbose para ver el paso a paso o en su defecto debbugear.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401214456/49fdff92-f1ba-40e8-9b7f-b3af99a16b1a.png align="center")

Uala! Revisamos los pasos, primero comenta que encontro 1 recurso con esa condición, después paro la instancia y luego modifico el tag. Vamos a revisarlo!

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401241227/7c08bfee-af6c-4a43-877c-6a416196b87c.png align="center")

Vamos a revisar otro caso de uso y agregar una integración con Slack via c7n-mailer. La arquitectura es la siguiente [c7n-mailer](https://cloudcustodian.io/docs/tools/c7n-mailer.html) crea una **Lamdba** Function y una **CloudWatch Event Rule** en tu cuenta de **AWS**. Esa regla se dispara cada 5 minutos. La Lambda leerá el SQS para ver si tenemos o no mensajes, procesarlo y enviar la notificación. Si llegaste hasta aca es por que sabes que vamos a tener que agregar nuevos parametros a la politica del tipo **notify**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401266206/592f245b-0f91-4b43-abcd-3f1644295a29.png align="center")

Vamos a ejecutar:

```yaml
pip install c7n-mailer
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401287061/594c2d9d-6ee0-4a05-8a74-ec7ad0387102.png align="center")

Generamos nuestro archivo **mailer.yaml** con la dirección de la cola SQS y a nuestro usuario le agregamos propiedades para que pueda leer la cola. Nos deberia quedar algo asi.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401309806/d65cb415-9cd4-4cd5-8f79-488e8c7a06ff.png align="center")

Ahora vamos actualizar la configuración con el siguiente comando.

```yaml
c7n-mailer --config mailer.yaml --update-lambda
```

Es importante que el Rol tenga los derechos sobre **Lambda, SQS, Cloudwatch** para poder funcionar. Revisamos nuestra lambda!

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401339819/9069b4ce-5282-4de0-b02e-931931df02e4.png align="center")

Vamos agregar la acción a nuestra politica.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401371869/beb74b99-1a8d-4b92-aaa3-7759557e633c.png align="center")

Ya tenemos avisos en nuestro channel de Slack. Aca podes saber como [generar un webhook](https://api.slack.com/messaging/webhooks).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707401381048/46088c1d-3862-453f-9a45-6c5c7b1330d7.png align="center")

Las posibilidades son infinitas, solo revisar los documentos que hay en internet o la misma web oficial. Custodian puede trabajar con Security Hub, integrar con notificaciones o por que no generar un Dashboard en nuestro SIEM. A revisar!

## Fuentes

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id\_users\_create.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)

[https://geekflare.com/es/cloud-security-posture-management/https://dev.to/sivatharsan/multi-account-security-governance-as-code-with-cloud-custodian-on-aws-organization-hl8](https://geekflare.com/es/cloud-security-posture-management/https://dev.to/sivatharsan/multi-account-security-governance-as-code-with-cloud-custodian-on-aws-organization-hl8)

[https://medium.com/@abhinav\_\_singh/slack-integration-with-cloud-custodian-66d33ae19908](https://medium.com/@abhinav__singh/slack-integration-with-cloud-custodian-66d33ae19908)
