Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Azure VM连接到KeyVault时出现异常_Azure_Azure Keyvault_Azure Managed Identity - Fatal编程技术网

从Azure VM连接到KeyVault时出现异常

从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:[未指定连接字符串],资源:

我正在从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机密的访问策略

这是代码,我遗漏了什么

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元数据服务

如果上述查询成功,则检查元数据服务上的标识API,但如果失败,则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"}