Как лучше хранить секреты в git-хранилище?
проблема
Считайте это дерево файлов моим репозиторием разработки.
- фу / - .git/ - [...] - бар/ - backupclient.py - supersecretstoragecredentials.ini
Для развития, supersecretstoragecredentials.ini
должен быть заполнен действительными учетными данными - хотя мне все еще нужно хранить его чистую версию в хранилище, чтобы другие пользователи могли легко установить свои учетные данные.
Возможные решения
.gitignore
supersecretstoragecredentials.ini
и создатьsupersecretstoragecredentials.ini-example
,- поручить пользователю копировать
supersecretstoragecredentials.ini-example
вsupersecretstoragecredentials.ini
,
- поручить пользователю копировать
- Добавьте переопределенное местоположение файла конфигурации в
backup.py
который игнорируется git, напримерsupersecretstoragecredentials_local.ini
,
Как отметил Кан, эти два решения схожи, но не полностью одинаковы с точки зрения рабочего процесса.
есть ли другие альтернативы? Есть ли git
обладаете какой-то функциональностью, чтобы помочь с такими проблемами?
5 ответов
Проверьте в файле supersecretstoragecredentials.ini некоторые значения заполнителей, а затем
git update-index --assume-unchanged supersecretstoragecredentials.ini
Git не будет отслеживать будущие изменения в этом файле.
Вы можете сбросить это с помощью
git update-index --no-assume-unchanged supersecretstoragecredentials.ini
То, что вы описываете в варианте 1, в основном охватывается smudge
шаг драйвера фильтра содержимого.
У вас есть два варианта, представленные в вопросе " Как работать с раскрывающейся библиотекой?".
сценарий размазывает supersecretstoragecredentials.ini-example
(версия), скопируйте его как supersecretstoragecredentials.ini
(не поддерживается версиями, игнорируется Git) и заполняет его значения из другого источника.
Но помимо технического аспекта того, как вы будете реализовывать свою политику, основная мера состоит в том, чтобы убедиться, что ваши секретные значения вообще не хранятся в репозитории Git, а поступают из другой референции.
Я использую ваше решение (ваши два решения одинаковы, отличаются только имена файлов). Есть ли у вас проблемы с этим? Какую функциональность вы ожидаете?
Также есть более интересное решение
git update-index --assume-unchanged supersecretstoragecredentials.ini
Надеюсь, это то, что вы хотите. Тем не менее, произойдет сбой, если вышестоящий поток изменит файл и вы извлекаете изменения (не совсем уверены, хорошо это или плохо).
По моему опыту, после того, как вы опробовали все варианты, перечисленные в вашем вопросе и в ответах, ваш вариант № 2 оказался самым простым и чистым. Он решает проблему надежно, с наименьшим количеством магии, и легче всего понять. Это скучно в лучшем виде.
То, что я сейчас испытываю, - это секреты.
https://github.com/awslabs/git-secrets
Он подключается к процессу git commit и проверяет шаблоны, которые выглядят как учетные данные, которые не должны регистрироваться.
Вы должны убедиться, что он установлен в системе каждого разработчика и настроен для каждого репозитория git. Этого можно достичь достаточно легко, если вы включите проверку в процесс сборки.