Токен, переданный через ARG, считается скомпрометированным
Чтобы ставить пакеты из приватного репозитория, в пайплайне сделали так:
FROM python:3.12-slim
ARG NEXUS_TOKEN
RUN pip install --index-url https://ci-user:$NEXUS_TOKEN@nexus.internal/simple -r requirements.txt
COPY . /app
Токен передаётся через --build-arg NEXUS_TOKEN=$CI_NEXUS_TOKEN, в ENV он не попадает. Готовый образ пушится во внутренний реестр, доступный всем командам.
Как оценивать такую схему с точки зрения безопасности?
- Схема безопасна: `ARG` существует только во время сборки, в готовый образ значение не сохраняется, а промежуточные контейнеры сборки удаляются вместе с ним
- Схема безопасна, пока значение не продублировано в `ENV`: в итоговый образ попадают именно переменные окружения, а всё остальное остаётся на сборочной машине
- Токен виден в истории слоёв образа: любой, кто скачает образ из реестра, прочитает команду вместе со значением — токен нужно ротировать, а сборку перевести на build secrets
- Риска нет: слой с `pip install` перезаписывается последующим `COPY`, и команда из истории исчезает
