我已经使用Azure Key Vault实现了用于加密密钥的解决方案。我已遵循https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity文档的建议,以了解如何使用托管服务身份向Azure Key Vault验证我的App Service。我的应用程序服务是asp.net core 2.1应用程序。
当我将应用程序服务发布到Azure订阅时,此方法有效,因此我确信实现是正确的。问题在于在本地运行代码,并尝试使用MSI连接到Azure Key Vault似乎对我不起作用。
我正在运行Visual Studio 2017版本15.8.5。我在Azure Active Directory中的企业身份是我登录VS的方式(即sbraswell @ myemployer.com )。但是,我正在使用的Azure订阅是我的MSDN合作伙伴权益的一部分,并且与我的Microsoft帐户(MSA)(即 something @ hotmail.com)相关联。我已向我的订阅授予公司AAD身份“所有者”角色权限。我能够以公司身份登录Azure门户,并访问与我的MSA帐户关联的Azure订阅的所有方面。
在获取对Azure Key Vault的访问令牌时,以下代码不会引发异常:
var tokenProvider = new
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider();
var token = await tokenProvider.GetAccessTokenAsync(resource);
return token;
当我尝试从库中解析特定的加密密钥时,此代码将引发异常:
var keyEncryptionKey = await cloudResolver.ResolveKeyAsync(keyId, CancellationToken.None)
引发的异常是:
Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Unauthorized'
at Microsoft.Azure.KeyVault.KeyVaultClient.GetKeyWithHttpMessagesAsync(String vaultBaseUrl, String keyName, String keyVersion, Dictionary`2 customHeaders, CancellationToken cancellationToken)
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetKeyAsync(IKeyVaultClient operations, String keyIdentifier, CancellationToken cancellationToken)
我希望能够使用MSI进行身份验证来部署解决方案,因此我们不必创建充当App Service与Key Vault之间中介的Active Directory应用程序。我们最终不得不将App ID和App Secret放入我们的应用程序服务配置中,而使用MSI,我们避免了必须管理敏感数据的这两个额外位。
提前感谢您的任何建议。
更新
我已经确认,如果我使用的是与我的公司AAD帐户关联的订阅的一部分的密钥保管箱,则来自VS的MSI身份验证将正常工作,没有例外。我的配置一定有问题。是否还有其他人在其Microsoft合作伙伴网络Visual Studio Enterprise Subscription Azure权益中遇到此问题?用MS进行身份管理是一个MesS:(
答案 0 :(得分:0)
在此步骤上,您可能会错过授予帐户访问权限的机会。请看一下这篇文章,以详细了解-
Use Key Vault from App Service with Managed Service Identity
更新
如以下注释中所述,除了对密钥库的秘密管理权限访问外,请确保在“密钥管理操作”下至少授予“ GET”权限,因为执行GetKeyAsync方法时错误堆栈跟踪显示了问题。请注意,除了与键操作相关的“ GET”外,您可能还需要其他权限,以防您的代码做其他事情,例如列出键或创建,更新,删除等。
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetKeyAsync(IKeyVaultClient operations, String keyIdentifier, CancellationToken cancellationToken)
答案 1 :(得分:0)
使用Azure Key Vault Service在Visual Studio中进行本地开发取决于 “ Azure服务身份验证扩展” https://marketplace.visualstudio.com/items?itemName=chrismann.MicrosoftVisualStudioAsalExtension#overview 从15.6版开始,它已集成到Visual Studio中,不需要单独安装。
检查Visual Studio /工具/选项/ Azure服务身份验证以查看用于在Azure服务中进行身份验证并设置适当的帐户。
此外,在应用程序中安装NuGet数据包Microsoft.Azure.Services.AppAuthentication。