DefaultAzureCredentials无法在MangedIdentity AKS中获取凭据

问题描述

基于给定的文档here。使用DefaultAzureCredentials()时,它将先检查环境变量,然后检查ManagedIdentity等。在测试中,我已经部署了系统托管服务身份AKS。我已经部署了一个c#应用程序,该应用程序尝试使用以下代码通过应用程序连接到Keyvault

   var keyClient = new KeyClient(vaultUri: new Uri(keyVaultUrl),credential: new DefaultAzureCredential(true));
        

        Response<KeyVaultKey> response = keyClient.GetKey("somekey"); 

将我的应用程序部署到AKS集群时,它失败并显示以下错误-

Unhandled exception. Azure.Identity.AuthenticationFailedException: DefaultAzureCredential failed to retrieve a token from the included credentials.
- EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
- ManagedIdentityCredential authentication unavailable. The requested identity has not been assigned to this resource.
Status: 400 (Bad Request)
Content:
{"error":"invalid_request","error_description":"Identity not found"}

基于文档,我的应用程序应该从AKS集群中获取托管身份,并能够与Keyvault连接以获取值。但是由于某种原因,它会抛出此错误。如果我错过了什么,请有人指导我。

解决方法

用于创建AKS集群的

Managed identity用于控制平面,而不用于您的工作节点或应用程序。控制平面使用该托管身份来创建请求的云资源,例如负载均衡器,规模集,路由等。如果您希望您的应用程序使用托管身份,建议的方法是部署aad-pod-identities,它为您提供应用程序级授权方案。或者,您也可以启用基于managed identity for the VMSS的节点池。在后一种情况下,Azure将为具有相同名称的节点池创建一个新的系统托管身份,您可以使用它在KeyVault或其他服务之间建立授权。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...