Azure DevOps -> Конвейеры -> Выпуски -> Доступ Azure Секрет хранилища ключей -> вложенные уровни JSON Подстановка / преобразование переменных - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть файл appsettings.json, в который я хочу преобразовать значение, расположенное по адресу:

"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
},

Я нашел следующий ответ, поэтому я знаю, что служба приложения может получать значения непосредственно из хранилища ключей:

{ ссылка }

Это не причина спрашивать. Поскольку Microsoft предлагает JSON variable substitution, я все еще думаю, что это должно быть возможным, поскольку единственная проблема - это вложенное значение. Вышеупомянутый вопрос похож, но я хотел бы указать немного больше, что уже было проверено и где я застрял.

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/transforms-variable-substitution?view=azure-devops&tabs=Classic#json -вариабельная замена

Для получения секретного значения можно использовать Конвейеры -> Библиотека -> Группа переменных

enter image description here

или Azure Key Vault Task.

enter image description here

Проблема в том, что секретное значение не может содержать точек:

enter image description here

Пожалуйста, укажите действительное секретное имя. Секретные имена могут содержать только буквенно-цифровые символы c и тире.

Ни в связанной группе переменных, ни в задаче Azure Key Vault Мне разрешено переписывать секретное имя в другое имя переменной .

Глядя на пример ниже, если секретное имя было ConnectionStringsDefaultConnection, я мог получить доступ к значению, как это $(ConnectionStringsDefaultConnection), но я не знаю, как его переименовать.

https://azuredevopslabs.com/labs/vstsextend/azurekeyvault/

Я нашел задачу, которая могла бы выполнить работу, но она требует сторонней задачи выпуска. Это неприемлемо, поскольку в проекте разрешены только задачи, написанные Microsoft.

enter image description here

https://daniel-krzyczkowski.github.io/How-to-inject-Azure-Key-Vault-secrets-in-the-Azure-DevOps-CICD-pipelines/

Я также знаю, что переменную Pipeline можно использовать для хранения значения но у нас не будет единого источника правды, и это будет Azure Key Vault Secret.

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Одним из вариантов будет использование Key Vault непосредственно в вашем приложении вместо замены настроек приложения. json. Вы можете настроить это в методе CreateHostBuilder:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            if (context.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();

                using (var store = new X509Store(StoreLocation.CurrentUser))
                {
                    store.Open(OpenFlags.ReadOnly);
                    var certs = store.Certificates
                        .Find(X509FindType.FindByThumbprint,
                            builtConfig["AzureADCertThumbprint"], false);

                    config.AddAzureKeyVault(
                        $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
                        builtConfig["AzureADApplicationId"],
                        certs.OfType<X509Certificate2>().Single());

                    store.Close();
                }
            }
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Пожалуйста, проверьте документацию .

0 голосов
/ 28 апреля 2020

Прочитайте аналогичный вопрос из VSTS (Visual Studio Team Services) и смог его решить.

Создал Pipeline variable с именем ConnectionStrings.DefaultConnection, который имел ссылочное значение для моей связанной группы переменных.

Если бы мой секрет был назван ConnectionStringsDefaultConnection, я бы подключил его как связанную переменную, а затем добавил бы $(ConnectionStringsDefaultConnection) в качестве значения.

enter image description here

Источник:

{ ссылка }

...