这是来自 git 的交叉帖子.
我有一个使用“Microsoft.Azure.Services.AppAuthentication”Version=“1.2.0-preview”和“Microsoft.Azure.KeyVault”Version=“3.0.2”的控制台应用程序。
我的 Windows 2019 VM 上有一个用户分配的托管身份。
托管身份已被赋予我的 keyvault 上的贡献者角色分配,并读取到它所在的资源组。
我正在使用用户分配的托管标识,因为目的是在 kubernetes pod 中运行类似的应用程序(具有 aad-pod 标识)。我的连接字符串环境变量设置为 AzureServicesAuthConnectionString RunAs=App;<我的用户分配的 MI>;TenantId=
当我尝试连接到 keyvault 以检索 secret 时,我收到“禁止”异常:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Operation returned an invalid status code 'Forbidden') ---> Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Forbidden' at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessagesAsync(String vaultBaseUrl, String secretName, String secretVersion, Dictionary`2 customHeaders, CancellationToken cancellationToken) at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretAsync(IKeyVaultClient operations, String secretIdentifier, CancellationToken cancellationToken) at msiauth.AzureStuff.Run() in C:\Users\aiadmin\src\azure\msiauth\tests.cs:line 50 --- End of inner exception stack trace --- at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at msiauth.Program.Main(String[] args) in C:\Users\aiadmin\src\azure\msiauth\Program.cs:line 10
当我尝试使用“Microsoft.Azure.Management.ResourceManager”版本=“2.0.0-preview”创建资源组时,它工作正常,因此用户分配的 MI 适用于该任务。
我尝试了完全相同的 keyvault 代码,但使用了系统分配的托管身份,并且它工作正常,因此权限很好并且代码可以工作。
有人能够在.net core 中做到这一点吗?
最佳答案
从 KeyVault 读取 secret 或向 KeyVault 写入 secret 是对 Key Vault 本身的操作,并且根据访问策略集允许(或不允许)。
您引用的贡献者角色属于 Azure 资源管理器 RBAC 系统,并允许管理 KeyVault(例如分配访问策略)。
有效的身份很可能同时具有 RBAC 分配和访问策略。不起作用的将需要访问策略(并且不需要 RBAC 分配)
有关访问策略的更多信息,请参阅:https://learn.microsoft.com/en-us/azure/key-vault/key-vault-get-started#authorize
关于azure - 无法使用用户分配的托管标识检索 keyvault secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54114030/