无法检索具有用户分配的受管身份的密钥库机密

时间:2019-01-09 16:03:46

标签: azure azure-sdk-.net

这是来自git的交叉帖子。
我有一个使用“ Microsoft.Azure.Services.AppAuthentication” Version =“ 1.2.0-preview”和“ Microsoft.Azure.KeyVault” Version =“ 3.0.2”的控制台应用程序。

我在Windows 2019 VM上为用户分配了托管身份。

已将托管身份分配给我的密钥库中的贡献者角色,并将其读取到其所居住的资源组中。

我正在使用一个用户分配的受管理身份,因为其目的是在kubernetes容器(具有aad-pod身份)中运行类似的应用程序。我将连接字符串环境变量设置为AzureServicesAuthConnectionString RunAs = App; <我的用户分配的MI的clientId>; TenantId =

当我尝试连接到密钥库以检索机密时,我得到了一个禁止的异常:

  

未处理的异常:System.AggregateException:一个或多个错误   发生。 (操作返回了无效的状态码“禁止”)--->   Microsoft.Azure.KeyVault.Models.KeyVaultErrorException:操作   在处返回了无效的状态代码“禁止”   Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessagesAsync(String   vaultBaseUrl,字符串secretName,字符串secretVersion,字典2   customHeaders,CancellationToken cancelToken)   Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretAsync(IKeyVaultClient   操作,字符串secretIdentifier,CancellationToken   cancelToken)在msiauth.AzureStuff.Run()中   C:\ Users \ aiadmin \ src \ azure \ msiauth \ tests.cs:第50行   ---内部异常堆栈跟踪的结尾---在System.Threading.Tasks.Task.Wait(Int32毫秒超时,   的CancellationToken cancelToken()   位于msiauth.Program.Main(String []处的System.Threading.Tasks.Task.Wait()   args),位于C:\ Users \ aiadmin \ src \ azure \ msiauth \ Program.cs:line 10

当我尝试使用“ Microsoft.Azure.Management.ResourceManager” Version =“ 2.0.0-preview”创建资源组时,它可以正常工作,因此用户分配的MI可以正常工作。

我尝试了完全相同的密钥库代码,但是系统分配了托管身份,并且可以正常工作,因此权限很好,代码也可以工作。

有人可以在.net核心中做到这一点吗?

1 个答案:

答案 0 :(得分:1)

从KeyVault读取密钥或向KeyVault写入机密是对Key Vault本身的一项操作,并且根据访问策略集允许(或不允许)

您所指的贡献者角色属于Azure资源管理器RBAC系统,并且可以管理KeyVault(例如,分配访问策略)。

最可能起作用的身份同时具有RBAC分配和访问策略。无效的将需要一种访问策略(并且不需要RBAC分配)

有关访问策略的更多信息,请参见:https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started#authorize