Scanning the Horizon: Spostare la Sicurezza a Sinistra nella Catena di Approvvigionamento del Software (3/12)
2024-12-14
Machine-translated — the English original is authoritative.
La cybersecurity è stata a lungo reattiva, intervenendo spesso sulle vulnerabilità dopo il deployment. Ma nell'era delle applicazioni cloud-native, questo approccio non è più sufficiente. Spostare la sicurezza a sinistra, integrandola nelle prime fasi dello sviluppo, consente alle organizzazioni di identificare e mitigare i rischi prima che impattino la produzione.
La catena di approvvigionamento del software, che include il codice sorgente, i sistemi di build e le immagini container, è un obiettivo primario per gli attaccanti. Integrando strumenti di scansione direttamente nei flussi di lavoro di sviluppo, le organizzazioni possono soddisfare i requisiti di NIS 2 e DORA per la gestione proattiva dei rischi e pipeline di consegna del software sicure.
Perché Spostare a Sinistra è Importante
Più presto viene rilevata una vulnerabilità, meno costoso e dispendioso in termini di tempo sarà risolverla. Spostare la sicurezza a sinistra si allinea perfettamente con DORA, che enfatizza la resilienza e le misure proattive. Ad esempio, la scansione del codice sorgente durante lo sviluppo può individuare problemi prima che si propaghino a valle, riducendo i rischi e mantenendo la continuità operativa.
Come Spostare a Sinistra con Aqua CNAPP
- Scansione in Batch dei Registry:
- Connettere Aqua a tutti i repository di codice sorgente e ai registry di container.
- Impostare scansioni pianificate per garantire che ogni nuovo artefatto venga analizzato per vulnerabilità, configurazioni errate e segreti.


-
Monitoraggio Continuo:
-
Sfruttare gli orari di pull automatizzati di Aqua per mantenere le scansioni aggiornate man mano che nuovo codice viene commitato o le immagini vengono pushate nel registry.
-
Abilitazione degli Sviluppatori:
-
Integrare i risultati della scansione direttamente nei flussi di lavoro degli sviluppatori utilizzando strumenti CI/CD. I meccanismi di feedback di Aqua forniscono informazioni attuabili, consentendo agli sviluppatori di risolvere i problemi rapidamente senza lasciare i propri ambienti.
-
Stabilire delle Linee Base:
-
Utilizzare i risultati iniziali della scansione per creare una linea base di vulnerabilità e configurazioni errate. Prioritizzare le correzioni per i problemi critici monitorando i progressi nel tempo.
Esempio Pratico: Automatizzare le Scansioni nelle Pipeline CI/CD
Una tipica configurazione di Aqua in una pipeline CI/CD, utilizzando Github Actions in questo caso, potrebbe essere la seguente:
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
Questa automazione garantisce che ogni build venga scansionata per vulnerabilità di alta gravità, fornendo feedback immediato agli sviluppatori.
Riepilogo
Spostare la sicurezza a sinistra trasforma la catena di approvvigionamento del software da un punto caldo di vulnerabilità a una fortezza di resilienza. Integrando gli strumenti di scansione di Aqua nei tuoi flussi di lavoro, non solo migliori la sicurezza ma ti allinei anche con l'approccio proattivo di DORA alla resilienza operativa. Più agisci presto, più forti saranno le tue difese.
Originally published on allthingscloud.eu (2024-12-14).