Scanning the Horizon: Shift-Left-Sicherheit in der Software-Lieferkette (3/12)
2024-12-14
Machine-translated — the English original is authoritative.
Cybersicherheit war lange Zeit reaktiv und befasste sich oft mit Schwachstellen erst nach der Bereitstellung. Doch im Zeitalter cloudnativer Anwendungen ist dieser Ansatz nicht mehr ausreichend. Durch das „Shifting Security Left“ – das Einbetten der Sicherheit in die frühesten Entwicklungsphasen – können Organisationen Risiken identifizieren und mindern, bevor sie die Produktion beeinträchtigen.
Die Software-Lieferkette, die Quellcode, Build-Systeme und Container-Images umfasst, ist ein primäres Ziel für Angreifer. Durch die Integration von Scanning-Tools direkt in die Entwicklungs-Workflows können Organisationen die Anforderungen der NIS 2 und DORA für proaktives Risikomanagement und sichere Software-Lieferketten erfüllen.
Warum Shift-Left wichtig ist
Je früher eine Schwachstelle erkannt wird, desto geringer sind die Kosten und der Zeitaufwand für die Behebung. Shift-Left-Sicherheit passt perfekt zu DORA, das Resilienz und proaktive Maßnahmen betont. Beispielsweise kann das Scannen von Quellcode während der Entwicklung Probleme aufspüren, bevor sie nach unten in der Lieferkette weitergegeben werden, wodurch Risiken reduziert und die operative Kontinuität gewahrt werden.
So implementieren Sie Shift-Left mit Aqua CNAPP
- Bulk-Scanning von Registries:
- Verbinden Sie Aqua mit allen Quellcode-Repositories und Container-Registries.
- Richten Sie geplante Scans ein, um sicherzustellen, dass jedes neue Artefakt auf Schwachstellen, Fehlkonfigurationen und Geheimnisse analysiert wird.


-
Kontinuierliche Überwachung:
-
Nutzen Sie die automatisierten Pull-Pläne von Aqua, um die Scans aktuell zu halten, wenn neuer Code committed oder Images in die Registry gepusht werden.
-
Entwickler-Enablement:
-
Integrieren Sie die Scanning-Ergebnisse direkt in die Workflows der Entwickler mithilfe von CI/CD-Tools. Die Feedback-Mechanismen von Aqua bieten umsetzbare Erkenntnisse, die es Entwicklern ermöglichen, Probleme schnell zu beheben, ohne ihre Umgebungen zu verlassen.
-
Baselines etablieren:
-
Verwenden Sie die initialen Scanning-Ergebnisse, um eine Baseline für Schwachstellen und Fehlkonfigurationen zu erstellen. Priorisieren Sie die Behebung kritischer Probleme und überwachen Sie den Fortschritt im Zeitverlauf.
Praktisches Beispiel: Automatisierung von Scans in CI/CD-Pipelines
Eine typische Aqua-Konfiguration in einer CI/CD-Pipeline, in diesem Fall unter Verwendung von Github Actions, könnte wie folgt aussehen:
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
Diese Automatisierung stellt sicher, dass jeder Build auf Hochrisiko-Schwachstellen gescannt wird und den Entwicklern sofortiges Feedback liefert.
Zusammenfassung
Shift-Left-Sicherheit verwandelt die Software-Lieferkette von einem Hotspot für Schwachstellen in eine Festung der Resilienz. Durch die Einbettung der Scanning-Tools von Aqua in Ihre Workflows verbessern Sie nicht nur die Sicherheit, sondern richten sich auch nach dem proaktiven Ansatz von DORA für operative Resilienz. Je früher Sie handeln, desto stärker sind Ihre Abwehrmaßnahmen.
Originally published on allthingscloud.eu (2024-12-14).