Как хранить и получать секреты из хранилища Hashicorp, используя Docker -Comepose? - PullRequest
0 голосов
/ 05 марта 2020

Я настроил экземпляр Hashicorp Vault. Я успешно написал и прочитал секреты от и до него. Запуск Vault и его запуск - самая простая часть. Как мне использовать Vault в качестве хранилища для замены файла .env в docker -compose.yml? Как читать секреты из Vault во всех моих docker -композитных файлах?

Еще сложнее: как мне динамически генерировать ключи для доступа к секретам в Vault, а затем использовать эти ключи в моих файлах docker -compose.yml, не редактируя эти файлы каждый раз при перезапуске стека? Как этот процесс автоматизирован? Короче говоря, как именно я могу использовать Hashicorp Vault для защиты секретов, которые иначе раскрываются в файлах .env?

Я прочитал всю их литературу и сообщения в блогах и не смог найти все, что описывает этот процесс. Я застрял, и любые советы будут с благодарностью.

Примечание. Это не вопрос запуска контейнера Hashicorp Vault с docker -композицией, я уже успешно это сделал.

Также обратите внимание: я не могу изменить сами контейнеры; Я могу изменить только файл docker -compose.yml

1 Ответ

0 голосов
/ 05 марта 2020

Вам нужно будет запросить API хранилища, чтобы заполнить файл .env или точку входа вашего контейнера. Я бы предпочел в худшем случае точку входа в контейнер, а в идеале - прямо в вашем приложении. Причина в том, что секреты хранилища могут быть недолговечными, и любой контейнер, работающий дольше, чем этот период, должен будет переосмыслить sh его секреты.

Если вы go с худшим случаем сделать это в Точка входа, есть несколько инструментов, которые приходят на ум. confd от Kelsey Hightower и gomplate .

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

gomplate будет запущен вашей точкой входа для расширения файла шаблона необходимыми значениями. Этот файл может быть просто env.sh, который вы затем добавляете в свою среду, если вам нужны env vars. Или вы можете запустить его в командной строке как подоболочку, например

your-app --arg "$(gomplate ...sometemplate...)"

Если вы используете эти инструменты только для установки значения один раз, а затем запускаете свое приложение, обязательно настройте проверку работоспособности и / или грациозность выйдите из приложения по истечении срока действия учетных данных. Затем запустите контейнер с оркестровкой (Kubernetes / Swarm Mode) или установите политику перезапуска, чтобы он перезапускался после истечения срока действия любых учетных данных, чтобы получить новые учетные данные.

...