Что такое Shift Left
Shift Left — это подход, при котором проверки безопасности перемещаются на ранние этапы разработки, вместо того чтобы оставлять их на конец.
▸Преимущества
SAST (Static Application Security Testing)
▸Анализ статического кода
1# SonarQube2sonar-scanner -Dsonar.projectKey=myapp -Dsonar.sources=src34# ESLint Security5npm install eslint-plugin-security
▸GitHub Code Scanning
1# .github/workflows/security.yml2name: Security Scan34on: [push, pull_request]56jobs:7 sast:8 runs-on: ubuntu-latest9 steps:10 - uses: actions/checkout@v41112 - name: Initialize CodeQL13 uses: github/codeql-action/init@v214 with:15 languages: javascript1617 - name: Perform CodeQL Analysis18 uses: github/codeql-action/analyze@v2
DAST (Dynamic Application Security Testing)
▸ZAP (Zed Attack Proxy)
1# .github/workflows/dast.yml2name: DAST Scan34jobs:5 dast:6 runs-on: ubuntu-latest7 steps:8 - name: ZAP Scan9 uses: zaproxy/action-full-scan@v0.8.010 with:11 target: 'https://staging.example.com'
Сканирование контейнеров
▸Trivy
1# Сканирование образа2trivy image myapp:latest34# Сканирование файловой системы5trivy fs .67# Сканирование в CI/CD8trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
▸Docker Scout
1# Сканирование на уязвимости2docker scout cves myapp:latest34# Рекомендации5docker scout recommendations myapp:latest
Управление секретами
▸HashiCorp Vault
1# Установка Vault2vault server -dev34# Сохранение секрета5vault kv put secret/myapp/db password="secret123"67# Получение секрета8vault kv get -field=password secret/myapp/db
▸Sealed Secrets
1apiVersion: bitnami.com/v1alpha12kind: SealedSecret3metadata:4 name: myapp-secret5spec:6 encryptedData:7 DB_PASSWORD: AgBy3i4OJSWK+PiTySYZZA9rO43cGDEq...
Сканер зависимостей
▸Snyk
1# Установка2npm install -g snyk34# Проверка зависимостей5snyk test67# Мониторинг8snyk monitor
▸Dependabot
1# .github/dependabot.yml2version: 23updates:4 - package-ecosystem: "npm"5 directory: "/"6 schedule:7 interval: "weekly"8 open-pull-requests-limit: 10
Политики безопасности
▸Open Policy Agent (OPA)
1# deny.rego2package kubernetes.admission34deny[msg] {5 input.request.kind.kind == "Pod"6 container := input.request.object.spec.containers[_]7 not startswith(container.image, "registry.example.com/")8 msg := sprintf("Image %v is not from trusted registry", [container.image])9}
Secrets в Git
▸.gitignore
1.env2*.pem3*.key4credentials.json
▸Git-secrets
1# Установка2git clone https://github.com/awslabs/git-secrets.git3cd git-secrets && make install45# Регистрация6git secrets --install7git secrets --register-aws
Shift Left Pipeline
1name: Security Pipeline23on: [push, pull_request]45jobs:6 security:7 runs-on: ubuntu-latest8 steps:9 - uses: actions/checkout@v41011 - name: SAST12 run: npm run lint && npm run typecheck1314 - name: Dependency Scan15 run: npx snyk test1617 - name: Container Scan18 run: trivy image myapp:latest1920 - name: Secret Scan21 run: trufflehog filesystem . --only-verified
Заключение
Shift Left безопасности интегрирует проверки на ранних этапах разработки. SAST, DAST, сканирование контейнеров и управление секретами — обязательные компоненты безопасного DevOps-пайплайна.