无法从 Azure Key Vault 读取值

Sam*_*Sam 5 azure-keyvault azure-functions

我按照这篇文章在我的 Azure Functions 应用程序中实现了 Azure Key Vault:https : //medium.com/statuscode/getting-key-vault-secrets-in-azure-functions-37620fd20a0b

如文章中所述,我使用的是托管服务标识 (MSI),但似乎无法从 Key Vault 读取值。以下是应该读取值的行。

var myValue = (await kvClient.GetSecretAsync(Environment.GetEnvironmentVariable("documentDbkey"))).Value;
Run Code Online (Sandbox Code Playgroud)

这是我在 Azure KeyVault 上的条目的样子: 在此处输入图片说明

我应该在key我的条目中使用 iedocumentDb还是以 开头的版本 ID bf2550f4e

这是错误:

执行函数时出现异常:IngridNotificationsFunction Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:IngridNotificationsFunction ---> System.ArgumentNullException:值不能为空。参数名称:secretIdentifier at async Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretAsync(??)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在异步 Ingrid.Notifications.IngridNotifications.Initialize() 在 C:\Users\Sam\Documents\Visual Studio 2017\Projects\Ingrid.Notifications\Ingrid.Notifications\IngridNotifications.cs 处:83 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () 在 C:\Users\Sam\Documents\Visual Studio 2017\Projects\Ingrid.Notifications\Ingrid.Notifications\IngridNotifications.cs 的异步 Ingrid.Notifications.IngridNotifications.Run(String myQueueItem) :38 在 System.Runtime.ExceptionServices .ExceptionDispatchInfo.Throw() 在异步 Microsoft.Azure.WebJobs.Host.Executors.VoidTaskMethodInvoker2.InvokeAsync[TReflected,TReturnType](TReflected instance,Object[] arguments) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\VoidTaskMethodInvoker.cs : 20 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker2.InvokeAsync[TReflected,TReturnValue](Object instance,Object[] arguments) 在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs : 63 在系统.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在异步 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,throwOnTimeout,TimeIFunctionInterval instance) \projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Hos...

我无法从 Azure KeyVault 读取值的原因可能是什么?

Tom*_*SFT 5

System.ArgumentNullException:值不能为空


根据异常,它表示Environment.GetEnvironmentVariable("documentDbkey")为空。

我无法从 Azure KeyVault 读取值的原因可能是什么?

如果我们想使用Environment.GetEnvironmentVariable("documentDbkey")我们需要配置 azure 函数应用程序设置以https://{yourkeyvalue}.vault.azure.net/Secrets/{yourSecretName}在您的情况下添加具有值的键 documentDbkey 。

在此处输入图片说明

在此处输入图片说明

更新:

您可以直接使用以下代码来获取秘密。

kvClient.GetSecretAsync("https://{yourkeyvalue}.vault.azure.net/Secrets/{yourSecretName}")?.Value
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

文章中还提到他使用应用程序设置来存储密钥库机密 id。

您会注意到,在这种情况下,我使用环境变量(应用程序设置)作为 Key Vault 机密 ID,但它本身不是机密?—?只是存储机密的位置