CI/CD Pipelines med innebygd sikkerhet

Hva er CI/CD?

Continuous Integration (CI) betyr at kodeendringer fra flere utviklere regelmessig integreres i et felles repository. Hver endring blir bygget og testet automatisk for å oppdage feil tidlig.

Continuous Delivery (CD) bygger videre på CI ved at de vellykkede testede endringene automatisk distribueres til et staging- eller produksjonsmiljø – gjerne med manuell bekreftelse for siste steg, eller helt automatisk i en continuous deployment løsning.

Dette gjør at applikasjoner raskt kan oppdateres og rulles ut med minimal nedetid og høy kvalitet.

CI/CD i DevSecOps

I en DevSecOps-strategi integreres sikkerhetstiltak direkte i CI/CD-pipelinen. Dette betyr at før kode rulles ut:

Ved å inkludere disse stegene i CI/CD-pipelinen, blir sikkerhet en naturlig del av utviklingsprosessen – noe som reduserer risiko og gir en robust produksjonsflyt.

Eksempel: GitHub Actions Pipeline

Nedenfor ser du et eksempel på en GitHub Actions workflow som:

name: CI Pipeline

on: [push, pull_request]

jobs:
  build-test-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Python 3.9
        uses: actions/setup-python@v3
        with:
          python-version: '3.9'

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run tests with pytest
        run: pytest

      - name: Run SAST with Bandit
        run: bandit -r .

      - name: Build Docker image
        run: docker build -t my-app:latest .

      - name: Scan Docker image with Trivy
        run: trivy image --exit-code 1 my-app:latest

I denne workflowen stopper pipelinen dersom enten Bandit eller Trivy oppdager kritiske sårbarheter. Dette sikrer at kun kode som oppfyller sikkerhetskravene, rulles ut.

Alternativ: Installere og bruke Jenkins

Jenkins er et populært verktøy for å automatisere bygg- og deploy-prosesser. Nedenfor er en steg-for-steg-guide for å installere Jenkins på Ubuntu:

  1. Oppdater pakkelisten og installer OpenJDK:
    sudo apt-get update && sudo apt-get install openjdk-11-jdk
  2. Legg til Jenkins-repo-nøkkel:
    wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
  3. Legg til Jenkins-repositoriet:
    sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
    sudo apt-get install jenkins
  4. Start og aktiver Jenkins:
    sudo systemctl enable jenkins
    sudo systemctl start jenkins
  5. Åpne nettleseren og naviger til http://<server-ip>:8080 for å fullføre konfigurasjonen.

Jenkins kan konfigureres for å integrere med Git, kjøre tester, utføre sikkerhetsskanninger, og deployere applikasjonen – alt som en del av en CI/CD pipeline.

CI/CD som en del av DevSecOps

CI/CD er den motoren som driver moderne utvikling. Når CI/CD er integrert med:

Skaper CI/CD en sømløs og sikker arbeidsflyt som reduserer manuelle feil, forbedrer samarbeid og sikrer rask og stabil deploy av kode. Dette er kjernen i DevSecOps.

Lenker og kilder