2011-11-29 5 views
11

ЗадачаКакова наилучшая практика хранения секретов из хранилища git?

Рассмотрите это дерево файлов как хранилище для разработки.

 
- foo/ 
    - .git/ 
    - [...] 
    - bar/ 
    - 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.

Как kan отметил, эти два решения похожи, но не совсем то же самое, рабочий-накрест.

Есть ли другие альтернативы? Имеет ли git какие-то функциональные возможности для помощи в подобных проблемах?

+2

+1 для опции 1 – Thilo

ответ

11

Завершите сверхсекретные реквизиты.ini file with some placeholder values, а затем

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Git не будет отслеживать будущие изменения этого файла.

Вы можете сбросить это с помощью

git update-index --no-assume-unchanged supersecretstoragecredentials.ini 
+1

Единственная проблема с этими решениями заключается в том, что «git pull» другого пользователя создаст конфликты слияния. Тем не менее, это отличное решение, пока ваша потребительская база ограничена. – joar

+0

@jwandborg хороший момент для заметок! только предлагал это решение, так как этот файл используется для хранения локальных учетных данных. – dexter

5

Что вы описываете в Варианте 1, в основном покрывается шагом smudge контента filter driver.

filter driver

У вас есть два варианта, представленные в "How to work on a drop-in library?" вопрос.

сценария размазать бы ваш supersecretstoragecredentials.ini-example (версионируется), скопируйте его в качестве supersecretstoragecredentials.ini (не версированной, игнорировались Git), и заполнить ее значение из другого источника.

Но помимо технического аспекта того, как вы реализуете свою политику, основной мерой является то, что ваши секретные значения не хранятся в Git-репо вообще, а поступают из другого ссылочного.

3

Я использую ваше решение (ваши два решения одинаковы, только имена файлов различаются). У вас есть проблемы с этим? Какую функциональность вы ожидаете?

Кроме того, есть более интересное решение

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Надеюсь, это то, что вы хотите. Однако это не сработает, если восходящий поток изменит файл, и вы потянете изменение (не совсем уверен, что это хорошо или плохо).

1

По моему опыту, после того, как попробовал все варианты, перечисленные в вашем вопросе и в ответах до сих пор, ваш вариант # 2 доказал самым простым и чистым. Он решает проблему надежно, с наименьшей магией, и ее легче всего понять. Это скучно.

+0

И с этим решение, упомянутое в http://stackoverflow.com/a/8309450/202522, является самым простым и лучшим выбором ИМО. – joar

+0

Нет, вам нужен простой '.gitingore' файл' _local.ini'. –

0

Что-то, что я сейчас испытываю, это git-secrets.

https://github.com/awslabs/git-secrets

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

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

Смежные вопросы