我尝试在本文后面的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的原因吗?
答案 0 :(得分:2)
是的,很遗憾,MSI只会在Azure Functions服务内部运行时获得令牌。大约一周前我用一个新的#if区域更新了我的样本,如果处于DEBUG模式,我用它来从局部变量中提取秘密。
答案 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服务中进行身份验证的帐户,并进行相应设置。