从Azure VM连接到KeyVault时出现异常
我正在从Azure VM运行我的应用程序,并尝试与KeyVault连接。但我正在变得异常 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试了以下3种方法来获取访问令牌,但均无效 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识(MSI)终结点。请检查您是否在具有MSI设置的Azure资源上运行 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。 Visual Studio令牌提供程序Microsoft.Asal.TokenService.exe异常:TS003:错误,TS001:此帐户“用户名”需要重新身份验证。请转到工具->Azure服务验证,然后重新验证您要使用的帐户 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试使用Azure CLI获取令牌。无法获取访问令牌。'az'未被识别为内部或外部命令, 可操作的程序或批处理文件 我已经检查了先决条件,例如- 1.在VM的同一资源组中创建了KeyVault,并添加了2个机密。 2.已检查VM是否已在Active Directory中注册,以及是否具有系统分配的标识。 3.添加了允许读取和列出VM机密的访问策略 这是代码,我遗漏了什么从Azure VM连接到KeyVault时出现异常,azure,azure-keyvault,azure-managed-identity,Azure,Azure Keyvault,Azure Managed Identity,我正在从Azure VM运行我的应用程序,并尝试与KeyVault连接。但我正在变得异常 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试了以下3种方法来获取访问令牌,但均无效 参数:Connectionstring:[未指定连接字符串],资源:,权限:。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识(MSI)终结点。请检查您是否在具有MSI设置的Azure资源上运行 参数:Connectionstring:[未指定连接字符串],资源:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = keyVaultClient.GetSecretAsync($"https://vaultname.vault.azure.net/Secrets/connString").Result.Value;
错误表明存在身份验证问题,因此需要按顺序验证两件事
- 确认VM可以查询Azure元数据服务
- 确认VM可以查询Azure元数据服务的标识API
如果上述查询成功,则MSI没有问题。问题在于Microsoft.Azure.Services.AppAuthentication上的nuget版本。版本1.0.3解决了这个问题。我使用的是nuget软件包Azure.Identity版本1.3,并且遇到了相同的问题TS003、TS001,所以我尝试将版本降级到1.2.2,它可以正常工作
Invoke-RestMethod -Headers @{"Metadata"="true"} -URI "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text" -Method get`
Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Headers @{Metadata="true"}