Настройка Hex
OSA Proxy поддерживает сканирование Hex-пакетов и подписанных protobuf-манифестов. При сканировании манифеста сервис проверяет подпись upstream-репозитория, обрабатывает версии и подписывает изменённый ответ собственным RSA-ключом.
Настройка OSA Proxy
Создайте стабильный RSA-ключ и храните его в secret storage:
Не генерируйте новый ключ при каждом запуске OSA Proxy. После смены ключа клиенты с сохранённым старым публичным ключом перестанут принимать подписанные манифесты. Все реплики OSA Proxy должны использовать один и тот же приватный ключ.
Ключ можно передать строкой через signing-private-key или указать путь к
PEM-файлу через signing-private-key-file. Например, для секрета из Vault:
Для смонтированного файла используйте:
Если заданы оба параметра, signing-private-key имеет приоритет, а файл не
читается. Один из двух параметров обязателен, когда хотя бы у одного Hex-репозитория
включён scan-manifest.
Публичную часть ключа настраивать не нужно: OSA Proxy вычисляет её при запуске и отдаёт по адресу /{repository-name}/public_key. Публичный ключ upstream-репозитория сервис также получает автоматически и хранит только в памяти.
Подключение Mix
Для примера репозиторий OSA Proxy доступен по адресу https://osa-proxy.example.com/codescoring-hex.
Команда mix hex.repo add создаёт локальный alias osa-proxy, через который Hex получает политику зависимостей. Команда mix hex.repo set направляет запросы к стандартному репозиторию hexpm через OSA Proxy.
Режим remove-blocked-versions: false
По умолчанию remove-blocked-versions: true: OSA Proxy физически удаляет заблокированный release из protobuf-манифеста.
При false release остаётся в манифесте и получает стандартную отметку Hex retired: security. В сообщении указывается имя блокирующей политики CodeScoring. Сама отметка retired показывает предупреждение, но не запрещает Hex установить версию. Поэтому для блокировки при resolution необходимо включить встроенную подписанную policy OSA Proxy. Требуется Hex 2.5 или новее.
Включить policy для одной команды:
Или сохранить её в конфигурации Hex:
В значении osa-proxy/codescoring:
osa-proxy— локальное имя репозитория из командыmix hex.repo add;codescoring— имя встроенной policy.
Hex получает policy запросом GET https://osa-proxy.example.com/codescoring-hex/policies/codescoring. Policy исключает из нового resolution версии с причиной retirement security, включая версии, которые были отмечены так upstream-репозиторием.
Policy не заменяет версии, уже записанные в mix.lock. Для проверки блокировки выполните resolution без старого lock-файла или используйте чистое окружение. При успешной фильтрации Hex выводит, что policy скрыла версию, и выбирает следующую разрешённую версию.
