Перейти к содержанию

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 будет доступен по адресу:

https://osa-proxy.example.com/npm/

Docker-режим использует стандартные endpoints Docker Registry API v2 и не добавляет имя репозитория в путь:

docker pull osa-proxy.example.com/library/alpine:latest

Служебные 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 — блокировка по политикам с ожиданием проверки для непросканированных компонентов.
Страница была полезна?