自动从 Key Vault 重新加载机密和证书

应用程序配置和 Key Vault 是互补性的服务,大多数应用程序中会同时使用两者。 应用配置可在你的应用配置存储中创建密钥(引用 Key Vault 中存储的机密或证书),以帮助你结合使用这两个服务。 由于 Key Vault 将证书的公钥和私钥对存储为机密,因此你的应用程序可以从 Key Vault 中检索任何证书作为机密。

应定期轮换机密证书,这是一种良好的安全做法。 在 Key Vault 中轮换机密和证书后,需要让应用程序选取最新的机密和证书值。 在不重启应用程序的情况下,有两种方法可以实现此目的:

  • 更新 sentinel 键值以触发整个配置的刷新,从而重新加载所有 Key Vault 机密和证书。 有关详细信息,请参阅如何在 ASP.NET Core 应用中使用动态配置
  • 定期从 Key Vault 重新加载部分或全部机密和证书。

第一个选项中,每当在 Key Vault 中轮换机密和证书时,必须更新应用程序配置中的 sentinel 键值。 若要在应用程序中强制立即重新加载机密和证书,此方法非常有效。 但是,当机密和证书在 Key Vault 中自动轮换时,如果未及时更新 sentinel 键值,则应用程序可能会遇到错误。 第二个选项允许你完全自动执行此过程。 可以将应用程序配置为,在自轮换时起可接受的延迟内从 Key Vault 重新加载机密和证书。 本教程将逐步介绍第二个选项。

先决条件

向 Key Vault 中添加自动轮换证书

按照教程:在 Key Vault 中配置证书自动轮换,将名为 ExampleCertificate 的自动轮换证书添加到之前教程中创建的 Key Vault。

在应用程序配置中添加 Key Vault 证书的引用

  1. 在 Azure 门户中,选择“所有资源”,然后选择之前教程中创建的应用程序配置存储实例。

  2. 选择“配置资源管理器”。

  3. 选择“+ 创建”>“Key Vault 引用”,然后指定以下值:

    • 密钥:选择 TestApp:Settings:KeyVaultCertificate。
    • 标签:将此值保留空白。
    • 订阅、资源组和 Key Vault:输入与之前教程中创建的 Key Vault 相对应的值。
    • 机密:选择之前部分中创建的名为 ExampleCertificate 的机密。
    • 机密版本:最新版本。

注意

如果引用特定版本,则从 Key Vault 重新加载机密或证书将始终返回相同的值。

更新代码以重新加载 Key Vault 机密和证书

在 Program.cs 文件中,更新 AddAzureAppConfiguration 方法,以使用 SetSecretRefreshInterval 方法为 Key Vault 证书设置刷新间隔。 进行此更改后,应用程序将每隔 12 小时重新加载一次 ExampleCertificate 的公钥-私钥对。

config.AddAzureAppConfiguration(options =>
{
    options.Connect(settings["ConnectionStrings:AppConfig"])
            .ConfigureKeyVault(kv =>
            {
                kv.SetCredential(new DefaultAzureCredential());
                kv.SetSecretRefreshInterval("TestApp:Settings:KeyVaultCertificate", TimeSpan.FromHours(12));
            });
});

SetSecretRefreshInterval 方法中的第一个参数是应用程序配置 Key Vault 引用的密钥。 该参数可选。 如果省略密钥参数,刷新间隔将应用于没有单独刷新间隔的所有机密和证书。

刷新间隔定义机密和证书从 Key Vault 重新加载的频率,而不考虑在 Key Vault 或应用程序配置中对它们值的任何更改。 如果要在应用程序配置中机密和证书的值发生更改时重新加载机密和证书,可以使用 ConfigureRefresh 方法监视它们。 有关详细信息,请参阅如何在 ASP.NET Core 应用中使用动态配置

根据机密和证书在 Key Vault 中更新后可接受的延迟选择刷新间隔。 还必须考虑 Key Vault 服务限制以避免受到限制。

清理资源

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 在“按名称筛选”框中,输入资源组的名称
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除”。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本教程中,你已了解如何设置应用程序,以自动从 Key Vault 重新加载机密和证书。 若要了解如何使用托管标识来简化对应用程序配置和 Key Vault 的访问,请继续学习下一篇教程。