这是来自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核心中做到这一点吗?
答案 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