Как безопасно использовать git clone / pip, установить частный репозиторий в мой образ докера? - PullRequest
1 голос
/ 01 мая 2019

У меня есть личный репозиторий, содержащий пакеты, которые я хочу установить pip.Я потратил довольно много времени, читая на различных форумах и в статьях о различных способах безопасного выполнения этого.Кажется, нет единого мнения о том, как лучше всего это сделать (если это вообще возможно).Я, очевидно, не хочу раскрывать какие-либо ключи / секреты ssh в моем докер-файле - я хочу быть осторожным, чтобы сделать их доступными через историю докеров.

1 Ответ

0 голосов
/ 01 мая 2019

Как объяснено в " Безопасное создание небольшого образа докера Python из частных репозиториев git ", вам нужно будет использовать с Docker 18.09 +

  • --ssh
    Вы можете использовать флаг --ssh, чтобы переслать ваш существующий ключ агента SSH сборщику. Вместо передачи данных ключа докер просто уведомит сборщика о том, что такая возможность доступна.
    Теперь, когда сборщику требуется доступ к удаленному серверу через SSH, он перезвонит клиенту и попросит его подписать конкретный запрос, необходимый для этого соединения.
    Сам ключ никогда не покидает клиента, и как только команда, запросившая доступ, завершится, на стороне сборщика не появляется никакой информации для восстановления этого удаленного соединения позже .

  • Секреты
    Предоставляет параметр монтирования во время сборки в /var/run/secrets, доступный только для команды, которая его использовала, и не включена в созданный слой.

То есть:

docker build --ssh github_ssh_key=/path/to/.ssh/git_ssh_id_rsa .

с этой командой используется только соединение агента, но не фактическое содержимое закрытого ключа.
никакие другие команды / шаги в Dockerfile не будут иметь к нему доступа.

Dockerfile, на первом этапе многоступенчатой, даст имя ключа github_ssh_key, чтобы мы могли использовать его при вызове docker build:

RUN --mount=type=ssh,id=github_ssh_key pip wheel \
    --no-cache \
    --requirement requirements.txt \
--wheel-dir=/app/wheels

ОП Хесус Гарсия сообщил (в комментариях), что это работает:

Мне пришлось использовать 2 отдельные команды RUN.

Я не уверен, является ли это ограничением этой новой функции или способом, которым я пытался объединить несколько команд в моем RUN, но я продолжал получать сообщение об ошибке отказа в доступе с помощью публичного ключа, когда добавлял его как other commands && /bin/sh -c "mount=type=ssh,id=github_ssh_key pip install private-repo" против RUN --mount=type=ssh,id=github_ssh_key pip install private-repo && more commands ...

...