【问题标题】:Troubleshooting Keyvault access from Azure VM从 Azure VM 访问 Keyvault 故障排除
【发布时间】:2019-09-01 04:50:33
【问题描述】:

我需要将 .Net Core 2.2 应用部署到 Azure VM,并且必须从 Azure Keyvault 读取一些凭据。

我无法完全控制环境。

我按照这个教程 Use Azure Key Vault with a Windows virtual machine in .NET 尽我所能,但实际上虚拟机已经由系统管理员创建。

  • 我在 VM 的同一资源组中创建了 KeyVault,并添加了 2 个机密。

  • 我检查了 VM 是否已在 Active Directory 中注册,并且它具有系统分配的身份。

  • 我向我的 Keyvault 添加了一个访问策略,允许读取和列出我的 VM 的机密。

  • 我尝试了教程中的示例应用程序。

    • 如果我从我的电脑上的 Visual Studio 运行它(使用 Azure Cli 使用 AZ LOGIN 进行身份验证),我可以获得秘密

    • 如果我在 Azure VM 中部署应用程序,我在尝试获取令牌时会收到“找不到身份”异常

  • 我还尝试在 VM 上使用 powershell 获取令牌:

$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net/'-Method GET -Headers @{Metadata="true"}

我得到了这个错误

Invoke-WebRequest : {"error":"invalid_request","error_description":"Identity not found"}
At line:1 char:13
+ $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/i ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

如果我使用 https(本教程使用 http,但为了安全起见,我也尝试了 https 变体)

$response = Invoke-WebRequest -Uri 'https://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net/' -Method GET -Headers @{Metadata="true"}

有一个明显的延迟然后我明白了:

Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:13
+ $response = Invoke-WebRequest -Uri 'https://169.254.169.254/metadata/ ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

您是否发现我的设置有任何错误或有一些故障排除建议?

【问题讨论】:

    标签: azure authentication virtual-machine azure-keyvault


    【解决方案1】:

    我可以重现此错误,该错误可能表明未找到身份。我建议再次检查您是否在 Azure 门户中正确分配了系统分配的标识。

    验证使用 Az CLI 命令创建 sysytemAssignedIdentity 时是否与“虚拟机”面板中的对象 ID 相同。如果您有很多租户,请确保在正确的租户中创建系统分配的身份。

    为 Azure VM 创建标识后,错误就会消失。看来您不需要使用https,我得到与您相同的错误Unable to connect to the remote server

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-29
      • 2020-08-01
      • 1970-01-01
      • 2013-07-15
      • 2010-11-30
      • 2021-09-11
      • 2012-02-18
      • 2011-03-07
      相关资源
      最近更新 更多