azure - 无法使用用户分配的托管标识检索 keyvault secret

标签 azure azure-sdk-.net

这是来自 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/

相关文章:

Azure 数据工厂 ForEachActivity : @item() evaluating to an empty string in . NET SDK

c# - Azure .Net SDK - 允许 CloudStorageAccount 的 {set;} 的方法签名

azure - 推送到 Azure 容器注册表会出现 404 未找到

azure - 从 Microsoft.Azure.ServiceBus 迁移到 Azure.Messaging.ServiceBus

azure - 与 Get-AzureRmSqlServerThreatDetectionPolicy 等效的 C# 是什么?

c# - 使用 Azure SDK 从 Azure 函数中删除/重新绑定(bind) SSL 证书

Azure Next.js 部署。所需结构

azure - Azure Sphere 如何在嵌入其他 MCU 的混合系统中提供安全性?

node.js - 具有事件网格的 Azure 函数在本地运行,无需 ngrok

rest - Azure 消费 REST API 使用开始不起作用