我试图理解
Azure Functions
和Key Vault
之间的整合。在门户上的应用程序设置文件中,如果我引用 KV 端点,函数运行时是否会检索一次结果并将其缓存在本地,还是每次引用配置键时都会命中端点?换句话说,我试图了解 KV 的任何更改是否需要重新启动 Function 应用程序。
目前,如果更新 Key Vault 中的密钥值,则无需手动重新启动 Azure 功能。 azure 函数将自动重新启动,以便您加载所有新值。 Azure 函数在启动阶段加载应用程序设置中定义的值,如果您在 Azure 函数中使用应用服务 Key Vault 引用,则密钥值也将在启动阶段从 Key Vault 加载。如果您在 Azure 门户上修改应用程序设置,您的 Azure 功能将重新启动以重新加载所有设置:
这些是我的测试步骤:
我的代码很简单,只需从应用程序设置中获取键值即可:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string key = Environment.GetEnvironmentVariable("key");
return new OkObjectResult(key);
}
应用程序设置中的我的
key
配置:
如你所见,我没有涉及
SecretVersion
,这样我就可以获取KeyVault中的最新值。如果您在应用程序设置中涉及SecretVersion
,正如@Alex AIT所说,您也应该使用最新的SecretVersion来修改应用程序设置。
然后我将 Key Vault 中的 key4demo 值更新为:
78910
Azure函数回复503,这意味着它正在重新启动:
更新: 应用服务和 Azure Functions 中的 Key Vault 引用不再需要版本
如果参考中未指定版本,则应用程序将使用 Key Vault 中存在的最新版本。当有新版本可用时(例如发生轮换事件),应用程序将自动更新并在一天内开始使用最新版本。对应用程序进行的任何配置更改都将导致所有引用的机密立即更新为最新版本。
如果您使用应用服务密钥保管库引用,则需要更新 Azure 门户中的配置值。重新启动不会改变任何事情。这是因为您引用的是实际的秘密版本。如果您更新秘密,您将获得新版本。
当前需要版本。轮换机密时,您需要更新应用程序配置中的版本
我猜想在应用程序级别有某种缓存。
就我而言(消费计划、Linux 主机和 python 3.10 运行时),在密钥保管库中创建现有密钥的新版本后,重新启动应用程序不起作用,因为它不断获取旧密钥。
最终对我有用的是:
如果参考中未指定版本,则应用程序将使用密钥保管库中存在的最新版本。当有新版本可用时(例如发生轮换事件),应用程序将自动更新并在 24 小时内开始使用最新版本。延迟是因为应用服务会缓存密钥保管库引用的值并每 24 小时重新获取一次。对应用程序进行的任何配置更改会导致站点重新启动,从而导致立即重新获取所有引用的机密。
不,不需要重新启动功能或任何东西。 Key Vault 过着独立的生活。