【问题标题】:Exception while connecting to KeyVault from Azure VM从 Azure VM 连接到 KeyVault 时出现异常
【发布时间】:2019-08-27 16:36:15
【问题描述】:

我正在从 Azure VM 运行我的应用程序并尝试连接 KeyVault。但我遇到了异常

参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有成功。

参数:Connectionstring:[未指定连接字符串],Resource:https://vault.azure.net,Authority:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识 (MSI) 端点。请检查您是否在已设置 MSI 的 Azure 资源上运行。

参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。 Visual Studio 令牌提供程序 Microsoft.Asal.TokenService.exe 的异常:TS003:错误,TS001:此帐户“用户名”需要重新验证。请前往Tools->Azure Services Authentication,重新验证你要使用的账号。

参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a。异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。 'az' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我已经检查了先决条件,例如 - 1.在VM的同一资源组中创建了KeyVault,并添加了2个secret。 2. 检查虚拟机是否已在 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;

【问题讨论】:

    标签: azure azure-keyvault azure-managed-identity


    【解决方案1】:

    错误表示身份验证问题,因此需要按顺序验证两件事;

    • 确认 VM 可以查询 Azure 元数据服务
    Invoke-RestMethod -Headers @{"Metadata"="true"} -URI "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text" -Method get`
    

    如果上述查询成功,则检查元数据服务上的 Identity API,但如果失败,则 VM 和 Azure 环境之间存在通信问题。

    • 确认 VM 可以查询 Azure 元数据服务的 Identity API
    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"}
    

    如果上面的查询成功,那么MSI没有问题。

    【讨论】:

      【解决方案2】:

      问题出在 Microsoft.Azure.Services.AppAuthentication 上的 nuget 版本上。 1.0.3 版本解决了这个问题。

      【讨论】:

        【解决方案3】:

        我正在使用 nuget 包 Azure.Identity 1.3 版并遇到相同的问题 TS003、TS001,所以我尝试将版本降级到 1.2.2 并且它可以工作

        【讨论】:

          【解决方案4】:

          在我的情况下,这是 Visual Studio 身份验证问题,如果您的密码在您从 Visual Studio 连接 Azure 东西后已过期,您需要重新进行身份验证。

          【讨论】:

            猜你喜欢
            • 2023-03-19
            • 2014-08-14
            • 1970-01-01
            • 2020-06-18
            • 2013-04-19
            • 2019-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多