无法从Azure Key Vault读取值

时间:2017-12-25 17:56:06

标签: azure-functions azure-keyvault

我在本文后面的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;

这就是我的条目在Azure KeyVault上的样子: enter image description here

我应该使用key作为我的参赛作品documentDb还是使用以bf2550f4e开头的版本ID?

这是错误:

  

执行函数时出现异常:IngridNotificationsFunction   Microsoft.Azure.WebJobs.Host.FunctionInvocationException:Exception   执行功能时:IngridNotificationsFunction --->   System.ArgumentNullException:值不能为null。参数名称:   在异步的secretIdentifier   Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretAsync(??)
  在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  at async Ingrid.Notifications.IngridNotifications.Initialize()at   C:\ Users \ Sam \ Documents \ Visual Studio   2017年\项目\ Ingrid.Notifications \ Ingrid.Notifications \ IngridNotifications.cs   :83点   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   async Ingrid.Notifications.IngridNotifications.Run(String myQueueItem)   在C:\ Users \ Sam \ Documents \ Visual Studio   2017年\项目\ Ingrid.Notifications \ Ingrid.Notifications \ IngridNotifications.cs   :38点   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   异步   Microsoft.Azure.WebJobs.Host.Executors.VoidTaskMethodInvoker 2.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.FunctionInvoker 2.InvokeAsync [TReflected,TReturnValue](对象   instance,Object [] arguments)at   C:\项目\蔚webjobs-SDK-rqm4t的\ src \ Microsoft.Azure.WebJobs.Host \执行人\ FunctionInvoker.cs   :63点   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   异步   Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker   invoker,ParameterHelper parameterHelper,CancellationTokenSource   timeoutTokenSource,CancellationTokenSource   functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan   timerInterval,IFunctionInstance实例)at   C:\项目\天青-webjobs-SDK-rqm4t \ SRC \ Microsoft.Azure.WebJobs.Hos ...

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

1 个答案:

答案 0 :(得分:2)

  

System.ArgumentNullException:值不能为null

根据例外情况,它表示Environment.GetEnvironmentVariable("documentDbkey")为空。

  

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

如果我们想使用 Environment.GetEnvironmentVariable(“documentDbkey”),我们需要配置azure功能应用设置,以便在您的情况下添加值为https://{yourkeyvalue}.vault.azure.net/Secrets/{yourSecretName}的密钥documentDbkey。

enter image description here

enter image description here

<强>更新

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

kvClient.GetSecretAsync("https://{yourkeyvalue}.vault.azure.net/Secrets/{yourSecretName}")​.Value

enter image description here

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

  

你会注意到我在这种情况下使用环境变量(应用程序设置)作为密钥保管库密码ID,但这本身并不是秘密 - 只是秘密所在的位置存储