【发布时间】:2020-12-23 15:20:52
【问题描述】:
我正在创建一个 asp.net 核心网络应用程序,在 Visual Studio 中,当我尝试使用托管标识获取 azure key vault 时,我在下面的代码上没有任何问题。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddAzureKeyVault(new AzureKeyVaultConfigurationOptions
{
Vault = "https://testvaultXYZ.vault.azure.net/",
Client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(new AzureServiceTokenProvider().KeyVaultTokenCallback)),
});
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
现在我让这个应用程序在 docker/container 中运行,当我在本地容器中运行这个应用程序时,上面的代码出现以下错误,
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:'参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,授权:https://login.windows.net/xxxxxxxxxxx。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有奏效。 参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxxx。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识 (MSI) 端点。请检查您是否在具有 MSI 设置的 Azure 资源上运行。 参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxxxx。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。未设置环境变量 LOCALAPPDATA。 参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxxxxxx。异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。 /bin/bash: az: 没有这样的文件或目录
我了解在 docker 容器中运行时用户是不同的。这里有什么解决办法?
我看到了一些使用以下命令获取访问令牌的解决方案,
$Env:ACCESS_TOKEN=(az account get-access-token --resource=https://testvaultXYZ.vault.azure.net | ConvertFrom-Json).accessToken
但这里也会出现类似的错误,
获取令牌请求返回 http 错误:400 和服务器响应:{"error":"invalid_resource","error_description":"AADSTS500011:在名为 XXXXXXX 的租户中找不到名为 https://testvaultXYZ.vault.azure.net 的资源主体。这可能发生如果应用程序尚未由租户的管理员安装或租户中的任何用户同意。
【问题讨论】:
标签: docker containers asp.net-core-webapi azure-keyvault azure-managed-identity