Tool Tuesday: GitHub Actions voor automatisering van compliance-checks

Compliance voelt vaak traag. DevOps vraagt tempo. Leg controles vast als code en laat workflows meedraaien bij elke wijziging. Zo verschuift compliance naar het hart van de pipeline.

Waarom checks struikelen in de praktijk

  • Detectie komt laat. Fix kost veel tijd en geld.
  • Werkwijzen verschillen per team. Overzicht ontbreekt.
  • Handwerk vergist zich. Checklist verdwijnt, stap wordt vergeten.

GitHub Actions in één oogopslag

Workflows in YAML reageren op events zoals pull requests of releases. Jobs draaien in containers of VM’s. Stappen voeren commando’s uit en leveren rapporten aan de PR.

name: Run tests
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Unit tests
        run: npm test

Wat automatiseer je eerst

1. Dependencies scannen

Kwetsbaarheden zitten vaak in libraries. Laat een scan meelopen bij elke PR.

- name: Dependency Check
  uses: dependency-check/Dependency-Check_Action@main
  with:
    project: "service-naam"
    scan: "."

2. Secrets bewaken

Ingebouwde secret scanning helpt. Breid uit met eigen patronen en blokkeer merges bij treffers.

3. IaC policies afdwingen

Terraform en Kubernetes vragen regels. OPA of Checkov controleert configuraties op encryptie, netwerkpoorten en baselines.

- name: Checkov IaC scan
  uses: bridgecrewio/checkov-action@master

4. Security linters draaien

Voeg SAST toe. Voorbeeld met Bandit voor Python of security rules in ESLint voor JavaScript.

bandit -r .

5. Rapportage als artifact

Genereer HTML of PDF en koppel het aan de run. Auditors zien precies welke controles wanneer liepen.

Voorbeeldworkflows

NIS2-ready basis

name: NIS2 compliance checks
on:
  pull_request:
    branches: [ main ]
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # Dependencies
      - name: OWASP Dependency Check
        uses: dependency-check/Dependency-Check_Action@main
        with:
          project: "NIS2-sample"
          scan: "."

      # IaC
      - name: Checkov
        uses: bridgecrewio/checkov-action@master

      # Code
      - name: Bandit
        run: bandit -r .

  sbom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Syft SBOM
        uses: anchore/sbom-action@v0
        with:
          path: "."
      - name: Upload SBOM
        uses: actions/upload-artifact@v4
        with:
          name: sbom
          path: sbom.spdx.json

Policy-as-code met OPA

Schrijf regels in Rego en toets PR’s op eisen zoals encryptie aan, geen publieke S3, logging actief.

name: OPA policies
on: pull_request
jobs:
  opa:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Eval
        run: |
          opa eval --fail-defined \
            -i terraform.plan.json \
            -d policies/ \
            "data.policies.deny"

Implementeren zonder ruis

  • Klein starten. Begin met één workflow. Lint plus dependency-scan levert snel waarde.
  • Resultaat in de PR. Geen los dashboard. Reviews tonen uitkomsten direct.
  • Regels als code. Policies in git. Versiebeheer en review horen erbij.
  • Eigenaarschap afspreken. Team lost findings op binnen de PR. Security-chapter adviseert en kalibreert regels.
  • Iteratief uitbreiden. Daarna IaC, SAST, SBOM, rapportage, supply-chain.

Supply-chain versterken

  • SBOM genereren en bewaren per release.
  • Dependabot PR’s verplicht reviewen.
  • Container images scannen voor push naar registry.
  • Release-signing met provenance. Artefact komt alleen door met geldige handtekening.

Rapportage richting audit

  • Workflow-runs vormen het logboek.
  • Artifacts bewaren voor het dossier.
  • Labels per run koppelen aan ticketnummers of wijzigingsverzoeken.

Veelgemaakte fouten

  • Teveel checks ineens. Teams haken af.
  • Findings zonder prioriteit. Backlog slibt dicht.
  • Policies buiten git. Versies raken kwijt.
  • Alleen rapporteren. Geen blokkade bij hoge risico’s.

Roadmap per sprint

  • Sprint 1. Lint, dependency-scan, basisrapport als artifact.
  • Sprint 2. IaC-scan, eerste OPA-regels, PR-statuschecks verplicht.
  • Sprint 3. SAST, SBOM, container-scan.
  • Sprint 4. Release-signing, provenance, periodieke volledige scan op main.

ROI in duidelijke termen

  • Minder spoedfixes vlak voor productie.
  • Gelijke werkwijze over teams heen.
  • Direct bewijs richting audit.
  • Hogere leverbetrouwbaarheid zonder tempoverlies.

Conclusie

Breng compliance naar de pipeline. Laat workflows meelopen bij elke wijziging. Regels leven in git, uitkomsten staan in de PR, releases dragen bewijs mee. Zo ontstaat snelheid met zekerheid.

Plaats een reactie