Блог "Дети ОИТа"
/поиск

Практики безопасного деплоя: от CI/CD до production

Комплексное руководство по безопасному деплою: от SAST и секретного сканирования до runtime security и compliance в 2026 году.

Практики безопасного деплоя: от CI/CD до production

Введение

Безопасный деплой — это не отдельный этап, а сквозной процесс, пронизывающий весь жизненный цикл приложения: от написания кода до эксплуатации в production. В 2026 году, с ростом сложности инфраструктуры и требований к compliance, базовые практики становятся обязательным минимумом для любой команды.

Архитектура безопасного пайплайна

1. Этап: Commit & PR

Проверки на уровне кода:

  • SAST (Static Application Security Testing): SonarQube, Semgrep, Checkov для IaC
  • Секретное сканирование: GitGuardian, TruffleHog — блокировка коммитов с секретами
  • Зависимости: Dependabot, Snyk — мониторинг уязвимостей в SBOM

Пример GitHub Actions workflow:

name: Security Gates
on: [pull_request]
jobs:
  sast:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Semgrep
        uses: semgrep/semgrep-action@v1
        with:
          config: p/security-audit
  
  secret-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: TruffleHog
        uses: trufflesecurity/trufflehog@main
        with:
          path: ./
  
  iac-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Checkov
        uses: bridgecrewio/checkov-action@main
        with:
          directory: ./infra/

2. Этап: Build & Registry

Безопасность образов:

  • SBOM (Software Bill of Materials): генерация CycloneDX/SPDX
  • Сканирование уязвимостей: Trivy, Grype на этапе build
  • Подпись образов: Cosign, Notary — гарантия целостности
  • Минимизация: Distroless, Alpine — уменьшение поверхности атаки

Пример Dockerfile best practices:

FROM alpine:3.18 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM gcr.io/distroless/static:nonroot
USER nonroot:nonroot
COPY --from=builder /app/app /app/
ENTRYPOINT ["/app/app"]

3. Этап: Deployment

Инфраструктурные практики:

  • Принцип наименьших привилегий: Service Accounts с RBAC, не root
  • Сетевая сегментация: NetworkPolicies в Kubernetes
  • Секреты: External Secrets Operator + HashiCorp Vault / SOPS
  • Pod Security Standards: enforce через Admission Controller

Пример Kubernetes manifest с security:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-sa
  annotations:
    iam.gke.io/gcp-service-account: app@project.iam.gserviceaccount.com
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: app-role
rules:
  - apiGroups: [""]
    resources: ["configmaps", "secrets"]
    verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-rb
subjects:
  - kind: ServiceAccount
    name: app-sa
roleRef:
  kind: Role
  name: app-role
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  template:
    spec:
      serviceAccountName: app-sa
      securityContext:
        runAsNonRoot: true
        runAsUser: 10001
        readOnlyRootFilesystem: true
        allowPrivilegeEscalation: false
      containers:
        - name: app
          image: repo/app:v1.2.3@sha256:abc...
          securityContext:
            capabilities:
              drop: ["ALL"]
          envFrom:
            - secretRef:
                name: app-secrets
          volumeMounts:
            - name: tmp
              mountPath: /tmp
      volumes:
        - name: tmp
          emptyDir: {}

4. Этап: Runtime & Observability

Непрерывный мониторинг:

  • eBPF-based security: Falco, Tetragon — детектирование аномалий ядра
  • SIEM: централизованный сбор логов с обогащением
  • Runtime security: контроль системных вызовов, файловых операций

Falco rule example:

- rule: Terminal shell in container
  desc: A shell was spawned in container with terminal
  condition: spawned_process and container.id != host and proc.name = bash and proc.tty != null
  output: Shell spawned in container (user=%user.name container=%container.id shell=%proc.name)
  priority: WARNING
  tags: [container, shell, mitre_execution]

Управление секретами: от переменных к Vault

Проблема .env файлов

Типичные ошибки:

  • Секреты в git (даже если файл в .gitignore)
  • Секреты в логах (через printenv)
  • Секреты в образах (слои Docker)

Решение: External Secrets Operator + SOPS

Архитектура:

  1. Секреты хранятся в Vault / GCP Secret Manager / AWS Secrets Manager
  2. ESO синхронизирует их в Kubernetes Secrets
  3. SOPS шифрует файлы в git (если нужны локальные секреты)

Пример шифрования с SOPS:

# .sops.yaml
key_groups:
  - pgp:
      - "fp:ABC123..."

# Шифрование
 sops --encrypt --in-place secrets.yaml

# В CI/CD
 sops --decrypt secrets.yaml | kubectl apply -f -

Compliance & Audit

Автоматизированный compliance

  • OPA/Gatekeeper: политики для Kubernetes
  • Checkov/Terraform Compliance: для IaC
  • In-toto: цепочка поставок ПО

Пример Gatekeeper constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowPrivilegeEscalation
metadata:
  name: psp-allow-privilege-escalation
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    allowPrivilegeEscalation: false

Чек-лист production-ready безопасности

CI/CD

  • SAST на каждом PR
  • Секретное сканирование
  • IaC security scanning
  • SBOM generation
  • Image vulnerability scanning
  • Image signing

Runtime

  • Non-root containers
  • Read-only filesystem
  • Dropped capabilities
  • NetworkPolicies
  • Pod Security Standards
  • Runtime security (Falco/Tetragon)
  • Centralized logging
  • Secrets management (no env vars)

Compliance

  • OPA/Gatekeeper policies
  • Automated compliance checks
  • Audit trail
  • Incident response runbooks

Заключение

Безопасный деплой — это культура, а не инструменты. Автоматизация проверок, принцип наименьших привилегий, непрерывный мониторинг и шифрование всего — это не опциональные улучшения, а базовый стандарт 2026 года. Команды, которые интегрируют security в каждый этап, выигрывают в скорости (меньше инцидентов) и в доверии (compliance из коробки).


Дата: 2026-10-12 | Категории: DevOps, Администрирование Linux | Теги: best-practices, ci-cd, containers, devops, kubernetes, observability, security, sops, vault