Azure Function 配置未获取最新版本的 Key Vault 机密

BB7*_*788 5 azure-keyvault azure-functions

该函数永远不会读取最新版本的秘密。它总是读取它配置使用的第一个,即版本化的。即使在重新启动该函数或重新发布该函数后,它也始终会读取其首次配置使用的版本秘密。

创建了一个具有版本化 Key Vault 参考形式的函数:

 TheSecret
   @Microsoft.KeyVault(SecretUri=https://name.vault.azure.net/secrets/TheSecret/__version__)
Run Code Online (Sandbox Code Playgroud)

并在函数中:

if (!int.TryParse(Environment.GetEnvironmentVariable("TheSecret"), out int theSecret))
{
    theSecret = 10;
}
Run Code Online (Sandbox Code Playgroud)

该函数第一次运行时会检索密钥的特定版本。

在 Key Vault 中创建了新版本TheSecret,并将功能应用程序配置更改为非版本化类型:

TheSecret
@Microsoft.KeyVault(SecretUri=https://name.vault.azure.net/secrets/TheSecret/)
Run Code Online (Sandbox Code Playgroud)

小智 11

由于您尚未指定版本,因此它会使用键值中的最新版本。根据文档,当有新版本可用时(例如发生轮换事件),应用程序将自动更新并在一天内开始使用最新版本。对应用程序进行的任何配置更改都将导致所有引用的机密立即更新为最新版本。

可通过两种方式加载 Azure Key Vault Secret(在 Function 应用中引用)的新值:

  1. 如文档中所述,自动(非强制)24 小时发生。

  2. 配置更新(强制),在执行站点更新时强制获取最新机密。最简单的方法是更新“设置\配置”中的任何设置,然后在此边栏选项卡上“保存”。这也会导致重启。更多详细信息请参见此处

  • 我在这里遇到了同样的问题。重新启动或停止并启动应用程序服务对我来说不起作用。但是当我添加新设置并保存时,它起作用了。也许这是 @MayankBargali-MSFT 发布此答案时的一个错误,但它现在似乎可以正常工作。顺便说一句,我使用替代语法,因为它更简单且更易于阅读。 (5认同)

小智 -1

关于可以尝试的事情,这里有一些;

  1. 尝试删除尾部斜杠 - 这可能会混淆它(尽管不太可能)
  2. 或者,尝试使用其他语法形式,@Microsoft.KeyVault(VaultName={vault_name};SecretName={secret_name})
  3. 停止并启动(而不是重新启动)功能应用程序(我已经看到这会产生影响,尽管理论上不应该)

如果所有这些都失败,请禁用系统 msi,重新启用并确认在密钥保管库策略中分配秘密获取权限。(请注意,执行此操作后,您必须停止/启动功能应用程序)