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

问题描述 投票:0回答:3

该函数永远不会读取最新版本的秘密。它总是读取它配置使用的第一个,即版本化的。即使重新启动该功能或重新发布它后,它仍然会读取它最初配置使用的版本秘密。

创建了一个具有版本化密钥保管库参考形式的函数:

 TheSecret
   @Microsoft.KeyVault(SecretUri=https://name.vault.azure.net/secrets/TheSecret/__version__)

并且在函数中:

if (!int.TryParse(Environment.GetEnvironmentVariable("TheSecret"), out int theSecret))
{
    theSecret = 10;
}

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

在 Key Vault 中创建了新版本的

TheSecret
并将功能应用程序配置更改为非版本化类型:

TheSecret
@Microsoft.KeyVault(SecretUri=https://name.vault.azure.net/secrets/TheSecret/)
azure-functions azure-keyvault
3个回答
11
投票

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

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

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

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


0
投票

微软推出了新功能来解决此问题。在环境变量视图中,现在有一个操作 Pull Reference Values,它执行以下操作:

这将查询 Key Vault 和应用程序配置以更新应用程序引用的任何值。您的站点将重新启动以应用新配置。


-1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.