Как правильно связать два хранилища ключей с моим кодом Asp.Net Core, чтобы секреты в одном могли перекрыть секреты в другом?

Мой текущий код таков:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                    if (context.HostingEnvironment.EnvironmentName != "LocalHost")
                    {
                        var buildConfig = config.Build();
                        LinkKeyVault(config, buildConfig, "ProductKeyVaultUri");
                        LinkKeyVault(config, buildConfig, "PodKeyVaultUri");
                    }
                })
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
                ...

        private static void LinkKeyVault(IConfigurationBuilder config, IConfigurationRoot buildConfig, string kvUriKeyName)
        {
            var keyVaultEndpoint = buildConfig[kvUriKeyName];
            if (!string.IsNullOrEmpty(keyVaultEndpoint))
            {
                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
                config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
            }
        }

Я предполагаю, что секреты в KV, идентифицированные PodKeyVaultUri, переопределяют секреты в KV, идентифицированные ProductKeyVaultUri, но я протестирую это.

Что меня интересует, так это LinkKeyVaultметод. Функция создает новые экземпляры:

  • AzureServiceTokenProvider
  • KeyVaultClient
  • DefaultKeyVaultSecretManager

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

Так это правильно? Имеет ли значение, используем ли мы их повторно или создаем новые?

0 ответов

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