Как правильно обрабатывать секреты в файле local.settings.json при добавлении исходного кода функции в репозиторий исходного кода - PullRequest
0 голосов
/ 28 октября 2018

У меня есть функция Azure с несколькими секретами в файле local.settings.json.

Каковы оптимальные методы, когда я хочу поделиться исходным кодом своей функции в GitHub?

Пока что я могу думать о следующих параметрах, но у каждого из них есть свои проблемы или проблемы:

1 - Помните, чтобы изменять секреты в local.settings.json каждый раз, когда я фиксирую свои изменения.Когда фиксация завершена, отмените изменения, чтобы я мог запустить функцию и отладить ее.Эта опция очень подвержена ошибкам и утомительна.

2 - Добавьте local.settings.json в файл .gitignore.При таком подходе люди, получающие код из GitHub, должны помнить, чтобы восстановить local.settings.json

3 - Хранить секреты в хранилище ключей Azure.Но это слишком много для такой маленькой функции, которую я создаю.

Я хотел бы спросить здесь, каковы лучшие методы работы с секретами в local.settings.json в репозитории контроля версий.

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Запомните, чтобы изменить секреты в local.settings.json каждый раз, когда я фиксирую свои изменения

Используйте механизм smudge-clean.Smudge-clean - это механизм, который позволяет вам изменять файл, когда он проходит через индекс.

smudge / clean - это фильтры, которые запускаются всякий раз, когда вы фиксируете файл (clean) и извлекаете файл в рабочий каталог(нечеткое изображение).


Smudge / clean

Узнайте все об этом и настройте здесь:
https://git -scm.com / book / ru / v2 / Customizing-Git-Git-Attributes

Оказывается, вы можете написать свои собственные фильтры для выполнения подстановок в файлах на совершить / проверку .

Это так называемые фильтры clean и smudge.

В файле .gitattributes вы можете установить фильтр для определенных путей, а затем настроить сценарии, которые будут обрабатывать файлы непосредственно перед их извлечением («размазать») и непосредственно перед их подготовкой («чистый»).

Эти фильтры можно настроить на все виды забавных вещей.
Таким образом, вы можете написать свои собственные фильтры для выполнения подстановок в файлах при фиксации / извлечении.

enter image description here

0 голосов
/ 28 октября 2018

Как описано здесь , вы можете добавить еще один файл конфигурации (secret.settings.json) для своих секретов.

{
    "ConnectionStrings": {
        "SqlConnectionString": "server=myddatabaseserver;user=tom;password=123;"
    },
    "MyCustomStringSetting": "Override Some Name",
    "MailSettings": {
        "PrivateKey": "xYasdf5678asjifSDFGhasn1234sDGFHg"
    }
}

Добавьте новый файл настроек в .gitignore.Затем удалите local.settings.json из .gitignore и отредактируйте все секретные значения.

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    },
    "ConnectionStrings": {
        "SqlConnectionString": "--SECRET--"
    },
    "MyCustomStringSetting": "Some Name",
    "MyCustomNumberSetting": 123,
    "MailSettings": {
        "FromAddress": "local-testing123@email.com",
        "ToAddress": "receiver@email.com",
        "MailServer": "smtp.mymailserver.com",
        "PrivateKey": "--SECRET--"
    }
}

Затем убедитесь, что ваш дополнительный файл конфигурации включен.

var config = new ConfigurationBuilder()
    .SetBasePath(context.FunctionAppDirectory)
    .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
    .AddJsonFile("secret.settings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

С помощью этого метода впо крайней мере, все настройки отслеживаются в системе контроля версий.Все секретные значения безопасно отредактированы.

0 голосов
/ 28 октября 2018

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

Кроме того, если вы фиксируете свой файл с секретами в прошлом, а затем фиксируете его сновабез секретов ваши секреты все еще находятся в хранилище.Вам придется удалить файл с киркой (я думаю, проверьте команду filetree).

...