Admin API и управление
OSA Proxy предоставляет выделенный административный интерфейс (Admin API) для решения задач эксплуатации: просмотра интерактивной документации Swagger UI, оперативной очистки кэша проверок, мониторинга состояния реплик и централизованного управления конфигурацией.
По умолчанию Admin API отключен и работает на отдельном сетевом адресе (по умолчанию 127.0.0.1:8081). Это позволяет изолировать административные функции от пользовательского трафика загрузки пакетов.
Включение Admin API
Для включения Admin API задайте секцию admin в osa-proxy.yml:
Настройка токена администратора
Все административные методы /api/v1/... защищены Bearer-токеном. В конфигурации хранится только SHA-256 хэш токена в нижнем регистре, а сам секретный токен передается клиентом в заголовке запроса.
Чтобы сгенерировать хэш для выбранного секрета (например, my-admin-secret-token):
Полученную строку укажите в admin.token-hash. Чтобы передать её через
переменную окружения OSA_PROXY_ADMIN_TOKEN_HASH, добавьте ссылку на неё в YAML:
Admin API использует обычный HTTP. В production-окружении не публикуйте порт 8081 наружу напрямую. Используйте внутреннюю сеть, NetworkPolicy в Kubernetes или терминируйте TLS на доверенном reverse proxy с ограничением доступа по IP.
Swagger UI и спецификация OpenAPI
При включенном admin.enabled: true на адресе административного сервера доступны:
GET /swagger/— веб-интерфейс Swagger UI для интерактивного тестирования запросов. В интерфейсе можно нажать кнопку Authorize и ввести ваш Bearer-токен;GET /openapi.json— полная спецификация OpenAPI 3 в формате JSON;GET /healthz— проверка работоспособности административного сервера.
Эти три endpoint не требуют авторизации для базового просмотра, но вызовы методов API внутри Swagger UI требуют ввода Bearer-токена.
Очистка кэша вердиктов
Если для пакета изменился статус в CodeScoring или требуется принудительно повторить проверку, записи можно удалить из Redis-кэша без перезапуска сервиса.
Для вызова этих методов передайте токен в заголовке Authorization: Bearer <токен>:
Удаление конкретных PURL
Метод DELETE /api/v1/cache/purls удаляет вердикты для перечисленных Package URL (PURL):
Пример успешного ответа:
Удаление по типу пакета и имени
Метод DELETE /api/v1/cache/packages/{packageType} позволяет удалить все записи кэша для экосистемы или конкретной библиотеки:
Дополнительно поддерживается фильтрация по параметрам repositoryName и repositoryManagerUrl для точечной очистки в контексте Artifactory или Nexus (должны передаваться оба параметра одновременно).
Мониторинг состояния и маршрутов
Admin API позволяет проверить текущий статус реплик и список активных репозиториев:
Статус сервиса
Запрос GET /api/v1/status возвращает состояние хранилища конфигураций, активность реплик и номер текущей ревизии:
Список активных репозиториев
Запрос GET /api/v1/runtime/repositories возвращает полный список маршрутов, которые обслуживает данный инстанс OSA Proxy (включая статические из YAML и динамические, найденные через Artifactory или Nexus discovery).
Поддерживаются параметры фильтрации:
source— фильтр по источнику (yaml,managed,artifactory,nexus);package_type— тип пакета (например,npm,maven,pypi,docker);state— статус маршрута (desired,active,observed,skipped,unsupported,conflicting,failed,stale,inactive);text— поиск по подстроке в имени репозитория или upstream URL.
Централизованное хранилище конфигурации (Configuration Store)
По умолчанию OSA Proxy читает настройки из файла osa-proxy.yml на диске. При необходимости изменять параметры репозиториев, webhooks и поведение CodeScoring «на лету» без перезапуска подов можно включить централизованное хранилище в Redis.
Настройка Configuration Store
Если блок redis внутри configuration-store не задан, сервис переиспользует подключение из секции cache.redis. При необходимости можно задать только redis-db: 1 для использования отдельной базы в том же инстансе Redis.
replica-identity идентифицирует heartbeat и lease-записи. Если параметр не
задан, OSA Proxy использует hostname, а при его недоступности — сгенерированный
process identity. Helm chart передаёт имя pod через
OSA_PROXY_REPLICA_IDENTITY.
accept-unsafe-durability)
OSA Proxy при запуске проверяет, что Redis настроен для персистентного хранения без потери данных: директива maxmemory-policy должна иметь значение noeviction, а также включено сохранение на диск (appendonly yes или RDB snapshots через save). Если Redis не удовлетворяет этим требованиям, сервис завершится с ошибкой надежности. Чтобы разрешить запуск с ненадежной конфигурацией Redis (например, в тестовых окружениях), укажите accept-unsafe-durability: true.
При первом запуске с пустым хранилищем OSA Proxy автоматически импортирует начальные параметры из локального osa-proxy.yml и создаёт ревизию 1. После этого хранилище становится приоритетным источником конфигурации.
Чтение и изменение настроек через API
GET /api/v1/configuration— получение полного снимка текущей целевой конфигурации (в формате JSON) со сводным заголовкомETag(формат"revision-<N>:sha256:...");/api/v1/configuration/repositories/{package_type}— репозитории выбранного типа пакета (npm,maven,ivy,nuget,pypi,composer,ruby,cocoapods,swift,conan,go,hex,r,debian,alpine,rpm,docker);/api/v1/configuration/codescoring— параметры интеграции с CodeScoring (режим работы, блокировка, сообщения);/api/v1/configuration/layouts— шаблоны путей для репозиториев;/api/v1/configuration/discovery/artifactoryи/discovery/nexus— настройки автоматического обнаружения репозиториев;/api/v1/configuration/webhooks— подписки на события webhooks (подробнее см. в Настройка webhooks).
Защита от конфликтов через ETag
Все операции изменения конфигурации используют заголовок If-Match. Это исключает ситуацию, когда два администратора случайно перезаписывают изменения друг друга:
-
Выполните
GET-запрос нужной секции и сохраните заголовокETagиз ответа: -
Отправьте
PUT-запрос с обновленным телом, передав точное значение ETag в заголовкеIf-Match:
Если за время между запросами конфигурация была изменена кем-то другим, сервер вернет статус 409 Conflict. В этом случае повторите чтение, проверьте изменения и отправьте запрос заново.
История изменений и откат
Каждое изменение создаёт новую ревизию. Вы можете просмотреть историю ревизий и при необходимости мгновенно откатить настройки:
-
GET /api/v1/configuration/revisions— список сохраненных ревизий; -
GET /api/v1/configuration/revisions/{revision}— просмотр отдельной сохраненной ревизии; -
POST /api/v1/configuration/revisions/{revision}/rollback— откат к указанной ревизии. Запрос требует передачи заголовкаIf-Matchс текущим сводным ETag всей конфигурации (изGET /api/v1/configuration): -
GET /api/v1/configuration/export— экспорт всей текущей конфигурации в формате YAML (секреты автоматически заменяются на переменные окружения). Выгруженный файл можно использовать как основу дляosa-proxy.yml.
