Ответ 1
Обновление в январе 2017 года:
Докер (рой) 1.13 имеет docker secret
.
Однако, поскольку прокомментировал Стив Хоффман (bacoboy
):
[...] Секретная команда помогает только пользователям роялить не более общее решение (например, с прикреплением постоянных томов).
Как вы управляете своими секретами (то, что они есть и кто имеет к ним доступ) очень зависит от системы и зависит от того, какие биты платного и/или OSS вы собираете вместе, чтобы создать свою "платформу".
С Docker компания переходит на предоставление платформы, я не удивлен, что их первая реализация - это рой, основанный так же, как Hashicorp интегрирует Vault в Atlas - это имеет смысл.Действительно, как передаются секреты, выходит за пределы пространства
docker run
.
AWS делает такие вещи с ролями и политиками для предоставления разрешений на отказ/отказ и SDK.
Шеф-повар делает это с использованием зашифрованных баз данных и криптовальной "начальной загрузки" на auth.
У K8S есть своя версия того, что только что было выпущено в 1.13.
Я уверен, что mesos добавит подобную реализацию вовремя.Эти реализации, похоже, попадают в 2 лагеря.
- передать секрет с помощью тома, которое предоставляет "платформа" или (секрет шеф-повара/докера/k8s
- передать учетные данные, чтобы поговорить с внешней службой, чтобы получить вещи при загрузке (iam/credstash/etc)
Оригинальный ответ: ноябрь 2015 г.
Это было введено в commit 54240f8 (docker 1.9, ноябрь 2015 г.), из PR 15182,
Среда сборки добавляется к командной строке промежуточного континента для помощи в поиске кеша.
Это также помогает отслеживать структуру. Но это также делает функцию менее безопасной с точки зрения передачи тайнов времени сборки.
проблема 13490 повторяет:
Переменные окружения времени сборки: переменные среды времени построения не были предназначены для обработки секретов. Из-за отсутствия других вариантов люди планируют использовать их для этого. Чтобы не создавать впечатление, что они подходят для секретов, было решено умышленно не шифровать эти переменные в процессе.
Как упоминалось в 9176 комментарии:
env - неправильный способ передачи секретов. Мы не должны пытаться изобретать колесо и предоставлять механизм защиты от несанкционированного доступа прямо из коробки.
Когда вы храните секретные ключи в среде, вы склонны случайно их подвергать - именно то, чего мы хотим избежать:
- Учитывая, что среда неявно доступна для процесса, невероятно сложно, если не невозможно, отслеживать доступ и как содержимое подвергается воздействию
- Это невероятно распространено, когда приложения захватывают всю среду и распечатывают ее, поскольку она может быть полезна для отладки или даже отправлять ее как часть отчета об ошибке. Так много секретов просочилось в PagerDuty, что у них есть хорошо смазанный внутренний процесс, чтобы очистить их от их инфраструктуры.
- Переменные среды передаются дочерним процессам, что позволяет непреднамеренный доступ и нарушает принцип наименьших привилегий. Представьте, что в рамках вашего приложения вы обращаетесь к стороннему инструменту, чтобы выполнить какое-либо действие, и вдруг сторонний инструмент имеет доступ к вашей среде, и бог знает, что он с ним сделает.
- Это очень часто встречается для приложений, которые приводят к сбою для хранения переменных среды в лог файлах для последующей отладки. Это означает секреты в текстовом формате на диске.
- Включение секретов в переменные env быстро превращается в племенные знания. Новые инженеры не знают, что они есть, и не знают, что они должны быть осторожны при обработке переменных окружения (их фильтрации в подпроцессы и т.д.).
В целом, секреты в переменных env нарушают принцип наименьшего удивления, являются плохой практикой и приведут к возможной утечке секретов.