вторник, 16 марта 2021 г.

Модули в Golang: частные модули, конфиденциальность

Команда go может загружать модули и метаданные с прокси-серверов модулей и систем контроля версий. Переменная среды GOPROXY определяет, какие серверы используются. Переменные среды GOPRIVATE и GONOPROXY управляют тем, какие модули выбираются из прокси.

Значение GOPROXY по умолчанию:

https://proxy.golang.org,direct

С этой настройкой, когда команда go загружает модуль или метаданные модуля, она сначала отправляет запрос на proxy.golang.org, публичный прокси-сервер модуля, управляемый Google (политика конфиденциальности). Команда go не передает личную информацию, но передает полный путь к модулю, который запрашивается. Если прокси-сервер отвечает статусом 404 (Not Found) или 410 (Gone), команда go попытается подключиться напрямую к системе контроля версий, предоставляющей модуль.

Переменные среды GOPRIVATE или GONOPROXY могут быть установлены в списки glob шаблонов, соответствующих префиксам модулей, которые являются частными и не должны запрашиваться ни с одного прокси. Например:

GOPRIVATE=*.corp.example.com,*.research.example.com

GOPRIVATE просто действует по умолчанию для GONOPROXY и GONOSUMDB, поэтому нет необходимости устанавливать GONOPROXY, если GONOSUMDB не должно иметь другое значение. Когда путь к модулю совпадает с GONOPROXY, команда go игнорирует GOPROXY для этого модуля и извлекает его непосредственно из своего репозитория управления версиями. Это полезно, когда прокси-сервер не обслуживает частные модули.

Если есть доверенный прокси, обслуживающий все модули, то GONOPROXY не следует устанавливать. Например, если для GOPROXY задан один источник, команда go не будет загружать модули из других источников. GONOSUMDB все равно должен быть установлен в этой ситуации.

GOPROXY=https://proxy.corp.example.com
GONOSUMDB=*.corp.example.com,*.research.example.com

Если есть доверенный прокси-сервер, обслуживающий только частные модули, GONOPROXY не следует устанавливать, но необходимо позаботиться о том, чтобы прокси-сервер отвечал правильными кодами состояния. Например, рассмотрим следующую конфигурацию:

GOPROXY=https://proxy.corp.example.com,https://proxy.golang.org
GONOSUMDB=*.corp.example.com,*.research.example.com

Предположим, что из-за опечатки разработчик пытается загрузить несуществующий модуль.

go mod download corp.example.com/secret-product/typo@latest

Команда go сначала запрашивает этот модуль с proxy.corp.example.com. Если этот прокси-сервер отвечает 404 (Not Found) или 410 (Gone), команда go вернется к proxy.golang.org, передав путь секретного продукта в URL-адресе запроса. Если частный прокси-сервер отвечает любым другим кодом ошибки, команда go распечатывает ошибку и не будет обращаться к другим источникам.

Помимо прокси, команда go может подключаться к базе данных контрольных сумм для проверки криптографических хешей модулей, не перечисленных в go.sum. Переменная среды GOSUMDB устанавливает имя, URL-адрес и открытый ключ базы данных контрольных сумм. Значение GOSUMDB по умолчанию - sum.golang.org, общедоступная база данных контрольных сумм, управляемая Google (политика конфиденциальности). Как и в случае с прокси, команда go не передает личную информацию, но передает полный путь к запрошенному модулю, а база данных контрольных сумм не может вычислять контрольные суммы для непубличных модулей.

Переменная среды GONOSUMDB может быть установлена на шаблоны, указывающие, какие модули являются частными и не должны запрашиваться из базы данных контрольных сумм. GOPRIVATE действует по умолчанию для GONOSUMDB и GONOPROXY, поэтому нет необходимости устанавливать GONOSUMDB, если только GONOPROXY не имеет другого значения.

Прокси-сервер может отражать базу данных контрольных сумм. Если это делает прокси в GOPROXY, команда go не будет напрямую подключаться к базе данных контрольных сумм.

GOSUMDB может быть отключен (off), чтобы полностью отключить использование базы данных контрольных сумм. С этим параметром команда go не будет аутентифицировать загруженные модули, если они еще не находятся в go.sum.


Читайте также:


Комментариев нет:

Отправить комментарий