Status

draft. Предложение по итогам сессии 2026-05-13, ждёт согласования с Женей (DevOps) и Артёмом (DPO). Замещает повисший с ноября 2025 tooling-вопрос — verified в Fireflies, что пятничный DevOps Sync 28 нояб 2025 supply-chain так и не обсудил (час 11 минут ушло на логи, регионы, репликацию БД).1

Контекст

Структурный фрейм — в supply-chain-security: малварь приходит на этапе установки, защита нужна в нескольких местах жизненного цикла зависимости, ни одна точка не закрывает всё. Здесь — оценка опций и предложение.

В Slack-обсуждении 26 нояб 2025 Артём топил за pre-install сканер на dev-машинах («сканирование контейнеров — гуд, но проблема возникла локально»), Женя — за GCP-нативное решение («гугла достаточно»).2 Дилемма «Snyk vs Google Cloud Security Command Center» — ложная: оба про vulnerability-сканеры (накопленные CVE), не про детекцию свежей малвари. Реальный gap — pre-install gate и malicious-behavior detection.

Pre-install gate

Задержка установки свежих версий + запрет lifecycle-скриптов. Самый дешёвый и сильный слой — если бы он стоял в ноябре, заражение через @postman/tunnel-agent не прошло бы.

ОпцияПлюсМинусСтоимость
pnpm minimum-release-age + ignore-scripts в .npmrc per-repoработает out-of-box, server не нуженhonor system — новый репо может быть без этого; пакеты с native build (sharp, esbuild) требуют allowlist через onlyBuiltDependencies0
Глобальный ~/.npmrc у разработчиказащищает pet-projects тоже, не только workкаждый настраивает сам, нет enforcement0
Server-side через GAR virtual repoenforce который нельзя обойти даже если разработчик удалил .npmrcтребует setup + per-developer auth, npm-токен живёт 60 мин$3-6/мес

Предлагается — все три параллельно, не как взаимозаменяемые. Per-repo .npmrc + global ~/.npmrc как minimum, GAR proxy сверху как enforce-уровень.

Malicious behavior scanner

Статический анализ кода и метаданных пакета (install-scripts, network calls, обфускация, exec-base64). Ловит свежую малварь до того как она попадёт в advisory-базу.

ОпцияПлюсМинусСтоимость
Socket.dev free PR-чекерbest-in-class покрытие для npm/PyPI, one-click GitHub App, комментирует suspicious в PRдля приватных репо free tier ограничен по числу пользователей/repos — точные лимиты нужно проверить на pricing-странице, для крупного объёма paid (~$200+/мес)200+ paid
GuardDog (Datadog)open source, Semgrep+Yara rules, поддерживает npm и PyPI, CLI встраивается в любой CICLI-only, нужно настраивать самим; CVE-2026-44972 (terminal escape injection из malicious package content) — не запускать на untrusted output локально, только в CI$0
Phylumsimilar к Socketpaid only, не пробовали$$$

Предлагается — Socket free PR-чекер на org + GuardDog в CI как defensive depth. Free + free дублирование не лишнее: каждый покрывает blind-spots другого. Если объём npm install превысит Socket free лимит — рассмотреть Socket Standard. Точные free-tier лимиты Socket для приватных commercial-repo на 2026-05-13 не verified, нужно прочитать pricing-страницу перед раскаткой.

CVE scanner (known vulnerabilities)

После того как пакет уже в lock-file — найти известные CVE с публичными advisory. Не покрывает свежую малварь (advisory выходит позже компрометации), но закрывает накопленные дыры.

ОпцияПлюсМинусСтоимость
OSV-Scanner (Google)мульти-эко (npm/PyPI/Go/Maven/Cargo/Docker), ecosystem-specific matching → низкий FP, OSSCLI, нужно встроить в pre-commit / CI$0
pip-audit (PyPA)official Python tool, OSV + PyUp DBтолько Python$0
pnpm auditвстроенотолько npm advisory DB$0
GAR vulnerability scannercontainer-уровень, prod-образы уже сканируютсяper-container не per-package; биллится отдельно (Artifact Analysis pricing); включён на prod, на stage — нужно verify$0.10/контейнер scan
Snykautofix-PR, dashboardspaid; покрывает в основном слой 3 — не gap; reachability только Java + JS~$200-500/мес
Wiz / Aikidoenterprise UXenterprise pricing$$$$

Предлагается — OSV-Scanner как primary (один tool на оба наших стека) в pre-commit + CI; GAR scanner оставить на контейнерах. Платный Snyk — не блокирует baseline, добавить только если хотим красивые дашборды и autofix-PR.

Централизованный package registry proxy

Между публичным npm/PyPI и командой ставится прокси с server-side policy. Главная польза — enforce задержки и blocklist’а, который разработчик не может локально обойти.

ОпцияПлюсМинусСтоимость
Google Artifact Registry virtual reposмы уже на GCP, Docker registry там же (bg-prod-infra); IAM/gcloud auth настроены; ноль friction setup; мульти-эко npm+PyPI+Dockernpm-токен живёт 60 мин — нужен refresh-helper или alias; cleanup policy и enforce-mechanism для release-age нужно verify$3-6/мес
GitHub Packagesбесплатно для приватных org-repoслабый policy engine — нет server-side release-age, нет custom blocklist$0
Verdaccio (self-hosted)полностью бесплатныйнужно поднимать k8s deployment + persistence + TLS + IAM; только npm; второй point of failureсервер + время
AWS CodeArtifactмульти-эко, аналогичен GARмы не на AWS, кросс-cloud egress$$
JFrog Artifactoryenterprise feature-set$500+/мес начальный план$$$$

Предлагается — Google Artifact Registry virtual repos для npm + PyPI в проекте bg-prod-infra (или отдельный bg-shared-artifacts, решение Жени), регион europe-west4 (со-расположен с GKE). Реальный счёт ~$3-6/мес для нашего объёма (~15 GB npm + ~3 GB PyPI cached); egress в same region бесплатный, CI и GKE качают через GAR без overhead.3

Сводное предложение

Baseline (бесплатно): minimum-release-age + ignore-scripts в ~/.npmrc (глобально у каждого разработчика) + .npmrc в каждом репо + OSV-Scanner в pre-commit и CI + GuardDog в CI + Socket free PR-чекер на org.

Расширение (одобрение Жени): GAR virtual repos как централизованный proxy + container scanning на staging (помимо prod).

Платные платформы (Snyk/Wiz/Aikido/Socket Standard+): отложить, не блокировать baseline. Добавлять только под конкретный requirement.

Следствия

  • Каждый разработчик настраивает ~/.npmrc / ~/.config/uv/uv.toml / устанавливает scanners — см. security-onboarding
  • DevOps создаёт virtual repos в GAR (Terraform-модуль), включает Socket PR-чекер на org, обновляет required workflow в Realai-plus/.github-private
  • В каждом репо .npmrc обновляется (в bloodgpt-frontend и bloodgpt-for-business уже есть; остальные — audit pending)

Открытые вопросы

  • Согласование с Женей (DevOps) и Артёмом (DPO) — оба были в ноябрьском обсуждении, не дошло до решения
  • В каком GCP-проекте поднимать virtual repos — bg-prod-infra vs отдельный bg-shared-artifacts
  • Server-side enforce release-age в GAR — конкретный механизм (cleanup policy vs admission webhook) нужно verify
  • Socket free PR-чекер на private commercial-repo — точные лимиты по объёму, не verified на 2026-05-13
  • Cleanup policy для GAR — какой период unused packages держать в cache
  • Required workflows через Realai-plus/.github-private — какие именно workflow’ы whitelist’им
  • Container CVE scanner на staging — включён или нет (предположение из ноябрьского треда, не verified)

Связано

Сноски

  1. DevOps Sync, 2025-11-28, https://github.com/Realai-plus/meeting-digests/blob/main/data/digest/2025/11/2025-11-28T12%3A00%3A47.000Z_DevOps_Sync_01KB55CNPD7FE6A7964R9WM8E6.md — обсуждались логирование, аудит-логи, регионы; supply-chain не поднимался.

  2. Slack thread в #security-reporting, 2025-11-26, https://realaicorp.slack.com/archives/C09GBEVRQEP/p1764142896295519 — обсуждение tooling-стратегии.

  3. Google Artifact Registry pricing — $0.10/GB/мес после 0.5GB free, egress в той же region бесплатно. https://cloud.google.com/artifact-registry/pricing