使用托管服务标识会阻止在调试模式下连接到KeyVault

时间:2017-12-24 06:47:08

标签: azure azure-functions azure-keyvault

我尝试在本文后面的Azure Functions应用中实现Azure KeyVault:https://medium.com/statuscode/getting-key-vault-secrets-in-azure-functions-37620fd20a0b

在文章中,功能应用程序设置为使用Managed Service Identity(MSI),这样我们就不必使用密钥来获取令牌以连接到Azure KeyVault。因为这会破坏使用Azure KeyVault的目的。

据我了解,可以注册Azure应用程序以使用MSI,以便其他Azure资源直接识别它,从而无需获取令牌等简化连接过程。

但是,在我调试Azure功能应用程序时,我无法连接到Azure KeyVault以检索必要的机密。

我觉得可能会发生这种情况,因为函数应用程序在调试期间本地运行而不是Azure。

这是我无法连接到KeyVault的原因吗?

3 个答案:

答案 0 :(得分:2)

是的,很遗憾,MSI只会在Azure Functions服务内部运行时获得令牌。大约一周前我用一个新的#if区域更新了我的样本,如果处于DEBUG模式,我用它来从局部变量中提取秘密。

https://github.com/jeffhollan/functions-csharp-keyvault-eventhub/blob/master/ScaleTestV1_NoHost/Http.cs

答案 1 :(得分:0)

现在有一个更好的解决方案,可以解决在调试模式下(至少对于.NET应用程序和功能)在本地开发过程中使用托管服务标识的问题。

您可以使用 Microsoft.Azure.Services.AppAuthentication包

相关代码示例..(来自下面的参考文献)

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

How to use managed identities for App Service and Azure Functions

Microsoft.Azure.Services.AppAuthentication Reference

  

.NET库的Microsoft.Azure.Services.AppAuthentication   简化了这个问题。它使用开发人员的凭据来   在本地开发过程中进行身份验证。以后解决的时候   部署到Azure后,库自动切换到应用程序   凭据。

有关AzureServiceTokenProvider如何使用Visual Studio,Azure CLI或Azure AD集成身份验证来获取令牌的详细信息。Read here

答案 2 :(得分:0)

作为Rohit Saigal回答的附录,请注意以下内容:

使用Azure Key Vault Service在Visual Studio中进行本地开发取决于 “ Azure服务身份验证扩展” https://marketplace.visualstudio.com/items?itemName=chrismann.MicrosoftVisualStudioAsalExtension#overview 从15.6版开始,它已集成到Visual Studio中,不需要单独安装。

检查Visual Studio /工具/选项/ Azure服务身份验证,以查看用于在Azure服务中进行身份验证的帐户,并进行相应设置。