Escaneando el horizonte: Desplazando la seguridad a la izquierda en la cadena de suministro de software (3/12)
2024-12-14
Machine-translated — the English original is authoritative.
La ciberseguridad ha sido durante mucho tiempo reactiva, abordando a menudo las vulnerabilidades después del despliegue. Pero en la era de las aplicaciones nativas de la nube, este enfoque ya no es suficiente. Desplazar la seguridad a la izquierda, integrándola en las etapas más tempranas del desarrollo, permite a las organizaciones identificar y mitigar los riesgos antes de que afecten a la producción.
La cadena de suministro de software, que incluye el código fuente, los sistemas de compilación y las imágenes de contenedor, es un objetivo principal para los atacantes. Al integrar herramientas de escaneo directamente en los flujos de trabajo de desarrollo, las organizaciones pueden cumplir con los requisitos de NIS 2 y DORA para la gestión proactiva de riesgos y los pipelines de entrega de software seguros.
Por qué es importante desplazar la seguridad a la izquierda
Cuanto antes se detecte una vulnerabilidad, menos costoso y laborioso será corregirla. Desplazar la seguridad a la izquierda se alinea perfectamente con DORA, que enfatiza la resiliencia y las medidas proactivas. Por ejemplo, el escaneo del código fuente durante el desarrollo puede detectar problemas antes de que se propaguen aguas abajo, reduciendo los riesgos y manteniendo la continuidad operativa.
Cómo desplazar la seguridad a la izquierda con Aqua CNAPP
- Escaneo masivo de registros (registries):
- Conecte Aqua a todos los repositorios de código fuente y registros de contenedores.
- Configure escaneos programados para garantizar que cada nuevo artefacto sea analizado en busca de vulnerabilidades, configuraciones incorrectas y secretos.


-
Monitoreo continuo:
-
Aproveche los programas de extracción (pull) automatizados de Aqua para mantener los escaneos actualizados a medida que se confirten nuevos códigos o se empujan imágenes al registro.
-
Habilitación de los desarrolladores:
-
Integre los resultados del escaneo directamente en los flujos de trabajo de los desarrolladores utilizando herramientas CI/CD. Los mecanismos de retroalimentación de Aqua proporcionan información procesable, lo que permite a los desarrolladores corregir los problemas rápidamente sin salir de sus entornos.
-
Establecer líneas base:
-
Utilice los resultados iniciales del escaneo para crear una línea base de vulnerabilidades y configuraciones incorrectas. Priorice las correcciones para los problemas críticos mientras monitorea el progreso a lo largo del tiempo.
Ejemplo práctico: Automatización de escaneos en pipelines CI/CD
Una configuración típica de Aqua en un pipeline CI/CD, utilizando Github Actions en este caso, podría verse así:
name: allthingsclowd APP
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
env:
DOCKER_REPOSITORY: allthingscloud # name of Docker Hub ID
IMAGE_NAME: allthingsclowd-app
IMAGE_TAG: ${{ github.run_number }} # $GITHUB_RUN_NUMBER
jobs:
CI-Code:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Integrity pipeline
uses: aquasecurity/pipeline-enforcer-action@main
with:
aqua-key: ${{ secrets.AQUA_KEY }}
aqua-secret: ${{ secrets.AQUA_SECRET }}
verbose: true
- name: Aqua code scanning(SCA,IaC, Secrets/Sensitive Data, Pipeline file and SAST)
uses: docker://aquasec/aqua-scanner
with:
args: trivy fs --scanners config,vuln,secret --sast --reachability --package-json .
# To customize which severities to scan for, add the following flag: --severity UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
# To enable SAST scanning, add: --sast
# To enable npm/dotnet non-lock file scanning, add: --package-json / --dotnet-proj
env:
AQUA_KEY: ${{ secrets.AQUA_KEY }}
AQUA_SECRET: ${{ secrets.AQUA_SECRET }}
GITHUB_TOKEN: ${{ github.token }}
TRIVY_RUN_AS_PLUGIN: 'aqua'
CI-Build:
needs: CI-Code
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Integrity pipeline
uses: aquasecurity/pipeline-enforcer-action@main
with:
aqua-key: ${{ secrets.AQUA_KEY }}
aqua-secret: ${{ secrets.AQUA_SECRET }}
verbose: true
- name: Build application
run: echo Application has been succesfully built
- name: Build image container
run: |
sudo docker build -t $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG .
- name: Login to Aqua Registry
uses: docker/login-action@v1
with:
registry: registry.aquasec.com
username: ${{ secrets.AQUA_REGISTRY_USERNAME }}
password: ${{ secrets.AQUA_REGISTRY_PASS }}
- name: Scanning container image
run: |
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock registry.aquasec.com/scanner:2022.4 scan --register --registry "CI/CD_graham_images" --host ${{ secrets.AQUA_HOST }} --local $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG --token ${{ secrets.AQUA_TOKEN }} --layer-vulnerabilities --no-verify --html > .github/workflows/scan-output.html
- name: Docker Login & Push
run: |
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
docker push $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG
docker tag $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG $DOCKER_REPOSITORY/$IMAGE_NAME:latest
docker push $DOCKER_REPOSITORY/$IMAGE_NAME:latest
- name: SBOM Generation
run: |
export BILLY_SERVER=https://billy.codesec.aquasec.com
curl -sLo install.sh download.codesec.aquasec.com/billy/install.sh
curl -sLo install.sh.checksum https://github.com/argonsecurity/releases/releases/latest/download/install.sh.checksum
if ! cat install.sh.checksum | sha256sum ; then
echo "install.sh checksum failed"
exit 1
fi
BINDIR="." sh install.sh
rm install.sh install.sh.checksum
./billy generate \
--access-token "${{ github.token }}" \
--aqua-key "${{ secrets.AQUA_KEY }}" \
--aqua-secret "${{ secrets.AQUA_SECRET }}" \
--artifact-path "$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"
CD-Deploy_to_dev:
needs: CI-Build
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: interity Pipeline
uses: aquasecurity/pipeline-enforcer-action@main
with:
aqua-key: ${{ secrets.AQUA_KEY }}
aqua-secret: ${{ secrets.AQUA_SECRET }}
verbose: true
- name: Setting K8s context
uses: azure/k8s-set-context@v3
with:
method: kubeconfig
kubeconfig: ${{ secrets.KUBE_CONFIG_GRAZ }}
context: graz-dev-context
- name: Deploying to Dev
run: |
export IMAGE_CONTAINER="docker.io/$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"
sed -e "s#{{ IMAGE_CONTAINER }}#$IMAGE_CONTAINER#g" "./manifests/dev/deployment.yaml" |
kubectl apply -f -
kubectl apply -f ./manifests/dev/service.yaml
Esta automatización asegura que cada compilación sea escaneada en busca de vulnerabilidades de alta gravedad, proporcionando una retroalimentación inmediata a los desarrolladores.
Resumen
Desplazar la seguridad a la izquierda transforma la cadena de suministro de software de un punto caliente de vulnerabilidades en una fortaleza de resiliencia. Al integrar las herramientas de escaneo de Aqua en sus flujos de trabajo, no solo mejora la seguridad, sino que también se alinea con el enfoque proactivo de DORA hacia la resiliencia operativa. Cuanto antes actúe, más fuertes serán sus defensas.
Originally published on allthingscloud.eu (2024-12-14).