От новичка до гуру: Курсы программирования на CyberDuff

Docker: поделиться закрытым ключом через аргументы

Я хочу поделиться своим закрытым ключом github с контейнером докеров.

Я думаю о том, чтобы поделиться им через docker-compose.yml через ARG.

Можно ли поделиться закрытым ключом с помощью ARG, как описано здесь? Передать переменную в Dockerfile из файл docker-compose.yml

# docker-compose.yml file

version: '2'

services:
  my_service:
    build:
      context: .
      dockerfile: ./docker/Dockerfile
      args:
        - PRIVATE_KEY=MULTI-LINE PLAIN TEXT RSA PRIVATE KEY 

а затем я ожидаю использовать его в моем Dockerfile как:

ARG PRIVATE_KEY
RUN echo $PRIVATE_KEY >> ~/.ssh/id_rsa 
RUN pip install git+ssh://[email protected]/...

Возможно ли это через ARG?


  • Вы хотите, чтобы закрытый ключ хранился в образе или вы хотите сохранить его в секрете? 15.03.2017
  • Закрытый ключ внутри образа не рекомендуется, поскольку его легко добавить в общедоступный реестр. Пожалуйста, рассмотрите возможность сохранения этого извне, либо с секретом, введенной переменной среды, которая обрабатывается вашей точкой входа, либо в виде тома. 15.03.2017
  • @Matt, я ищу более безопасное решение, но не уверен, какое из них лучше. 16.03.2017

Ответы:


1

Если вы можете использовать последнюю версию докера 1.13 (или 17.03 ce), вы можете использовать секрет роя докеров: см. docker-swarm-clusters/" rel="nofollow noreferrer">Управление секретами в кластерах Docker Swarm"

Это позволяет вам связать секрет с контейнером, который вы запускаете:

docker service create --name test \
    --secret my_secret \
    --restart-condition none \
    alpine cat /run/secrets/my_secret

Если docker swarm в вашем случае не подходит, попробуйте настроить помощник по учетным данным docker.
См. "Избавление от Учетные данные Docker в виде обычного текста". Но это может не относиться к частному ключу ssh.


Вы можете проверить другие соответствующие параметры в "Secrets and LIE-abilities: The State of Modern Secret Management (2017)", используя автономный менеджер секретов, такой как Хранилище Hashicorp.

15.03.2017

2

Хотя сам ARG не будет сохраняться в построенном образе, когда вы ссылаетесь на переменную ARG где-то в Dockerfile, это будет в истории:

FROM busybox
ARG SECRET
RUN set -uex; \
    echo "$SECRET" > /root/.ssh/id_rsa; \
    do_deploy_work; \
    rm /root/.ssh/id_rsa

Как отмечает VonC, теперь есть функция роя для хранения секретов и управления ими, но это (пока) не решает проблему времени сборки. .

Строит

Выход в Docker ~ 1.14 (или любое другое эквивалентное название новой версии) должен быть отмечен флагом --build-secret (также #28079), который позволяет монтировать секретный файл во время сборки.

В то же время, одно из решений состоит в том, чтобы запустить сетевую службу где-нибудь, где вы можете использовать клиента для извлечения секретов во время сборки. Затем, если сборка помещает секрет в файл, например ~/.ssh/id_rsa, файл необходимо удалить до завершения шага RUN, на котором он был создан.

Самое простое решение, которое я видел, это обслуживание файла с nc:

docker network create build
docker run --name=secret \
   --net=build \
   --detach \
   -v ~/.ssh/id_rsa:/id_rsa \
   busybox \
   sh -c 'nc -lp 8000 < /id_rsa'
docker build --network=build .

Затем соберите секрет, сохраните его, используйте и удалите на шаге Dockerfile RUN.

FROM busybox
RUN set -uex; \
    nc secret 8000 > /id_rsa; \
    cat /id_rsa; \
    rm /id_rsa

Проекты

Существует ряд утилит, которые имеют ту же самую предпосылку, но с различными уровнями сложности/функций. Некоторые из них являются универсальными решениями, такими как Hashicorps Vault.

16.03.2017
Новые материалы

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

Все о кейсах: Camel, Snake, Kebab & Pascal
В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..