Usar Pulumi para automatizar la integración de Snyk con Kubernetes para contenedores
Pas Apicella
9 de febrero de 2022
0 minutos de lecturaTodos hemos escuchado el término infraestructura como código (IaC); sin embargo, en este contexto, código no significa realmente código en el sentido de un lenguaje de programación. IaC suele referirse a la configuración de infraestructura mediante herramientas como Terraform, CloudFormation, Kubernetes YAML o plantillas de Azure Resource Manager, que en realidad definen cómo se creará la infraestructura. Estas configuraciones no ofrecen la flexibilidad ni la potencia de un lenguaje de programación moderno, así que IaC es código, pero no suele ser ese tipo de código.
En esta publicación del blog, te guiaremos por el proceso de usar Pulumi, una nueva herramienta de código abierto que permite a los desarrolladores escribir código en varios lenguajes, como JavaScript, TypeScript, Python y Go, para crear todo lo necesario para configurar la integración de Kubernetes en Snyk Container.
Descripción general de la integración de Snyk con Kubernetes
Snyk se integra con Kubernetes para que puedas importar y probar tus cargas de trabajo en ejecución, e identificar vulnerabilidades en las imágenes y configuraciones asociadas que podrían reducir su seguridad. Una vez importadas, Snyk sigue monitoreando esas cargas de trabajo e identifica otros problemas de seguridad a medida que se implementan nuevas imágenes y cambia la configuración de las cargas de trabajo.
¿Qué es Pulumi?
Pulumi es una herramienta de IaC de código abierto que utiliza los lenguajes de programación más populares para simplificar el aprovisionamiento y la administración de recursos en la nube.
Fundada en 2017, Pulumi cambió radicalmente la forma en que los equipos de DevOps abordan el concepto de infraestructura como código. En lugar de depender de lenguajes específicos de dominio, Pulumi permite a las organizaciones usar lenguajes de programación reales para aprovisionar y retirar infraestructura nativa de la nube.
Pulumi admite los siguientes lenguajes de programación:
Python
JavaScript
Go
TypeScript
Lenguajes de .NET (C#, F# y VB)
Cómo instalar la integración de Snyk con Kubernetes mediante Pulumi
¡Ahora viene lo divertido! Vamos a configurar Pulumi paso a paso y poner en marcha nuestras automatizaciones. Estos son los pasos que seguiremos:
Requisitos previos
Necesitarás una cuenta Business o Enterprise de Snyk para usar la integración de Kubernetes. Si no tienes una, puedes registrarte para obtener una prueba gratuita de Business por 14 días.
Implementaremos en Google Cloud, así que necesitarás una cuenta. Si no tienes una, regístrate gratis aquí. En cualquier caso, sigue estas instrucciones para conectar Pulumi con tu cuenta de Google Cloud.
En este ejemplo se supone que tienes la CLI
gclouden tu ruta. Se instala como parte del Google Cloud SDK.Asegúrate de tener Python 3, una cuenta de Pulumi y la CLI de Pulumi.
Ten en cuenta que Pulumi requiere que Python 3 sea la versión predeterminada en tu entorno. Si tienes Python 2 y Python 3 instalados, quizá debas crear un alias. Para verificarlo, ejecuta el siguiente comando y asegúrate de usar la versión más reciente de 3.x:
Paso 1: Configurar un ID de integración de Kubernetes desde la aplicación de Snyk
Inicia sesión en Snyk y selecciona la organización en la que quieres configurar automáticamente la integración de Kubernetes. Puede ser una organización vacía o una existente que ya tenga proyectos. Para este ejemplo, asegúrate de que la integración de Kubernetes aún no esté configurada en la organización que elijas.
Luego, haz clic en Integraciones > Kubernetes > Conectar. Si no tienes una cuenta Business o Enterprise de Snyk, no podrás realizar este paso.
Anota el ID de integración, porque lo necesitaremos en breve.

¡Eso es todo! Ya estás listo para configurar nuestra demostración de integración de Snyk con Kubernetes mediante la infraestructura como código de Pulumi. Pulumi hará lo siguiente:
Crear un clúster de GKE
Implementar el controlador de Snyk en el clúster0
Configurar la integración de Snyk con Kubernetes para importar automáticamente cargas de trabajo de K8s a Snyk
Implementar una carga de trabajo de ejemplo en el espacio de nombres
apples, según nuestro archivo de políticas Rego
Paso 2: Clonar el repositorio de ejemplo
Clona el siguiente repositorio de demostración de GitHub, como se muestra a continuación:
Después de clonar este repositorio, ejecuta cd para entrar en él y ejecuta los siguientes comandos…
Paso 3: Autenticarse en Google Cloud
Autentícate en Google Cloud mediante la autenticación local para implementar esta demostración. Hay otras formas de configurar Pulumi con Google Cloud, pero esta es la más sencilla para esta demostración:
Paso 4: Crear una nueva pila de Pulumi
Crea una pila nueva, que será un destino de implementación aislado para este ejemplo. Usa dev como nombre de ejemplo:
Paso 5: Configurar las variables de Pulumi requeridas
En muchos casos, las distintas pilas de un mismo proyecto necesitan valores diferentes. Por ejemplo, quizás quieras usar un tamaño diferente para tu instancia de Google Cloud Compute o una cantidad distinta de servidores para el clúster de Kubernetes entre las pilas de desarrollo y producción.
Los pares clave-valor de cada pila se almacenan en el archivo de configuración de la pila de tu proyecto, cuyo nombre se genera automáticamente como Pulumi.<stack-name>.yaml. Por lo general, puedes ignorar este archivo, aunque quizá quieras incluirlo en el control de versiones junto con el código fuente del proyecto.
Agrega las siguientes variables de configuración a nuestra pila, como se muestra a continuación:
De forma predeterminada, el clúster tendrá 3 nodos de tipo n1-standard-1. Este valor se puede configurar, así que, si queremos elegir 5 nodos de tipo n1-standard-2, podemos ejecutar estos comandos:
Por último, debemos configurar los ajustes necesarios para la integración de Snyk con Kubernetes, que se usan para configurar automáticamente dicha integración en nuestro clúster. Necesitamos el ID de integración de Kubernetes y el ID de organización de Snyk. En este ejemplo, son iguales:
Esto muestra cómo se pueden configurar las pilas de forma práctica. Incluso puedes cambiar estos valores después del aprovisionamiento.
Una vez hecho esto, tendrás un archivo Pulumi.dev.yaml con lo siguiente:
Paso 6: Implementar todo con pulumi up
La implementación de todo con el comando pulumi up aprovisiona todos los recursos de Google Cloud necesarios para la integración de Kubernetes con Snyk, incluido el clúster de GKE y el gráfico de Helm del controlador de Snyk. Luego, implementa una implementación de Kubernetes que ejecuta una aplicación de Spring Boot:
Esto te mostrará una vista previa, te pedirá confirmación e iniciará el proceso de aprovisionamiento de la demostración de integración de Snyk con Kubernetes:
Después de unos cinco minutos, el clúster estará listo, con el controlador de Snyk instalado y una implementación de carga de trabajo de ejemplo importada automáticamente a tu organización de Snyk:
A continuación, encontrarás algunas capturas de pantalla para verificar que todo se haya creado según lo previsto.
El clúster de GKE creado en Google Cloud:

La integración de Snyk con Kubernetes configurada automáticamente:

La carga de trabajo de ejemplo importada automáticamente desde el espacio de nombres apples:


Explorar la configuración
Veamos de cerca el archivo de Python __main__.py y entendamos cómo se instaló y configuró la integración de Snyk con Kubernetes.
El archivo de políticas Rego que usa el controlador de Snyk está codificado actualmente para importar solo las cargas de trabajo del espacio de nombres apples, siempre que no sean de tipo CronJob o Service. Puedes cambiarlo en __main__.py y usar un archivo externo en lugar de codificarlo directamente en el código de Python:
Este es el código de Python para instalar el controlador de Snyk mediante su gráfico de Helm. Observa que especificamos el repositorio del que se obtiene el gráfico de Helm, indicamos el ID de la organización de Snyk y agregamos el archivo de políticas personalizado anterior. Todo esto es necesario para instalar el controlador de Snyk en el clúster de GKE e integrarlo con Snyk.
El código de Python también implementó una aplicación de ejemplo de Spring Boot en nuestro espacio de nombres apples, que el controlador de Snyk importó automáticamente a la aplicación de Snyk. El código de Python para realizar esa implementación es el siguiente:
Paso 7: Obtener la configuración de Kubernetes
Desde aquí, puedes usar esta configuración en tu archivo ~/.kube/config o guardarla localmente y asignarla a la variable de entorno KUBECONFIG. Por supuesto, también funcionarán todos tus comandos habituales de Google Cloud.
Por ejemplo:
El controlador de Snyk instalado en el espacio de nombres snyk-monitor, junto con el mapa de configuración y el secreto que ahora administra Pulumi, como se muestra con algunos comandos de kubectl:
Paso 8: Destruir toda la configuración
Cuando termines, puedes destruir todos los recursos y la pila:
En resumen, aprendiste cómo usar Pulumi para instalar y configurar la integración de Snyk con Kubernetes. Esta integración te permite importar y probar tus cargas de trabajo en ejecución, e identificar vulnerabilidades en las imágenes y configuraciones asociadas que podrían reducir su seguridad.
Más recursos
Ahora que aprendiste lo fácil que es configurar la integración de Snyk con Kubernetes usando Pulumi y el lenguaje de programación Python, aquí tienes algunos enlaces útiles para comenzar tu recorrido por la seguridad de contenedores.
Documentación sobre la descripción general de la integración de Kubernetes
Documentación sobre la importación y eliminación automáticas de proyectos de cargas de trabajo de Kubernetes
Aprende Rego con el excelente curso tutorial de Styra
Protege la infraestructura desde el origen
Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.
