Как правильно связать два хранилища ключей с моим кодом 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
Я понятия не имею, так ли это должно быть, потому что я не смог найти примеров связывания нескольких хранилищ ключей.
Так это правильно? Имеет ли значение, используем ли мы их повторно или создаем новые?