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 через onlyBuiltDependencies | 0 |
Глобальный ~/.npmrc у разработчика | защищает pet-projects тоже, не только work | каждый настраивает сам, нет enforcement | 0 |
| Server-side через GAR virtual repo | enforce который нельзя обойти даже если разработчик удалил .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 встраивается в любой CI | CLI-only, нужно настраивать самим; CVE-2026-44972 (terminal escape injection из malicious package content) — не запускать на untrusted output локально, только в CI | $0 |
| Phylum | similar к Socket | paid 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, OSS | CLI, нужно встроить в pre-commit / CI | $0 |
| pip-audit (PyPA) | official Python tool, OSV + PyUp DB | только Python | $0 |
| pnpm audit | встроено | только npm advisory DB | $0 |
| GAR vulnerability scanner | container-уровень, prod-образы уже сканируются | per-container не per-package; биллится отдельно (Artifact Analysis pricing); включён на prod, на stage — нужно verify | $0.10/контейнер scan |
| Snyk | autofix-PR, dashboards | paid; покрывает в основном слой 3 — не gap; reachability только Java + JS | ~$200-500/мес |
| Wiz / Aikido | enterprise UX | enterprise 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+Docker | npm-токен живёт 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 Artifactory | enterprise 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-infravs отдельный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)
Связано
- supply-chain-security — структурный контекст и почему именно эти слои
- security-onboarding — что должен сделать разработчик
- security-incident-response — что делать если случилось
Сноски
-
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 не поднимался. ↩
-
Slack thread в
#security-reporting, 2025-11-26, https://realaicorp.slack.com/archives/C09GBEVRQEP/p1764142896295519 — обсуждение tooling-стратегии. ↩ -
Google Artifact Registry pricing — $0.10/GB/мес после 0.5GB free, egress в той же region бесплатно. https://cloud.google.com/artifact-registry/pricing ↩