Azure功能密钥保管库应用程序设置不起作用

时间:2019-01-11 12:22:28

标签: azure azure-functions azure-keyvault

尝试在我的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的功能,可以访问密钥库。

在线上的多个教程使这看起来非常容易并且可以立即使用。

2 个答案:

答案 0 :(得分:1)

为Azure功能启用MSI之后,我进入了密钥库并添加了访问策略,因此我的Azure Function应用有权读取机密。该功能应适用于Azure托管的所有版本的Azure功能。它在本地不起作用。

因此,请转到您的天蓝色Key Vault并在其中添加MSI原则,并授予Get秘密权限。

enter image description here

有关更多详细信息,您可以参考此article和此issue

答案 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:

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

    Network - Identity

  2. 然后打开系统或分配的身份的状态:

    MSI - Enable

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