尝试在我的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的功能,可以访问密钥库。
在线上的多个教程使这看起来非常容易并且可以立即使用。
答案 0 :(得分:1)
为Azure功能启用MSI之后,我进入了密钥库并添加了访问策略,因此我的Azure Function应用有权读取机密。该功能应适用于Azure托管的所有版本的Azure功能。它在本地不起作用。
因此,请转到您的天蓝色Key Vault并在其中添加MSI原则,并授予Get
秘密权限。
答案 1 :(得分:0)
让我补充一下Joey Cai's answer,这确实很有帮助,并节省了我上次的时间。
在应用程序设置中,我使用了以下设置:
{
"name": "asset_name",
"value": "@Microsoft.KeyVault(SecretUri=[KEY_VAULT_URL])",
"slotSetting": false
}
启用MSI和等待选项的几个月前,我的终端运行正常,但是今天,我需要在几个小时后(大约半天)重新启动Azure功能,这有助于解决以下设置的值:
@Microsoft.KeyVault(SecretUri=[KEY_VAULT_URL])
在完成所有配置后,可以从创建的密钥库中提取值。
在已开发的Azure功能中启用MSI:
我希望这对下一次遇到同样问题的人有帮助,就像我一样。 :)