开发者问题收集

DefaultAzureCredentials 无法在 MangedIdentity AKS 中拾取凭据DefaultAzureCredentials failed to pickup credentials in MangedIdentity AKS

2020-08-25
3465

根据 此处 提供的文档。使用 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 以获取值。但由于某种原因,它抛出了这个错误。如果我遗漏了什么,请有人指导我。

1个回答

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

Faheem
2020-08-26