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