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

标签 azure azure-keyvault azure-managed-identity

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

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

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

参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net ,权限:https://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a 。异常消息:尝试使用 Visual Studio 获取 token 。无法获取访问 token 。 Visual Studio token 提供程序 Microsoft.Asal.TokenService.exe 的异常:TS003:错误,TS001:此帐户“用户名”需要重新身份验证。请转到“工具”->“Azure 服务身份验证”,然后重新验证您要使用的帐户。

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

我已经检查了先决条件,例如 - 1.在VM的同一资源组中创建KeyVault并添加2个 secret 。 2. 检查虚拟机是否已在 Active Directory 中注册并且具有系统分配的标识。 3. 添加了允许读取和列出虚拟机 secret 的访问策略。

这是代码,我缺少什么

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 元数据服务
Invoke-RestMethod -Headers @{"Metadata"="true"} -URI "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text" -Method get`

Image 1

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

  • 确认虚拟机可以查询 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"}

Image 2

如果上述查询成功,则 MSI 没有任何问题。

关于azure - 从 Azure VM 连接到 KeyVault 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678993/

相关文章:

azure - 无法通过 Windows Azure Add On Store 添加 New Relic

c# - 是否应该隐藏 Azure Key Vault URL?

powershell - 如何使用带有证书身份验证的 powershell 获取 Azure Key Vault secret ?

singleton - 带有 AdlsClient : Access token expired 的 Azure MSI

wcf - Azure 服务总线中继响应缓慢

azure - 使用 powershell 将 Azure Key Vault 证书导入到应用服务?

Azure PowerShell Set-AzKeyVaultAccessPolicy 命令设置数据工厂的访问策略

c# - 使用托管身份在另一个函数应用程序中调用 http 触发的函数应用程序

azure - 通过自动化为多个资源组上的托管身份添加 RBAC 角色

azure - SSH 到 Azure Kubernetes 虚拟机时出现错误