Поддерживаемые протоколы¶
Раздел описывает, какие ресурсы OSA Proxy Go проверяет и какие ответы может модифицировать для каждой экосистемы.
Сводная таблица¶
| Экосистема | Сканирование манифестов | Сканирование пакетов | Модификация ответов |
|---|---|---|---|
| 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 Go проверяет 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 Go.
NuGet¶
- Metadata: service index и registration index.
- Пакеты:
.nupkg. - Для клиента используется маршрут
/nuget-api/v3/index.json; metadata переписывается на URL OSA Proxy Go.
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 Go. Для внешних 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