3

我在 Azure 中有一个使用 AKS 预览版的 k8s 集群。

我还在虚拟机上启用了 MSI。如果我 ssh 到虚拟机,我可以看到 MSI 服务正在运行:

curl http://localhost:50342/oauth2/token --data "resource=https://vault.azure.net" -H Metadata:true

根据文档,我得到了您所期望的回复。

但是,我无法弄清楚如何让我的 aspnet 核心应用程序AzureServiceTokenProvider根据需要使用。在本地它可以工作,一旦部署在 kubernetes 的 pod 中,它就找不到所需的授权。

我得到的错误是:

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:Connectionstring:[未指定连接字符串],资源:https ://vault.azure.net ,授权:https ://login.windows.net/9d93c307-6856-4bab -8fa9-99690e0fabaf。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有奏效。参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf. 异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识 (MSI) 端点。请检查您是否在具有 MSI 设置的 Azure 资源上运行。参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf 。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。未设置环境变量 LOCALAPPDATA。参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/9d93c307-6856-4bab-8fa9-99690e0fabaf. 异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。/bin/bash: az: 没有这样的文件或目录 ```

有没有人能够使用类似代码从 pod 中的 KeyVault 读取?

AzureServiceTokenProvider azureServiceTokenProvider = new 
AzureServiceTokenProvider();
KVC = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var baseUrl = config.GetValue<string>("Azure:VaultURL");
var secretLocation = config.GetValue<string>("Azure:SecretLocation");
location = $"{baseUrl}{secretLocation}";
KVC.GetSecretAsync(location).Result.Value;
4

1 回答 1

0

您是否熟悉 AAD Pod Identity?https://github.com/Azure/aad-pod-identity。我们一直在企业环境和用户分配的身份中处理此问题,而不是 MSI。

这种方法不能解决您的 MSI 问题,但它确实提供了一种替代方案,可以解决您的潜在问题。

于 2019-04-05T00:12:28.067 回答