Как лучше хранить секреты в git-хранилище?

проблема

Считайте это дерево файлов моим репозиторием разработки.

 - фу /
   - .git/
     - [...]
   - бар/
     - backupclient.py
   - supersecretstoragecredentials.ini

Для развития, supersecretstoragecredentials.ini должен быть заполнен действительными учетными данными - хотя мне все еще нужно хранить его чистую версию в хранилище, чтобы другие пользователи могли легко установить свои учетные данные.

Возможные решения

  1. .gitignoresupersecretstoragecredentials.ini и создать supersecretstoragecredentials.ini-example,
    1. поручить пользователю копировать supersecretstoragecredentials.ini-example в supersecretstoragecredentials.ini,
  2. Добавьте переопределенное местоположение файла конфигурации в 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. Этого можно достичь достаточно легко, если вы включите проверку в процесс сборки.

Другие вопросы по тегам