隆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!