我遵循了Microsoft的本指南: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-managed-identity
一切正常,但是当我想在容器中使用ASP.NET Core 2.1进行部署时,在我的代码中我尝试读取KeyVault机密的方法不起作用。 不过,它无需将其部署在Docker容器中即可工作。
但是目标是将项目部署到docker容器中,将其注册到Azure容器注册表中,然后创建一个具有可以读取密钥保险库秘密的容器的容器实例。
我遇到的错误通常是试图从运行中的.NET核心Docker容器中的Keyvaults读取机密时得到的错误:
AzureServiceTokenProviderException:参数:Connectionstring:[未指定连接字符串],资源:https://vault.azure.net,Authority:https://login.windows.net/。异常消息:尝试了以下三种方法来获取访问令牌,但是没有一种有效。参数:Connectionstring:[未指定连接字符串],Resource:https://vault.azure.net,Authority:https://login.windows.net/。异常消息:尝试使用托管服务身份获取令牌。无法连接到托管服务标识(MSI)端点。请检查您是否正在运行具有MSI安装程序的Azure资源。参数:Connectionstring:[未指定连接字符串],Resource:https://vault.azure.net,Authority:https://login.windows.net/。异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。未设置环境变量LOCALAPPDATA。参数:Connectionstring:[未指定连接字符串],Resource:https://vault.azure.net,Authority:https://login.windows.net/。异常消息:尝试使用Azure CLI获取令牌。无法获取访问令牌。 / bin / bash:az:没有这样的文件或目录。
是否有从Azure Keyvault机密中读取Docker容器的指南?
读取密钥库机密的源代码:
public static async Task<string> GetSecret(string baseUrl, string keyName)
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
using (var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)))
{
var secret = await keyVaultClient.GetSecretAsync(baseUrl, keyName).ConfigureAwait(false);
return secret
}
}
答案 0 :(得分:0)
首先,您应该知道托管身份只是Azure服务的羽毛。此外,即使对于Azure Services,也不支持羽毛所有的服务。您可以知道哪种Azure服务支持托管身份here。
您可以看一下MSI如何用于Azure服务here。因此,似乎无法将MSI用于不属于Azure容器实例内部Azure的Docker容器。该错误还显示:
异常消息:尝试使用托管服务标识获取令牌。 无法连接到托管服务标识(MSI)端点。 请检查您是否正在运行具有MSI的Azure资源 设置。
但是我建议您可以尝试使用服务主体来读取存储在KeyVault中的密钥或访问其他Azure服务。
答案 1 :(得分:0)
似乎我不知道使用AppAuthentication NuGet 1.1.0-preview产生了错误。 使用1.0.3,在运行容器图像的azure容器实例中一切正常:)