DevSecOps — Bezpečnosť v DevOps
DevSecOps integruje bezpečnosť do každej fázy DevOps životného cyklu — od vývoja cez build až po produkciu. Namiesto bezpečnostného auditu na konci sa bezpečnosť posúva doľava (shift-left), čo znamená skoršie odhaľovanie zraniteľností a nižšie náklady na ich opravu.
Shift-Left Security
Princíp shift-left znamená presunúť bezpečnostné kontroly čo najbližšie k vývojárovi:
- Pre-commit hooks — kontrola secrets, linting bezpečnostných pravidiel
- IDE pluginy — okamžitá spätná väzba pri písaní kódu (Snyk IDE, SonarLint)
- Pull request checks — automatické bezpečnostné skeny pred merge
- Security champions — vývojári vyškolení v bezpečnosti v každom tíme
Čím skôr nájdeš zraniteľnosť, tým lacnejšie ju opravíš. Bug v produkcii stojí 100× viac ako bug odhalený počas vývoja.
SAST — Static Application Security Testing
SAST analyzuje zdrojový kód bez jeho spustenia:
# Príklad: Semgrep v GitHub Actions
- name: Semgrep SAST Scan
uses: returntocorp/semgrep-action@v1
with:
config: >-
p/owasp-top-ten
p/javascript
Populárne nástroje:
- Semgrep — rýchly, open-source, vlastné pravidlá
- SonarQube — komplexná analýza kvality aj bezpečnosti
- CodeQL — GitHub-native, sémantická analýza
- Bandit — špecializovaný na Python
Výhody: Skoré odhalenie, pokrytie celého kódu Nevýhody: False positives, nevidí runtime problémy
DAST — Dynamic Application Security Testing
DAST testuje bežiacu aplikáciu zvonku — simuluje útočníka:
# OWASP ZAP v CI/CD pipeline
- name: DAST Scan
uses: zaproxy/action-full-scan@v0.7.0
with:
target: "https://staging.example.com"
rules_file_name: "zap-rules.tsv"
Populárne nástroje:
- OWASP ZAP — open-source, automatizovateľný
- Burp Suite — profesionálny pentesting nástroj
- Nuclei — template-based skener zraniteľností
Výhody: Reálne zraniteľnosti, menej false positives Nevýhody: Pomalšie, potrebuje bežiace prostredie
SCA — Software Composition Analysis
SCA kontroluje závislosti tretích strán na známe zraniteľnosti (CVE):
# Snyk CLI
snyk test --all-projects --severity-threshold=high
# npm audit
npm audit --audit-level=high
# pip-audit pre Python
pip-audit --strict
Populárne nástroje:
- Snyk — SCA + kontajnery + IaC
- Dependabot — GitHub-native, automatické PR s opravami
- OWASP Dependency-Check — open-source
- Trivy — all-in-one skener (závislosti, kontajnery, IaC)
Container Scanning
Kontajnerové obrazy môžu obsahovať zraniteľné balíčky, malware alebo nesprávne konfigurácie:
Trivy
# Skenovanie Docker image
trivy image myapp:latest
# Skenovanie s ignorovaním unfixed CVE
trivy image --ignore-unfixed --severity HIGH,CRITICAL nginx:1.25
# Skenovanie Dockerfile (misconfiguration)
trivy config Dockerfile
# Skenovanie v CI/CD (exit code 1 pri CRITICAL)
trivy image --exit-code 1 --severity CRITICAL myapp:latest
Snyk Container
# Skenovanie kontajnera
snyk container test myapp:latest
# Monitorovanie (kontinuálne sledovanie nových CVE)
snyk container monitor myapp:latest
Best Practices pre kontajnery
- Používaj minimálne base images (distroless, Alpine, scratch)
- Multi-stage builds — výsledný obraz bez build nástrojov
- Spúšťaj procesy ako non-root user
- Pinuj verzie base images (nie
latest) - Pravidelne rebuilduj obrazy kvôli bezpečnostným patchom
Supply Chain Security
Bezpečnosť dodávateľského reťazca chráni celý proces od kódu po deployment:
SBOM — Software Bill of Materials
SBOM je zoznam všetkých komponentov v softvéri — ako „zloženie" na obale:
# Generovanie SBOM pomocou Syft
syft myapp:latest -o spdx-json > sbom.json
# Trivy SBOM
trivy image --format spdx-json -o sbom.json myapp:latest
# Skenovanie existujúceho SBOM
grype sbom:./sbom.json
Formáty: SPDX, CycloneDX Prečo: Regulácie (US Executive Order), rýchla reakcia na nové CVE (Log4Shell)
Ďalšie opatrenia
- Sigstore/Cosign — podpisovanie kontajnerových obrazov
- SLSA Framework — úrovne integrity supply chain
- Verified builds — reprodukovateľné buildy
- Dependency pinning — presné verzie + lock files
# Podpísanie obrazu pomocou Cosign
cosign sign --key cosign.key myregistry/myapp:v1.0
# Overenie podpisu
cosign verify --key cosign.pub myregistry/myapp:v1.0
OPA & Policy as Code
Open Policy Agent (OPA) umožňuje definovať bezpečnostné politiky ako kód:
# policy.rego — Zakázať kontajnery bežiace ako root
package kubernetes.admission
deny[msg] {
input.request.kind.kind == "Pod"
container := input.request.object.spec.containers[_]
not container.securityContext.runAsNonRoot
msg := sprintf("Kontajner '%s' musí bežať ako non-root", [container.name])
}
Použitie v Kubernetes
- Gatekeeper (OPA) — admission controller pre K8s
- Kyverno — Kubernetes-native policy engine
# Kyverno policy — vyžadovať resource limits
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-limits
spec:
validationFailureAction: Enforce
rules:
- name: check-limits
match:
any:
- resources:
kinds:
- Pod
validate:
message: "CPU a memory limits sú povinné."
pattern:
spec:
containers:
- resources:
limits:
memory: "?*"
cpu: "?*"
Policy as Code pre IaC
- Checkov — skenovanie Terraform, CloudFormation, Kubernetes
- tfsec — Terraform bezpečnostný skener
- Conftest — OPA pre konfiguračné súbory
# Checkov pre Terraform
checkov -d ./terraform/ --framework terraform
# Conftest pre Kubernetes manifesty
conftest test deployment.yaml -p policy/
Secrets v CI/CD
Secrets (API kľúče, heslá, tokeny) sú najčastejší bezpečnostný problém v CI/CD:
Čo NEROBIŤ
# ❌ NIKDY — hardcoded secrets
env:
DB_PASSWORD: "SuperSecret123"
API_KEY: "sk-1234567890abcdef"
Správny prístup
# ✅ GitHub Actions — encrypted secrets
env:
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
# ✅ HashiCorp Vault
- name: Get secrets from Vault
uses: hashicorp/vault-action@v2
with:
url: https://vault.example.com
method: jwt
secrets: |
secret/data/myapp db_password | DB_PASSWORD
Detekcia secrets v kóde
# Gitleaks — skenovanie Git histórie
gitleaks detect --source . --verbose
# TruffleHog — hľadanie secrets v repozitári
trufflehog git file://. --only-verified
# Pre-commit hook
# .pre-commit-config.yaml
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks
Best Practices pre secrets
- Používaj secrets manager (Vault, AWS Secrets Manager, SOPS)
- Rotuj secrets pravidelne
- Audit log — kto a kedy pristúpil k secrets
- Short-lived credentials — OIDC tokeny namiesto dlhodobých kľúčov
- Pre-commit hooks — zabrániť commitnutiu secrets
Best Practices
Security v CI/CD Pipeline
Code → Pre-commit (secrets, lint)
→ Build → SAST + SCA
→ Container Build → Image Scan
→ Deploy to Staging → DAST
→ Sign & Generate SBOM
→ Deploy to Production
Checklist pre DevSecOps
- Shift-left — bezpečnostné kontroly od prvého riadku kódu
- Automatizuj — manuálne kontroly nefungujú v CI/CD tempe
- SAST + DAST + SCA — kombinuj statickú, dynamickú aj kompozičnú analýzu
- Container scanning — každý build, nie raz za mesiac
- SBOM — vedz, čo je v tvojom softvéri
- Policy as Code — bezpečnostné pravidlá verzionované v Gite
- Secrets management — žiadne hardcoded secrets, nikdy
- Supply chain security — podpisuj artefakty, pinuj závislosti
- Least privilege — minimálne oprávnenia pre CI/CD service accounts
- Incident response — plán na reakciu, keď (nie ak) niečo zlyhá
Metriky
- MTTR (Mean Time to Remediate) — ako rýchlo opravíš zraniteľnosť
- Počet kritických CVE v produkcii
- Coverage — % repozitárov s automatickým skenovaním
- False positive rate — koľko nálezov je skutočných
Zhrnutie
| Oblasť | Nástroje | Kedy v pipeline |
|---|---|---|
| SAST | Semgrep, SonarQube, CodeQL | Build |
| DAST | OWASP ZAP, Nuclei | Staging |
| SCA | Snyk, Dependabot, Trivy | Build |
| Container Scan | Trivy, Snyk Container | Post-build |
| Secrets | Gitleaks, TruffleHog | Pre-commit |
| Policy | OPA, Kyverno, Checkov | Admission/Build |
| SBOM | Syft, Trivy | Release |
| Signing | Cosign, Sigstore | Release |
DevSecOps nie je nástroj ani tím — je to kultúra, kde bezpečnosť je zodpovednosťou každého.