OSA Proxy Go¶
OSA Proxy Go — это Go-версия прокси-сервиса для пакетных реестров с проверками CodeScoring OSA. Сервис принимает запросы пакетных менеджеров, проксирует их в upstream-реестры, проверяет манифесты и скачиваемые артефакты, блокирует запрещенные компоненты и отдает служебные endpoints для healthcheck, метрик, Swagger UI и управления кэшем.
Поддерживаемые экосистемы¶
OSA Proxy Go поддерживает следующие типы реестров:
- npm;
- Composer;
- Maven;
- NuGet;
- PyPI;
- RubyGems;
- Go modules;
- Debian;
- Alpine;
- RPM;
- Docker Registry API v2.
Альтернативные репозитории
OSA Proxy Go может работать не только с публичными реестрами, но и с менеджерами репозиториев, которые реализуют протоколы соответствующих экосистем, например Sonatype Nexus Repository, JFrog Artifactory или CodeScoring.Save.
Основные возможности¶
Сканирование манифестов и пакетов¶
Для поддерживаемых экосистем доступны два уровня проверки:
- сканирование манифестов — анализ metadata/индексов пакетов и исключение заблокированных политиками версий из ответа пакетному менеджеру;
- сканирование пакетов — проверка скачиваемых архивов, бинарных пакетов или образов перед передачей клиенту.
Поддержка уровней зависит от экосистемы. Например, npm, Maven, NuGet, PyPI, Go, Composer и RubyGems поддерживают проверку metadata и пакетов, а Debian, Alpine и RPM — проверку скачиваемых пакетов без модификации системных индексов.
Блокировка небезопасных компонентов¶
Если компонент нарушает политики безопасности, OSA Proxy Go может удалить небезопасные версии из metadata, заблокировать скачивание артефакта и вернуть настраиваемый HTTP-код блокировки.
Модификация ответов¶
При включенном сканировании манифестов сервис модифицирует ответы upstream-реестров: удаляет заблокированные версии, обновляет ссылки на скачивание через прокси и сохраняет формат ответа, ожидаемый пакетным менеджером.
Кэширование вердиктов¶
Для снижения нагрузки на CodeScoring и ускорения повторных запросов OSA Proxy Go поддерживает Redis-кэш результатов проверки Judge. Кэш выключен по умолчанию и настраивается в секции cache.
Маршруты¶
Для всех экосистем, кроме Docker, имя маршрута берется из поля name в секции repository файла osa-proxy.yml.
| Тип реестра | Форма маршрута |
|---|---|
| npm, Composer, Maven, NuGet, PyPI, Ruby, Go, Debian, Alpine, RPM | GET /{repository-name}/{path...} |
| Docker | /v2/{path...} и GET /token |
Например, репозиторий npm с именем npm будет доступен по адресу:
Docker-режим использует стандартные endpoints Docker Registry API v2 и не добавляет имя репозитория в путь:
Служебные endpoints¶
| Endpoint | Назначение |
|---|---|
GET /healthz |
Проверка, что процесс OSA Proxy Go запущен. |
GET /metrics |
Метрики в формате Prometheus. |
GET /api/v3/api-docs |
OpenAPI JSON. |
GET /api/swagger/ |
Swagger UI. |
DELETE /api/cache/purls |
Удаление конкретных PURL из кэша вердиктов. |
DELETE /api/cache/packages/{packageType} |
Удаление записей кэша по типу пакета, имени пакета или repository context. |
Режимы работы¶
Поведение проверки задается параметром work-mode. Его можно указать глобально в codescoring.work-mode и переопределить для конкретного репозитория через repository[*].work-mode.
warmup— разогрев кэша без блокировки компонентов;spectator— разогрев кэша и сохранение результатов запросов без блокировки;moderate— блокировка по политикам, загрузка непросканированных компонентов разрешена;strict— блокировка по политикам, загрузка непросканированных компонентов запрещена;strict_wait— блокировка по политикам с ожиданием проверки для непросканированных компонентов.