Azure KeyVault 配置提供程序在更改时重新加载值

Posted

技术标签:

【中文标题】Azure KeyVault 配置提供程序在更改时重新加载值【英文标题】:Azure KeyVault Configuration Provider reload values on change 【发布时间】:2019-11-10 20:43:12 【问题描述】:

我正在使用 Azure Key Vault 配置提供程序在应用启动时读取一些机密。然而,秘密会在一天中不断轮换,我希望能够在轮换发生时重新加载新值。

我说的类似于reloadOnChange api

.ConfigureAppConfiguration((context, config) =>

    config.AddJsonFile("appsettings.json", reloadOnChange: true);
)

这可能吗?

这是一个 webapi 项目,因此在实践中,如果更好/更可行的话,我可以手动重新加载每个 HttpRequest 的值。

【问题讨论】:

目前,每当你需要它时,我都会从 kv 那里得到秘密。有一个新的Azure App Config 功能(预览中)。它很有前途,会做你想做的事:docs.microsoft.com/en-us/azure/azure-app-configuration/overview 您还可以创建一个端点来重新加载配置:IConfigurationRoot.Reload() 并在您更新 KV 中的机密时调用它。 @Thomas Azure App Config 服务与 KV 不同,它不是用于秘密存储。 @juunas 感谢您的评论,我误读了文档中的这一行:应用程序配置补充了用于存储应用程序机密的 Azure Key Vault。我以为它会提供一个统一的商店,也可以从 kv 中获取秘密。无论如何谢谢:-) 【参考方案1】:

使用Microsoft.Extensions.Configuration.AzureKeyVault (v3),您可以执行以下操作:

configurationBuilder.AddAzureKeyVault(new AzureKeyVaultConfigurationOptions

    Vault = configuration["KeyVaultUrl"],
    ReloadInterval = TimeSpan.FromMinutes(10),
    Client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
       new AzureServiceTokenProvider().KeyVaultTokenCallback))
);

现在,当您在服务中请求 IConfiguration 时,KeyVault 机密将可用并根据您的重新加载间隔刷新。

【讨论】:

【参考方案2】:

秘密被缓存直到IConfigurationRoot.Reload()被调用。在执行重新加载之前,应用程序不会尊重密钥保管库中过期、禁用和更新的机密。

Configuration.Reload();

更多详情可以参考这个article。

【讨论】:

嘿,谢谢。我知道这个api。我希望以某种方式自动完成此操作。或者至少能够根据 Http 请求将其自动化。你知道有没有办法做到这一点? 当您使用它并在浏览器中重新加载时,它会自动执行每个 Http 请求。【参考方案3】:

与 Bobby Koteski 提议的相同,但使用更新的 Azure.Extensions.AspNetCore.Configuration.Secrets 包,因为 Microsoft.Extensions.Configuration.AzureKeyVault 已弃用。

ReloadInterval 是轮询 Azure Key Vault 以进行更改的尝试之间的等待时间。

configurationBuilder.AddAzureKeyVault(
    new SecretClient(
        new Uri(configuration["KeyVaultBaseUrl"]),
        new ManagedIdentityCredential(configuration["UserAssignedManagedIdentityClientId"])
    ),
    new AzureKeyVaultConfigurationOptions()
    
        ReloadInterval = TimeSpan.FromSeconds(1000)
    
);

和a link to a source code 看看它实际上是如何工作的:)

【讨论】:

感谢您提供源代码。我很好奇正在使用什么 API 调用。

以上是关于Azure KeyVault 配置提供程序在更改时重新加载值的主要内容,如果未能解决你的问题,请参考以下文章

使用 KeyVault 和 Azure PowerShell 证书身份验证创建 Azure AD 应用程序

自动重新生成反映在 Azure Key Vault Secret 中的密钥

Azure KeyVault - 签署 JWT 令牌

Azure 函数和 Azure KeyVault 通过服务端点进行通信

Azure Keyvault 通过 ARM 添加 Function MSI

如何永久清除在启用软删除的情况下创建的整个 azure keyvault?