¡Desata el Poder de la Seguridad con DevSecOps! 🔐

¡Desata el Poder de la Seguridad con DevSecOps! 🔐

🚀 Despliega el Juego 2048 en Docker con Jenkins CI/CD, apuntando hacia aplicaciones más seguras.

Jenkins lidera el camino por ser open source en el universo CI/CD, mientras desplegamos nuestra aplicación y conquistamos los contenedores.

Este blog es el fuego para tu próxima odisea tecnológica.

¡Prepárate para romper barreras y dejar huella!

Encuentra el poder en nuestro Repositorio en GitHub: [game-cicd-2048] 💥🚀

Sobre el Juego

Su renombre resuena en todos los rincones, y lo fascinante es que incluso la documentación de AWS, lo destaca en diversos casos de uso (https://docs.aws.amazon.com/). ¡La magia no termina ahí!

Utiliza esta imagen desde el Repositorio público de AWS public.ecr.aws/l6m2t8p7/docker-2048:latest

En nuestra búsqueda del código, surge la pregunta crucial: ¿es vulnerable o no?

La seguridad es la piedra angular de nuestra misión, y es por eso que incorporamos DevSecOps en todo el ciclo de vida del software. Más que solo código, estamos forjando seguridad en cada línea de código.

Is my code vulnerable? - Skillfield

Sobre Jenkins

Jenkins es una plataforma de automatización de código abierto que facilita la implementación continua (CI) y la entrega continua (CD) en el desarrollo de software.

Ofrece una interfaz fácil de usar para la creación, prueba y despliegue automatizado de aplicaciones. Jenkins integra diversas herramientas y plugins, permitiendo la automatización de tareas repetitivas, la gestión de flujos de trabajo y la generación de informes detallados.

Su flexibilidad y extensibilidad hacen de Jenkins una herramienta central en entornos de desarrollo ágiles y colaborativos, impulsando la eficiencia y calidad en el ciclo de vida del software.

Oficial [https://www.jenkins.io/]

Documentación [https://www.jenkins.io/doc/]

Adopción de DevSecOps

La integración de la seguridad en DevSecOps es esencial para lograr un desarrollo rápido, seguro y eficiente. Esta metodología se adapta al entorno actual, donde la seguridad ya no puede ser considerada como una fase separada, sino que debe ser un componente integral de todo el proceso de desarrollo de software.

What is DevSecOps and What Are Its Business Benefits?

DevSecOps no es simplemente una práctica, es una mentalidad transformadora que coloca a la seguridad en el corazón mismo del desarrollo, asegurando que cada línea de código sea una barrera infranqueable contra las amenazas digitales. by Roxs

Algunos pasos clave para lograr esta integración

  1. Análisis estático del código (SAST)

  2. Pruebas de seguridad dinámica (DAST)

  3. Análisis de composición de software (SCA)

  4. Escaneo de contenedores

  5. Automatización de políticas de seguridad

  6. Gestión de secretos y credenciales

  7. Monitorización y registro de seguridad

  8. Capacitación y concienciación

Al integrar estas prácticas en tus pipelines de Jenkins, puedes fortalecer la seguridad en todas las etapas del desarrollo de software y garantizar la entrega continua de aplicaciones más seguras.

Entonces qué hacemos??

🔥🔥 Roxs al rescate 🔥🔥🔥

¡Vamos a sumergirnos en el recorrido práctico, exploraremos cómo instalar Jenkins y potenciar nuestro proceso de CI/CD con herramientas de seguridad, todo en el marco de DevSecOps. Garantizando despliegues seguros y eficientes en cada paso del camino.

🛠️ Los Pasos.

Estaremos usando contenedores🐳🐳 🔥

  • Paso 1 — 🚀 Instalar Jenkins

  • Paso 2 — 🛠️ Repositorio del juego 2048

  • Paso 3 — 🔐 Asegurar los Secretos en la Bóveda de Jenkins

  • Paso 4 — 🔒 Herramientas de Seguridad.

  • Paso 5 — 🛠️ Crear un Proyecto de "Pipeline" en Jenkins

  • Paso 6 — 🧩 Integrando las Herramientas de Seguridad.

  • Paso 7 — 🐳 Construir y Publicar la Imagen de Docker [DockerHub].

  • Paso 8 — 🚀 Integración End to End.

  • Paso 9 — 🛑 CleanUP.

PASO-1: ¡Despliega Jenkins con Estilo! 🚀

Descubre cómo simplificar la instalación de Jenkins utilizando Docker Compose.

Simples comandos... docker-compose up -d información extra

Si quieres tener personalizado la imagen de Jenkins e instalar el cliente de docker puedes usar este Dockerfile

Te dejo esta imagen si no quieres construir una propia roxsross12/jenkins:v2

¿Pero...? hay que desbloquear

docker logs jenkins

ubuntu $ docker logs jenkins
Jenkins initial setup is required. An admin user has been created and a 
password generated.
Please use the following password to proceed to installation:
caacbbce1f66475dacafea4f03b4f2ce

Alternativa usando docker exec entramos en el contenedor

docker exec -it jenkins /bin/bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'

si quieres saber más sobre la instalación y que cosas podemos customizar, recuerda que tienes la documentación oficial https://www.jenkins.io/doc/book/installing/docker/

Para acceder desde el Navegador: http://localhost:8080/ ó http://IP:8080/

Algo que identifica a Jenkins es el uso de complementos/plugins

Para comenzar te recomiendo estos, el blue-ocean tiene una linda experiencia visual.

PASO-2: ¡Prepara el Repositorio! 🚀

Clonar el repositorio [GITHUB](https://github.com/roxsross/game-cicd-2048)

🔔 Recuerda darle una estrella al repo, también podrías folkearlo

PASO-3: ¡Protege los secretos en Jenkins! 🚀

Proteger datos sensibles en la bóveda de Jenkins es crucial para garantizar la seguridad de tus proyectos y la información confidencial.

La Bóveda de Jenkins, o "Jenkins Credential Store", es un sistema integrado que permite almacenar de forma segura credenciales, claves y otros datos sensibles que son necesarios para la ejecución de trabajos en Jenkins.

¿Que datos proteger?

  • Claves de Accesos a DockerHub

  • Claves de Accesos a Github [Repositorios Privados]

  • Cualquier otro datos que consideren sensibles, llaves, token etc.

¿Como Configurarlo?

  • Ve a "Manage Jenkins" -> "Manage Credentials" en el menú principal.

  • Haz clic en "(global)" si deseas que la credencial sea global o selecciona un elemento específico donde aplicará esta credencial.

  • En el menú de la izquierda, selecciona "Credentials" y haz clic en "Global credentials (unrestricted)".

  • Haz clic en "Add Credentials" en el menú izquierdo.

  1. Selecciona el Tipo de Credencial:

    • Elige el tipo de credencial adecuado para tu caso (por ejemplo, Usuario y Contraseña, Clave Secreta, Token, etc.).
  2. Proporciona los Detalles de la Credencial:

    • Completa los campos requeridos según el tipo de credencial seleccionado.
  3. Guardar la Credencial:

    • Haz clic en "OK" o "Save" para guardar la nueva credencial.

¿Como Usarlo?

pipeline {
    agent any

    environment {
        MI_CREDENCIAL = credentials('ID_DE_TU_CREDENCIAL')
    }

    stages {
        stage('Ejemplo de Build') {
            steps {
                    echo "Credencial como variable: ${MI_CREDENCIAL}"
                }
            }
        }
    }
}

PASO-4: ¡🔒 Sobre Herramientas de Seguridad.! 🚀

La combinación de SAST, SCA y DAST en un enfoque de DevSecOps y CI/CD contribuye a un desarrollo más seguro y una entrega continua libre de vulnerabilidades críticas.

Análisis Estático de Seguridad (SAST):

Identificar vulnerabilidades en el código fuente antes de la ejecución.

Análisis de Composición de Software (SCA):

Identificar y gestionar las dependencias y componentes de terceros para evitar vulnerabilidades conocidas.

Seguridad Dinámica (DAST):

Evaluar la seguridad de las aplicaciones en tiempo de ejecución mediante pruebas activas.

🚨**DAST lo vamos a ver en una próxima entrada del blog ** *

Herramientas... un montón...

Es importante conocer que integrar, por ello te recomiendo este listado

Todas estas herramientas la usaremos desde MODO contenedor

SECRETS: Gitleaks

SAST:Semgrep , Horusec

SCA: Snyk, NPM Audit

Container Security Tools: Trivy

Es importante usar herramientas que nos generen reportes, ya que sin ellas, no podemos evaluar las vulnerabilidades

PASO-5: ¡Crear un Proyecto "Pipeline" en Jenkins! 🚀

Documentación de referencia: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/

Breves Pasos:

Un Jenkinsfile es un archivo de texto que define el flujo de trabajo de tu pipeline en Jenkins.

  1. Accede al Repositorio:

    • Clona o accede al repositorio para el cual deseas crear el Jenkinsfile.
  2. Crea un Nuevo Archivo:

    • Crea un nuevo archivo en la raíz del repositorio y nómbralo Jenkinsfile. Puedes hacerlo a través de la interfaz web del servicio de control de versiones (por ejemplo, GitHub, GitLab, Bitbucket).
  3. Edita el Jenkinsfile:

    • Abre el archivo Jenkinsfile con un editor de texto o un IDE y comienza a definir tu pipeline. Puedes utilizar la sintaxis Declarative o Scripted de Jenkins Pipeline, según tus preferencias y necesidades. Aquí hay un ejemplo simple en sintaxis Declarative:
  4. Guarda y Comitea el Archivo:

    • Guarda los cambios y realiza un commit en tu repositorio con el nuevo archivo Jenkinsfile.
  5. Configura Jenkins:

    • Asegúrate de que tienes un servidor Jenkins configurado y accesible.

    • Crea un nuevo proyecto o actualiza un proyecto existente en Jenkins para que apunte al repositorio que contiene el Jenkinsfile. En la configuración del proyecto, selecciona la opción de "Pipeline script from SCM" y elige el sistema de control de versiones que estás utilizando (Git, por ejemplo).

  6. Especifica la Ruta al Jenkinsfile:

    • Indica la ruta al Jenkinsfile en la configuración del proyecto.
  7. Guarda la configuración del proyecto en Jenkins y ejecútalo.

    • Jenkins leerá automáticamente el Jenkinsfile desde el repositorio y ejecutará el pipeline según la definición proporcionada en el archivo.

PASO-6: ¡🔒 Integrando las Tools de Seguridad en el Jenkinsfile.! 🚀

Le damos Run al Pipeline, en mi caso al Pipeline [game-cicd-2048]

PASO-7: ¡Construir y Publicar la Imagen de Docker [DockerHub]! 🚀

Nos enfocamos en principio en las herramientas de seguridad, pero también debemos manejar lo que es la construcción de la imagen, publicación y escaneo.

PASO-8: ¡Ahora si vamos con el End to End! 🚀

Saltaron las Vulnerabilidades, pero te dejo avanzar, gracias a esto... ⚠️ catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')

Vamos a inyectarle 🐛🐛 algo para que explote por todos lados.

Vamos a correr de vuelta el pipeline

Están apareciendo cosillas 🤔 xD

¿Qué deberíamos hacer con los reportes? ¿Los guardamos y...?

Mantente atento para descubrirlo en nuestra próxima entrada del blog. ¡Prepárate que se viene mas devsecops! 🚀

Video Tutorial

Gracias por sumergirte en este viaje de conocimiento.

Si este blog encendió una chispa de inspiración, ¡ilumina tu día con un aplauso 👏 y sígueme en LinkedIn y GitHub para más destellos de aprendizaje y colaboración emocionante!

Conéctate en LinkedIn:https://www.linkedin.com/in/roxsross/

Descubre más en GitHub: https://github.com/roxsross

Mi Web: roxs.295devops.com

¡Hasta la próxima ola del conocimiento!