Поддерживаемые протоколы

Реализация OSA Proxy

Эта страница относится к текущей реализации OSA Proxy. Архивная Java/Spring-реализация доступна в разделе Архивная Java/Spring-реализация.

Раздел описывает, какие ресурсы OSA Proxy проверяет и какие ответы может модифицировать для каждой экосистемы.

Сводная таблица

ЭкосистемаСканирование манифестовСканирование пакетовМодификация ответов
MavenДаДаУдаление заблокированных версий из maven-metadata.xml, обновление latest и release.
npmДаДаУдаление заблокированных версий из metadata, обновление dist-tags и ссылок на tarball.
PyPIДаДаУдаление ссылок на заблокированные версии из Simple API, переписывание URL загрузки через прокси.
NuGetДаДаМодификация service index и registration metadata, удаление заблокированных версий.
Go modulesДаДаУдаление заблокированных версий из @v/list, проксирование module zip и SumDB.
ComposerДаДаМодификация metadata Packagist/Composer и переписывание dist URL через прокси.
RubyGemsДаДаПроверка metadata RubyGems и скачиваемых .gem-пакетов.
DebianНетДаСистемные индексы Packages не модифицируются.
Alpine (APK)НетДаИндексы APKINDEX не модифицируются.
RPMНетДаMetadata repodata не модифицируется.
DockerДаНетПроверка image manifest; manifest list используется для определения image manifest и не отправляется на проверку как отдельный компонент. Blob/layer-запросы проксируются без отдельной проверки слоев. Для нескольких Docker-репозиториев используются поддомены.

Параметры scan-manifest и scan-package

scan-manifest включает проверку и модификацию metadata, из которой пакетный менеджер выбирает доступные версии. При срабатывании блокирующей политики небезопасные версии удаляются из ответа или помечаются как заблокированные, если формат это поддерживает.

scan-package включает проверку скачиваемого артефакта: архива, бинарного пакета, module zip, .gem, .deb, .apk или .rpm. Если политика блокирует компонент, скачивание прерывается с HTTP-кодом из codescoring.block-status-code.

Для Debian, Alpine и RPM используется только scan-package: системные индексы не изменяются, поэтому пакетный менеджер может видеть версию в индексе, но скачивание конкретного пакета будет заблокировано при нарушении политики.

Для Docker параметры scan-manifest и scan-package не используются в конфигурации репозитория. OSA Proxy проверяет Docker image manifest. Manifest list используется для определения image manifest и не отправляется на проверку как отдельный компонент; blob/layer-запросы проксируются в registry.

Maven

  • Metadata: maven-metadata.xml.
  • Пакеты: .jar, .war, .ear и другие Maven-артефакты.
  • При модификации metadata заблокированные версии удаляются из списка, а поля latest и release обновляются на последнюю разрешенную версию.

npm

  • Metadata: JSON-описание пакета.
  • Пакеты: .tgz.
  • Из metadata удаляются заблокированные версии, связанные записи time, а dist-tags пересчитываются на разрешенные версии.

PyPI

  • Metadata: страницы Simple API.
  • Пакеты: .whl, .tar.gz, .zip и другие архивы Python-пакетов.
  • Ссылки на заблокированные версии удаляются, URL загрузки переписываются так, чтобы скачивание проходило через OSA Proxy.

NuGet

  • Metadata: service index и registration index.
  • Пакеты: .nupkg.
  • Для клиента используется маршрут /nuget-api/v3/index.json; metadata переписывается на URL OSA Proxy.

Go modules

  • Metadata: список версий @v/list.
  • Пакеты: module .zip.
  • Заблокированные версии удаляются из списка версий. Для SumDB используется sumdb-registry и настройка GOSUMDB.

Composer

  • Metadata: Composer/Packagist metadata.
  • Пакеты: dist-архивы .zip, .tar, .tgz, .tar.gz, .tar.bz2, .tar.xz.
  • Dist URL переписываются на маршруты OSA Proxy. Для внешних dist-хостов используйте packages-registry и additional-packages-registries.

RubyGems

  • Metadata: индексы RubyGems.
  • Пакеты: .gem.
  • Проверяются metadata и скачиваемые gem-пакеты.

Docker

  • Metadata: Docker image manifest. Manifest list используется для определения image manifest.
  • Пакеты: отдельного scan-package нет; blob/layer-запросы проксируются дальше в registry.
  • Docker использует стандартные endpoints /v2/... и /token, поэтому несколько Docker-репозиториев разделяются по поддоменам, а не по первому сегменту пути.

Диагностика блокировки

Если пакетный менеджер не показывает причину блокировки, проверьте соответствующий metadata endpoint напрямую:

curl https://osa-proxy.example.com/npm/lodash
curl https://osa-proxy.example.com/pypi/simple/requests/
curl https://osa-proxy.example.com/maven/org/apache/commons/commons-lang3/maven-metadata.xml
curl https://osa-proxy.example.com/nuget/nuget-api/v3/registration5-gz-semver2/newtonsoft.json/index.json
curl https://osa-proxy.example.com/go/github.com/gin-gonic/gin/@v/list
Страница была полезна?