Azure Functions Key Vault 应用程序设置不起作用

Azure functions key vault app settings not working

尝试在我的 Functions v2 应用程序设置中设置以下内容时我做错了什么。

@Microsoft.KeyVault(SecretUri=<uri>)

在函数内部读取这个,我得到了完整的字符串,而不是我预期的来自密钥库的连接字符串。

var config = new ConfigurationBuilder()
                .SetBasePath(context.FunctionAppDirectory)
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

var value = config["cstring"];
var connectionString = Environment.GetEnvironmentVariable("cstring");

log.Info(value); // Prints "@Microsoft.KeyVault(SecretUri=<uri>)"
log.Info(connectionString); // Prints "@Microsoft.KeyVault(SecretUri=<uri>)"

我需要采取更多步骤吗?

作为有权访问密钥保管库的 MSI 的功能。

多个在线教程使这看起来很简单,开箱即用。

为 Azure Function 启用 MSI 后,我进入我的密钥保管库并添加了一个访问策略,这样我的 Azure Function 应用程序就有了读取机密的权限。该功能应该适用于 Azure 中托管的所有版本的 Azure Functions。它不会在本地工作。

所以去你的 Azure Key Vault 并添加 MSI 原理并赋予 Get 权限到 secret。

更多细节,你可以参考这个article and this issue

让我补充一下 ,这真的很有帮助,上次挽救了我的一天。

在应用程序设置中我使用了以下设置:

{
    "name": "asset_name",
    "value": "@Microsoft.KeyVault(SecretUri=[KEY_VAULT_URL])",
    "slotSetting": false
}

几个月前在启用 MSI 和等待选项后我这边工作正常但今天我需要在几个小时后重新启动 Azure Functions - 大约半天 - 这有助于解决以下设置的值:

@Microsoft.KeyVault(SecretUri=[KEY_VAULT_URL])

所有的配置工作正常,可以从创建的密钥保管库中获取值。

在开发的 Azure 函数中启用 MSI:

  1. 转到平台功能的网络部分身份:

  2. 然后打开系统状态或指定身份:

我希望这对下次遇到同样问题的人有所帮助,就像我一样。 :)