Какова наилучшая практика хранения секретов из репозитория 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. Этого можно добиться достаточно легко, если вы интегрируете проверку в процесс сборки.