DevSecOps Foundations

The DevSecOps Pipeline Architecture

3 min read

A DevSecOps pipeline integrates security checks at every stage—from code commit to production monitoring. This lesson maps out the complete architecture.

The Complete Pipeline

┌─────────────────────────────────────────────────────────────────────┐
│                     DevSecOps Pipeline                              │
├────────┬────────┬────────┬────────┬────────┬────────┬──────────────┤
│ Plan   │ Code   │ Build  │ Test   │ Release│ Deploy │ Operate      │
├────────┼────────┼────────┼────────┼────────┼────────┼──────────────┤
│Threat  │Pre-    │SAST    │DAST    │Image   │Config  │Runtime       │
│Model   │commit  │SCA     │IAST    │Signing │Audit   │Protection    │
│        │Hooks   │License │Pen Test│        │Secrets │SIEM          │
│        │IDE Sec │        │        │        │Verify  │Monitoring    │
└────────┴────────┴────────┴────────┴────────┴────────┴──────────────┘

Stage-by-Stage Security

1. Plan Phase

Security starts before code is written:

  • Threat Modeling: Identify attack surfaces (STRIDE, PASTA frameworks)
  • Security Requirements: Define security acceptance criteria
  • Architecture Review: Validate design decisions

2. Code Phase

Security as developers write code:

# Pre-commit hooks configuration
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/Yelp/detect-secrets
    rev: v1.4.0
    hooks:
      - id: detect-secrets
  - repo: https://github.com/hadolint/hadolint
    rev: v2.12.0
    hooks:
      - id: hadolint

Tools: detect-secrets, git-secrets, Semgrep, SonarLint

3. Build Phase

Security during compilation and packaging:

# GitHub Actions - Build with Security
build:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4

    # SAST - Static Analysis
    - name: Run Semgrep
      uses: returntocorp/semgrep-action@v1
      with:
        config: p/security-audit p/secrets

    # SCA - Dependency Scanning
    - name: Run Snyk
      uses: snyk/actions/node@master
      env:
        SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

    # Build artifact
    - name: Build
      run: npm run build

Tools: Semgrep, CodeQL, Snyk, Trivy, OWASP Dependency-Check

4. Test Phase

Dynamic security testing:

# DAST in staging environment
dast:
  runs-on: ubuntu-latest
  needs: deploy-staging
  steps:
    - name: OWASP ZAP Scan
      uses: zaproxy/action-baseline@v0.10.0
      with:
        target: 'https://staging.example.com'
        rules_file_name: '.zap/rules.tsv'

Tools: OWASP ZAP, Nuclei, Burp Suite, OWASP Juice Shop (training)

5. Release Phase

Security before production:

# Container image signing
release:
  steps:
    - name: Sign Image with Cosign
      run: |
        cosign sign --key cosign.key \
          ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ env.TAG }}

    - name: Verify Image
      run: |
        cosign verify --key cosign.pub \
          ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ env.TAG }}

Tools: Cosign, Notary, Harbor (registry with scanning)

6. Deploy Phase

Security during deployment:

# Kubernetes admission control
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: security-webhook
webhooks:
  - name: validate.security.io
    rules:
      - operations: ["CREATE", "UPDATE"]
        resources: ["pods", "deployments"]

Tools: OPA Gatekeeper, Kyverno, Vault (secrets injection)

7. Operate Phase

Continuous security monitoring:

# Falco runtime security rules
- rule: Detect Crypto Mining
  condition: >
    spawned_process and
    proc.name in (crypto_mining_binaries)
  output: "Crypto mining detected (user=%user.name command=%proc.cmdline)"
  priority: CRITICAL

Tools: Falco, Sysdig, Datadog Security Monitoring

Security Gates: Pass/Fail Criteria

# Example security gate configuration
security-gates:
  sast:
    critical: 0      # Zero critical = must pass
    high: 5          # Max 5 high severity
    block_on_fail: true

  sca:
    critical: 0
    high: 10
    license_block: ["GPL-3.0", "AGPL"]  # Block copyleft

  dast:
    critical: 0
    high: 3
    block_on_fail: true

  secrets:
    detected: 0      # Zero secrets allowed
    block_on_fail: true

Feedback Loops

The fastest feedback wins:

StageFeedback TimeDeveloper Action
IDEInstantFix while coding
Pre-commitSecondsFix before commit
PR checksMinutesFix before merge
Nightly scanHoursFix next day
Pen testWeeksFix eventually

In the next module, we'll dive deep into SAST—the first line of automated defense. :::

Quick check: how does this lesson land for you?

Quiz

Module 1: DevSecOps Foundations

Take Quiz
FREE WEEKLY NEWSLETTER

Stay on the Nerd Track

One email per week — courses, deep dives, tools, and AI experiments.

No spam. Unsubscribe anytime.