Skip to content
yisusvii Blog
Go back

The Most Cost-Effective Security Stack in 2026 for Azure Kubernetes With ACR and GitHub Actions CI/CD

Suggest Changes

Running Kubernetes on Azure is already a solid choice in 2026. Azure Kubernetes Service (AKS) manages the control plane, Azure Container Registry (ACR) stores your images, and GitHub Actions drives your CI/CD pipeline. But what about security? This guide covers the most cost-effective open-source security tooling you can layer on top of that stack — without paying for expensive commercial platforms.


The Stack at a Glance

ToolRoleCost
TrivyContainer and IaC vulnerability scanningFree / Open Source
FalcoRuntime threat detectionFree / Open Source
CheckovInfrastructure-as-Code policy checksFree / Open Source
KubescapeKubernetes security posture managementFree / Open Source
GrafanaObservability and security dashboardsFree / Open Source
DependabotDependency vulnerability alertsFree (GitHub native)

Every tool in this stack has a zero-dollar license for self-hosted use. You only pay for the AKS nodes and ACR storage you already need to run your workloads.


1. Trivy — Scan Before You Ship

Trivy is the de facto standard for container image scanning. It checks your images for OS-level CVEs, language package vulnerabilities, misconfigurations, and secrets — all in a single binary.

How to integrate with GitHub Actions and ACR:

Add a Trivy scan step immediately after building and pushing to ACR. If Trivy finds a critical or high CVE, the workflow fails and the deployment is blocked.

# .github/workflows/build-and-scan.yml
name: Build, Scan, and Push

on:
  push:
    branches: [main]

env:
  ACR_REGISTRY: yourregistry.azurecr.io
  IMAGE_NAME: your-app

jobs:
  build-scan-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Azure Login
        uses: azure/login@v2
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Login to ACR
        run: az acr login --name yourregistry

      - name: Build image
        run: docker build -t $ACR_REGISTRY/$IMAGE_NAME:${{ github.sha }} .

      - name: Scan image with Trivy
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
          format: table
          exit-code: "1"
          severity: CRITICAL,HIGH
          ignore-unfixed: true

      - name: Push to ACR
        run: docker push $ACR_REGISTRY/$IMAGE_NAME:${{ github.sha }}

Trivy only runs the push if the scan passes. Unfixed CVEs (where no patch exists yet) are ignored to avoid noise from unavoidable findings.

Cost note: Trivy is entirely free. The only cost is the GitHub Actions minutes used per run, which is negligible compared to alternatives like Snyk Container or Prisma Cloud.


2. Falco — Runtime Threat Detection on AKS

Trivy catches vulnerabilities before deployment. Falco catches threats after deployment — at runtime, inside your running pods.

Falco watches Linux system calls and fires alerts when behavior deviates from defined rules. Common detections include:

Deploy Falco on AKS with Helm:

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update

helm install falco falcosecurity/falco \
  --namespace falco \
  --create-namespace \
  --set driver.kind=ebpf \
  --set falcosidekick.enabled=true \
  --set falcosidekick.config.grafana.hostport=http://grafana.monitoring:3000 \
  --set falcosidekick.config.grafana.apikey=$GRAFANA_API_KEY

Using the eBPF driver is recommended for AKS because it works without kernel module support and avoids node-level OS changes.

Falco Sidekick forwards alerts to Grafana (and optionally Slack, PagerDuty, or any webhook). This keeps your entire observability pipeline in one place.

Cost note: Falco is free. Falco Sidekick is free. You pay only for the AKS nodes running the DaemonSet — typically one pod per node.


3. Checkov — Shift-Left IaC Security

Checkov scans Terraform, Bicep, Kubernetes manifests, Helm charts, and Dockerfiles for security misconfigurations before any infrastructure is provisioned.

Common findings on AKS workloads:

GitHub Actions integration:

# .github/workflows/checkov.yml
name: Checkov IaC Scan

on:
  pull_request:
    paths:
      - "infra/**"
      - "k8s/**"
      - "Dockerfile"

jobs:
  checkov:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Checkov
        uses: bridgecrewio/checkov-action@master
        with:
          directory: .
          framework: terraform,kubernetes,dockerfile
          soft_fail: false
          output_format: sarif
          output_file_path: checkov-results.sarif

      - name: Upload SARIF to GitHub Security
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: checkov-results.sarif

Uploading the SARIF output sends Checkov findings directly into GitHub’s Security tab under Code Scanning. Your team sees IaC issues alongside code vulnerabilities — no separate dashboard required.

Cost note: Checkov is fully open source (Bridgecrew/Prisma Cloud owns it, but the CLI is free). The GitHub SARIF upload is free on public repos and included in GitHub Advanced Security for enterprises.


4. Kubescape — Kubernetes Security Posture Management

Once your cluster is running, Kubescape continuously evaluates your AKS configuration against security frameworks like NSA-CISA, MITRE ATT&CK, and the CIS Kubernetes Benchmark.

It answers: Is this cluster configured securely right now?

Install and run a baseline scan:

# Install Kubescape CLI
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash

# Scan against NSA-CISA framework
kubescape scan framework nsa --format pretty-printer --output results.txt

# Scan against all frameworks
kubescape scan framework all --format html --output report.html

In-cluster operator for continuous monitoring:

helm repo add kubescape https://kubescape.github.io/helm-charts
helm repo update

helm install kubescape kubescape/kubescape-operator \
  --namespace kubescape \
  --create-namespace \
  --set clusterName=$(kubectl config current-context)

The in-cluster operator runs scheduled scans and exposes metrics for Grafana, giving you a live security posture score without leaving your cluster.

In GitHub Actions — gate on posture score:

- name: Install Kubescape
  run: curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash

- name: Run Kubescape scan
  run: |
    kubescape scan framework nsa \
      --fail-threshold 70 \
      --format json \
      --output kubescape-results.json

Setting --fail-threshold 70 blocks the pipeline if your cluster scores below 70% compliance — a practical floor for production workloads.


5. Grafana — Unified Security Observability

Grafana ties the entire stack together. Instead of checking five different dashboards, you get one pane of glass for:

Deploy the Grafana + Prometheus stack on AKS:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# Deploy kube-prometheus-stack (includes Prometheus + Grafana)
helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  --set grafana.adminPassword=your-secure-password \
  --set grafana.persistence.enabled=true \
  --set grafana.persistence.size=10Gi

Add Falco dashboard:

In Grafana, import dashboard ID 11914 — the official Falco Sidekick dashboard. It shows alert severity, rule names, and container context in real time.

Trivy Operator metrics in Grafana:

helm install trivy-operator aquasecurity/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set serviceMonitor.enabled=true

With serviceMonitor.enabled=true, Prometheus scrapes Trivy Operator metrics automatically. Import Grafana dashboard 17813 for the Trivy vulnerability overview.

Cost note: The entire monitoring stack is free. You pay for AKS node compute and Azure Disk (Persistent Volume) storage — typically a few dollars per month for a 10Gi Grafana volume.


6. Dependabot — Automated Dependency Updates

Dependabot is GitHub-native and free. It watches your package.json, pom.xml, requirements.txt, go.mod, Dockerfile base images, and GitHub Actions workflow dependencies for known vulnerabilities and outdated versions.

Enable Dependabot in .github/dependabot.yml:

version: 2
updates:
  # Application dependencies
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 10

  # Dockerfile base image
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"

  # GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"

  # Helm chart dependencies (if using a chart)
  - package-ecosystem: "pip"
    directory: "/scripts"
    schedule:
      interval: "weekly"

Dependabot opens pull requests automatically. Combined with Trivy in CI, every Dependabot PR gets scanned before merge — giving you both automated dependency updates and automated vulnerability validation in the same workflow.


Putting It All Together — Full Pipeline Flow

Developer pushes code


GitHub Actions CI starts

        ├── Checkov scans IaC + Dockerfile ──► GitHub Security tab

        ├── docker build

        ├── Trivy scans built image ──────────► Fail if CRITICAL/HIGH

        ├── docker push to ACR (if scan passes)

        └── kubectl apply / Helm upgrade to AKS


        AKS cluster (running)

                ├── Falco DaemonSet ──────────► Runtime alerts → Grafana

                ├── Trivy Operator ──────────► Continuous image scanning → Grafana

                ├── Kubescape Operator ──────► Posture score → Grafana

                └── Grafana ─────────────────► Unified security dashboard

Dependabot (async, weekly)

        └── Opens PRs for outdated deps ──► CI runs Trivy on updated images

Cost Summary

ComponentMonthly Cost (Estimate)
AKS control planeFree (Microsoft covers it)
AKS worker nodes (2x Standard_B2s)~$70/month
ACR Basic tier~$5/month
GitHub Actions (private repo)~$0–$10/month (2,000 free minutes)
Grafana + Prometheus PV storage~$2/month
Trivy, Falco, Checkov, Kubescape, Dependabot$0
Total security tooling cost$0

The entire security platform adds zero dollars to your bill. The only costs are the infrastructure you were already paying for.


Final Thoughts

The 2026 Kubernetes security landscape no longer requires expensive commercial platforms to achieve meaningful protection. This stack gives you:

All of it integrates natively with AKS, ACR, and GitHub Actions. None of it requires a vendor contract.

Start with Trivy in CI — it’s a single action step and immediately blocks vulnerable images. Add Dependabot on day one since it’s a YAML file. Once those are running, layer in Checkov, Falco, and Kubescape as your team matures. Wire everything to Grafana last for the full picture.

Security doesn’t have to be expensive. It has to be consistent.


Suggest Changes
Share this post on:

Next Post
Managing Python Versions with pyenv and venv on Linux, Mac, and Windows