Короткий рассказ; пытаюсь настроить конвейер выпуска devops, который извлекает секреты из хранилища ключей Azure и преобразует секреты в файлы appsettings.json и web.config, но соглашения об именах в хранилище ключей Azure усложняют задачу.
Более длинная история: наша текущая установка работает локально через IIS на машине с Windows, и все наши секреты хранятся в нашем git в файле appsettings.production.json... И я хочу, чтобы они были удалены оттуда и помещены в секретное хранилище для безопасного хранения. .
Еще больше усложняет ситуацию: у нас есть около 20 конвейеров выпуска, которые делают почти одно и то же, за исключением развертывания на разных сайтах IIS. Это связано с тем, что у каждого разработчика и тестировщика есть свои собственные среды для запуска этого процесса.
Все это довольно запутанно, и наши планы на будущее — перейти на Azure, где есть лучший способ сделать это. Но до этого осталось как минимум год, и я хочу, чтобы секреты из нашего git-репозитория были удалены как можно скорее.
Итак, вернемся к моей проблеме: я работаю над/редактирую конвейер выпуска devops, который считывает секреты из Azure Keyvault и выполняет задачу FileTransform в файле appsettings.json, но никакие значения не заменяются.
Я считаю, что это из-за соглашения об именах: FileTransform:Json хочет использовать точку (.) в качестве разделителя, но хранилище ключей позволит мне использовать только дефис (-).
Итак, мои настройки приложения:
{
"AppSettings":
{
"Username": "<hidden>"
}
}
не будет заменен секретом под названием
AppSettings-Username
Итак, вопрос в том, что я могу сделать по-другому, или как мне назвать свои секреты?
Я знаю, что мог бы использовать часть «Переменные» конвейера для хранения секретов, но это менее безопасно, к тому же у нас есть 20 конвейеров, и я не хочу, чтобы секреты записывались 20 раз, потому что это прямой путь к катастрофе.
Другой вариант — переместить файл appsettings.production.json на серверы и сохранить его при развертывании, но опять же мне нужен лучший контроль над секретами. Я просто не хочу, чтобы они были в нашем репозитории.
Я добавил еще несколько деталей. Подводя итог, мы работаем onprem, и существует как минимум 20 различных конвейеров для развертывания в разных средах, таких как тестирование, предварительная и производственная.... Это беспорядок.
Вы можете связать хранилище ключей Azure с группой переменных и связать его с переменными в конвейере.
variables:
- group: KeyVaultVariableGroup
- name: AppSettings.Username
value: $(AppSettings-Username)
Или вы можете использовать задачу замены токена вместо задачи преобразования файла.
Более подробные инструкции можно найти в разделе Преобразование файлов Azure DevOps с секретами хранилища.
Очень хорошее решение. Завтра разберусь с этим, но похоже, что это отлично подойдет.
«Короче говоря» .. нет, пожалуйста. сделайте историю длиннее. Где размещается приложение? Например, Служба приложений Azure поддерживает такие вещи, как строки подключения к хранилищу ключей. Зачем вам пытаться внедрить секреты преобразования файлов в файл appsetting.json вместо того, чтобы настраивать хост с соответствующими переменными среды, которые будут переопределять настройки приложений?