如果在 Key Vault 中更新了机密,是否应该重新启动 Azure Functions 应用程序?

Should Azure Functions app be restarted if a secret is updated in Key Vault?

我正在尝试了解 Azure FunctionsKey Vault 之间的整合。在门户上的应用程序设置文件中,如果我引用 KV 端点,函数运行时是否会检索一次结果并将其缓存在本地,或者每次引用配置键时它是否都会命中端点?换句话说,我试图了解 KV 中的任何更改是否需要重新启动 Function 应用程序。

不,不需要重新启动功能或任何东西。 Key Vault 过着独立的生活。

更新: Versions no longer required for Key Vault references in App Service and Azure Functions

If a version is not specified in the reference, then the app will use the latest version that exists in Key Vault. When newer versions become available, such as with a rotation event, the app will automatically update and begin using the latest version within one day. Any configuration changes made to the app will cause an immediate update to the latest versions of all referenced secrets.


如果您使用 App Service Key Vault References,您将需要更新 Azure 门户中的配置值。重新启动不会改变任何东西。这是因为您引用的是实际的秘密版本。如果您更新密文,您将获得一个新版本。

Versions are currently required. When rotating secrets, you will need to update the version in your application configuration

另见

目前,如果更新 Key Vault 中的键值,则无需手动重启 Azure 函数。 azure 函数将自动重新启动,以便您加载所有新值。 Azure 函数在启动阶段加载应用程序设置中定义的值,如果您在 Azure 函数中使用 App Service Key Vault References,键值也会在启动阶段从 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,这意味着它正在重新启动:

几秒钟后,我的函数用最新的 KV 值回复我: