【问题标题】:Azure Function configuration does not get latest version of Key Vault secretAzure Function 配置未获取最新版本的 Key Vault 机密
【发布时间】:2021-09-14 10:18:53
【问题描述】:

该函数从不读取最新版本的密钥。它总是读取它配置使用的第一个,即版本化的。即使在重新启动函数或重新发布它之后,它始终会读取它首先配置为使用的版本化密钥。

使用表单的版本化密钥库参考创建了一个函数:

 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


    【解决方案1】:

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

    有两种方式可以加载来自 Azure Key Vault 机密(在函数应用中引用)的新值:

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

    2. 配置更新(强制),在执行站点更新时强制获取最新的机密。最简单的方法是更新 Settings\Configuration 中的任何设置,然后在此刀片上保存。这也将导致重新启动。更多详情here

    【讨论】:

    • 强制配置更新不起作用。文档是错误的。我专门为此目的创建了一个配置值。更新此值、保存配置并等待重新启动不会加载更新的密钥保管库机密。此“功能”是在测试/验证更改时出现问题并引起的。更改无法在进行更改时进行测试和验证。这意味着我对 RnG 的心血来潮决定何时在生产中发生更改。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我测试了“停止和启动”以及多次重启。这些方法都没有为密钥库中的机密获取新版本。
    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2023-04-05
    • 2020-05-07
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2020-06-19
    • 2020-02-24
    相关资源
    最近更新 更多