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