如何解决如何使用托管身份访问asp.net核心dockerize应用的Azure密钥保险库
我正在创建一个asp.net核心Web应用程序,并且在Visual Studio中我尝试使用托管身份来获取Azure密钥库时,在以下代码上没有任何问题。
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。异常消息:尝试了以下三种方法来获取访问令牌,但是没有一种有效。 参数:连接字符串:[未指定连接字符串],资源: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的资源主体。如果未由租户管理员安装该应用程序,或者未得到该租户中任何用户的同意,则可能会发生这种情况。
解决方法
要对get-access-token
使用解决方法:
- 确保您已登录到Azure cli,只需在终端中运行命令
az account get-access-token ...
并检查您是否能够获取令牌;您使用正确的租户和订阅吗? - 将结果保存到终端会话中的环境变量中
- 将此变量作为环境变量传递给
docker run --env KVTOKEN=$Env ...
命令 - 不要忘记在应用程序中读取此变量并将其传递给
KeyVaultClient
构造函数:
var token = Environment.GetEnvironmentVariable("KVTOKEN");
KeyVaultClient kvclient = string.IsNullOrEmpty(token) ? new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(new AzureServiceTokenProvider().KeyVaultTokenCallback)) : new KeyVaultClient((authority,resource,scope) => token);
,
应该是:az account get-access-token --resource=https://vault.azure.net。然后你会得到你可以使用的访问令牌:) 这对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。