6.1 Основы DevSecOps

6.1 Основы DevSecOps #

🎯 Цель изучения #

Понять принципы DevSecOps и научиться интегрировать безопасность в каждый этап DevOps процесса. Перейти от “Security на потом” к “Security с самого начала”.


🔐 Что такое DevSecOps? #

DevSecOps = Development + Security + Operations

Традиционный подход:
Dev → Ops → Security (в конце)
     ↓
🔥 Проблемы найдены поздно = дорого исправлять

DevSecOps подход:
Dev + Security → Ops + Security → Production + Security
     ↓
✅ Проблемы найдены рано = дешево исправлять

Ключевые принципы: #

  • Shift-Left Security - безопасность на ранних этапах
  • Security as Code - автоматизация security проверок
  • Shared Responsibility - все отвечают за безопасность
  • Continuous Monitoring - постоянный мониторинг угроз

🚀 Shift-Left Security #

Что значит “сдвиг влево”? #

Pipeline: Design → Code → Build → Test → Deploy → Monitor
             ←←←←← Shift Left ←←←←←

Традиционно: Тестирование безопасности в конце
DevSecOps: Безопасность на каждом этапе

🔧 Практическая реализация #

1. На этапе планирования #

✅ Threat Modeling
✅ Security Requirements
✅ Compliance Planning
✅ Risk Assessment

2. На этапе разработки #

# IDE плагины для безопасности
# VSCode Extensions:
- SonarLint
- Snyk Security
- GitLens (для проверки коммитов)
- ESLint Security Rules

3. На этапе сборки #

# GitHub Actions пример
name: Security Scan
on: [push, pull_request]

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      # SAST - статический анализ кода
      - name: Run Semgrep
        uses: returntocorp/semgrep-action@v1
        
      # Dependency scanning
      - name: Run Snyk
        uses: snyk/actions/node@master
        
      # Container scanning
      - name: Run Trivy
        uses: aquasecurity/trivy-action@master

🏗️ Security as Code #

Принципы #

# 1. Все security конфигурации в Git
security_policies/
├── network-policies/
├── rbac-configs/
├── secrets-management/
└── compliance-rules/

# 2. Версионирование security изменений
# 3. Code review для security конфигураций
# 4. Автоматизированное применение policy

Инструменты Security as Code #

Infrastructure Security #

# Terraform с security модулями
module "security_group" {
  source = "./modules/security-group"
  
  ingress_rules = [
    {
      from_port   = 443
      to_port     = 443
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }
  ]
  
  egress_rules = [
    {
      from_port   = 0
      to_port     = 0
      protocol    = "-1"
      cidr_blocks = ["0.0.0.0/0"]
    }
  ]
}

Policy as Code #

# Open Policy Agent (OPA) пример
package kubernetes.security

deny[msg] {
  input.kind == "Pod"
  input.spec.containers[_].securityContext.runAsRoot == true
  msg := "Containers should not run as root"
}

deny[msg] {
  input.kind == "Pod"
  not input.spec.containers[_].securityContext.readOnlyRootFilesystem
  msg := "Root filesystem should be read-only"
}

👥 Shared Responsibility Culture #

Традиционная модель #

Developers: "Мы пишем код"
Operations: "Мы деплоим"
Security: "Мы проверяем безопасность"

DevSecOps модель #

Everyone: "Мы все отвечаем за безопасность"

🎯 Роли и ответственности #

Developers #

  • Secure coding practices
  • Dependency management
  • SAST tools использование
  • Security unit tests

Operations #

  • Infrastructure security
  • Secrets management
  • Network security
  • Runtime monitoring

Security Team #

  • Policy creation
  • Security architecture
  • Incident response
  • Compliance monitoring

🛡️ Threat Modeling в DevOps #

STRIDE модель #

S - Spoofing (подмена личности)
T - Tampering (нарушение целостности)
R - Repudiation (отказ от авторства)
I - Information Disclosure (раскрытие информации)
D - Denial of Service (отказ в обслуживании)
E - Elevation of Privilege (повышение привилегий)

Практический пример для веб-приложения #

1. Identify Assets:
   - User data
   - API endpoints
   - Database
   - Authentication system

2. Identify Threats:
   - SQL Injection (T, I)
   - XSS attacks (T, I)
   - CSRF attacks (T)
   - Privilege escalation (E)

3. Mitigations:
   - Input validation (код)
   - WAF rules (инфраструктура)
   - HTTPS everywhere (конфигурация)
   - Regular security scans (процесс)

📊 Security Metrics и KPIs #

🎯 Основные метрики #

{
  "security_metrics": {
    "mean_time_to_detection": "< 15 minutes",
    "mean_time_to_response": "< 30 minutes",
    "vulnerability_density": "< 5 per 1000 LOC",
    "security_gate_pass_rate": "> 95%",
    "false_positive_rate": "< 10%"
  },
  "compliance_metrics": {
    "policy_coverage": "> 90%",
    "audit_findings": "0 critical",
    "compliance_score": "> 95%"
  }
}

📈 Мониторинг прогресса #

# Weekly Security Report
echo "🔒 Security Dashboard для недели $(date +%V)"
echo "================================="
echo "Critical vulnerabilities: $(kubectl get vulns -o json | jq '.items | map(select(.severity=="critical")) | length')"
echo "Security scans passed: $(curl -s API/security-scans | jq '.pass_rate')%"
echo "Policy violations: $(opa eval 'data.violations' | jq 'length')"

🚨 Common Security Threats в DevOps #

1. Supply Chain Attacks #

Проблема:

# Malicious npm package
npm install malicious-package
# → Backdoor в production

Решение:

# Package scanning
- name: Audit Dependencies
  run: |
    npm audit --audit-level=high
    snyk test
    
# SBOM generation
- name: Generate SBOM
  run: syft packages . -o spdx-json=sbom.json

2. Container Vulnerabilities #

Проблема:

# Уязвимый base image
FROM ubuntu:18.04  # EOL, много CVE

Решение:

# Secure base image
FROM ubuntu:22.04
RUN apt-get update && apt-get upgrade -y \
    && rm -rf /var/lib/apt/lists/*
    
# Distroless для production
FROM gcr.io/distroless/nodejs:18

3. Secrets в Git #

Проблема:

git log --grep="password" --all
# Находим коммиты с паролями 😱

Решение:

# Pre-commit hooks
pip install detect-secrets
detect-secrets scan --all-files .secrets.baseline

# Git hooks
#!/bin/sh
detect-secrets-hook --baseline .secrets.baseline $(git diff --cached --name-only)

🔧 Практические задания #

🟢 Задание 1: Настройка Security Scanning #

# 1. Создать GitHub Action для security scan
mkdir -p .github/workflows
cat > .github/workflows/security.yml << 'EOF'
name: Security Scan
on: [push, pull_request]

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'
EOF

# 2. Тестировать локально
docker run --rm -v $PWD:/app aquasec/trivy fs /app

🟡 Задание 2: Policy as Code #

# 1. Установить OPA
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64
chmod +x opa

# 2. Создать policy для Kubernetes
cat > security-policy.rego << 'EOF'
package kubernetes.security

# Deny containers running as root
deny[msg] {
  input.kind == "Pod"
  input.spec.containers[_].securityContext.runAsUser == 0
  msg := "Container should not run as root"
}
EOF

# 3. Тестировать policy
opa eval -d security-policy.rego -i pod.yaml "data.kubernetes.security.deny"

🟠 Задание 3: Secrets Management #

# 1. Установить HashiCorp Vault (dev mode)
vault server -dev

# 2. Настроить secrets
export VAULT_ADDR='http://127.0.0.1:8200'
vault kv put secret/myapp database_password="secure_password_123"

# 3. Интегрировать с приложением
vault kv get -field=database_password secret/myapp

📚 Полезные ресурсы #

📖 Документация #

🛠️ Инструменты #

  • SAST: SonarQube, Semgrep, CodeQL
  • DAST: OWASP ZAP, Burp Suite
  • Container Security: Trivy, Twistlock, Falco
  • Secrets Management: HashiCorp Vault, AWS Secrets Manager

🎓 Обучение #


🎯 Результаты изучения #

После изучения этого раздела вы:

  • ✅ Понимаете принципы DevSecOps
  • ✅ Умеете применять Shift-Left Security
  • ✅ Знаете как внедрить Security as Code
  • ✅ Можете настроить базовые security scans
  • ✅ Понимаете важность shared responsibility

Следующий раздел: 6.2 Безопасность в CI/CD