基于给定的文档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连接以获取值。但是由于某种原因,它会抛出此错误。如果我错过了什么,请有人指导我。
答案 0 :(得分:0)
Managed identity用于控制平面,而不用于您的工作节点或应用程序。控制平面使用该托管身份来创建请求的云资源,例如负载均衡器,规模集,路由等。如果您希望您的应用程序使用托管身份,建议的方法是部署aad-pod-identities,它为您提供应用程序级授权方案。或者,您也可以启用基于managed identity for the VMSS的节点池。在后一种情况下,Azure将为具有相同名称的节点池创建一个新的系统托管身份,您可以使用它在KeyVault或其他服务之间建立授权。