Protege tu aplicación desde Argo CD hasta Kubernetes
JJ Ng
Pas Apicella
12 de octubre de 2022
0 minutos de lecturaGitOps es un marco popular para administrar y proteger el pipeline de desarrollo de aplicaciones. Para muchas personas que han iniciado un recorrido con GitOps, surge una pregunta frecuente: «¿Cómo puedo proteger mi pipeline si todo está automatizado?»
El marco de GitOps es un concepto en el que todos los cambios o commits de código se realizan mediante Git, que luego activa un pipeline automatizado para compilar e implementar aplicaciones en Kubernetes. Como los equipos de desarrollo y seguridad tienen pocos puntos de contacto en el pipeline, es necesario exigir que la seguridad garantice que las aplicaciones implementadas tengan la menor cantidad posible de vulnerabilidades.
En este blog se explica cómo Snyk puede brindar seguridad para aplicaciones en GitOps, con un enfoque en una herramienta popular: Argo CD. En este escenario, Snyk ejecuta un análisis de IaC para garantizar que la aplicación que se va a implementar sea segura antes de la implementación y detiene la compilación si no lo es. Snyk también puede monitorear automáticamente las aplicaciones implementadas en distintos espacios de nombres de Kubernetes.
¿Qué es Argo CD?
Argo CD es una herramienta de entrega continua (CD) declarativa y nativa de Kubernetes que monitorea un repositorio y detecta cambios o «desviaciones». Luego aplica los cambios necesarios a la configuración del clúster de Kubernetes.
Cómo configurar Argo CD para que funcione con Snyk
Esta demostración muestra cómo iniciar tu proceso de GitOps con Argo CD y usar Snyk para brindar cobertura de seguridad a la aplicación y monitorear las cargas de trabajo de Kubernetes. Sigue estos pasos:
Requisitos previos
Se requiere una cuenta de Snyk con un plan Business o Enterprise para ejecutar pruebas de Snyk en Argo CD e importar automáticamente cargas de trabajo de Kubernetes a Snyk. Si no tienes una cuenta de Snyk, puedes iniciar una prueba gratis de nuestro plan Business.
Una instancia de Argo CD en ejecución en tu clúster de Kubernetes. Encontrarás los detalles de configuración en la documentación de Argo CD.
Un clúster de Kubernetes en ejecución (por ejemplo, EKS, AKS, GKE, Red Hat OpenShift o cualquier distribución compatible).
Paso 1: Clona tu repositorio de Git
En esta demostración se usa una aplicación de encuestas en Flask cuyo código fuente está alojado en https://github.com/jiajunngjj/flask-polling-app. Clona el repositorio en tu propio entorno.
git clone https://github.com/jiajunngjj/flask-polling-app.git
Paso 2: Configura Argo CD
Agrega tu clúster de Kubernetes a Argo CD:
argocd cluster add CONTEXTNAME
En esta demostración, Argo CD se encuentra dentro de este clúster de Kubernetes, así que se conecta automáticamente mediante el nombre de host interno de K8s (kubernetes.default.svc):

A continuación, asegúrate de agregar también a Argo CD el repositorio mencionado anteriormente:

Cuando el repositorio se haya agregado correctamente, verás algo como esto:

Paso 3: Implementa la aplicación con Argo CD
Crea un espacio de nombres de Kubernetes para implementar la aplicación. En este caso, crearemos el espacio de nombres argocd-demo para ejecutar flask-polling-app:
kubectl create ns argocd-demo
Usa la línea de comandos de Argo CD para crear la aplicación (o hazlo desde la interfaz de usuario de Argo CD después de agregar el repositorio):
argocd app create snyk-demo \ --repo https://github.com/jiajunngjj/flask-polling-app.git \ --path argocd \ --dest-server https://kubernetes.default.svc \ --dest-namespace argocd-demo
A continuación, se explica el comando:
repo — Repositorio de administración del código fuente (SCM)
path — Directorio que contiene el manifiesto de Kubernetes
dest-server — Clúster de Kubernetes
dest-namespace — Espacio de nombres de Kubernetes en el que se implementará la aplicación
Después de crear la aplicación en Argo CD, verás el estado OutOfSync en la aplicación creada en la interfaz de usuario:


A continuación, ejecuta el comando sync de Argo CD para implementar la aplicación:
argocd app sync snyk-demo
Luego deberías ver la aplicación en la interfaz de usuario de Argo CD:

También deberías ver que la aplicación comenzó a implementarse en el espacio de nombres de Kubernetes argocd-demo:
Paso 4: Crea un objeto secreto de Kubernetes para tu token de Snyk
Después de agregar correctamente la aplicación a Argo CD, es hora de incluir la prueba de Snyk IaC en el pipeline de Argo CD. Obtén tu token de Snyk desde la aplicación de Snyk y crea un objeto secreto en el espacio de nombres argocd-demo:
Paso 5: Crea un hook de recurso PreSync de Argo CD
Crea un archivo llamado snyk-scan.yaml en el mismo directorio que los archivos YAML de implementación (argocd) y agrega el siguiente contenido:
Edita polling-app.yaml para activar la detección de desviaciones de configuración (en este ejemplo, se cambia el número de réplicas a «1»):
Ejecuta comandos de Git para enviar el archivo al repositorio:
Paso 6: Espera a que Argo CD detecte la desviación de configuración
Cuando Argo CD detecta la desviación de configuración, comienza a sincronizarse para alcanzar el nuevo estado deseado. Puedes ver que el análisis de Snyk IaC se activa antes de implementar la aplicación:

También puedes ver snyk-iac-scan en ejecución como un pod:
Por último, puedes ver en la interfaz de usuario de Argo CD que hay un trabajo snyk-iac-scan:

Paso 7: Integra con Kubernetes
Snyk se integra con Kubernetes y te permite importar y probar tus cargas de trabajo en ejecución para identificar vulnerabilidades en las imágenes asociadas y detectar configuraciones que podrían reducir su seguridad. Una vez importadas, Snyk monitorea continuamente esas cargas de trabajo e identifica y prioriza problemas de seguridad a medida que se implementan nuevas imágenes y cambian las configuraciones de las cargas de trabajo.
Una ventaja es que no es necesario actualizar los archivos YAML de implementación, ya que todo se hace automáticamente mediante Snyk Controller si configuras la importación automática (como se explica en la documentación de Snyk). Snyk admite las siguientes cargas de trabajo:
Implementaciones
ReplicaSets
DaemonSets
StatefulSets
Trabajos
CronJobs
ReplicationControllers
Pods
Otras publicaciones del blog de Snyk muestran cómo instalar varios clústeres de Kubernetes de Snyk en un solo clúster y cómo usar Pulumi para automatizar la integración de Snyk con Kubernetes.
Cuando Argo CD haya implementado tu aplicación, la integración de Snyk con Kubernetes importará el análisis de esa carga de trabajo a la plataforma, sin intervención manual:


Resumen
En esta demostración se usa el hook de recursos de Argo CD para activar un análisis de Snyk IaC cada vez que se detecta un cambio en la configuración. De esta manera, puedes exigir seguridad en un flujo de trabajo de GitOps y usar Snyk para detectar vulnerabilidades y detener el flujo de trabajo cuando una vulnerabilidad detectada supere el umbral de gravedad definido. Así, el código vulnerable nunca llega al entorno de producción.
Más información
Ahora que aprendiste a configurar una prueba de Snyk IaC con Argo CD y a monitorear cargas de trabajo en Kubernetes, consulta estos recursos para obtener información sobre cómo proteger aún más el ciclo de vida del desarrollo de software:
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.
