对来自Azure VM的Keyvault访问进行故障排除

时间:2019-04-10 16:38:10

标签: azure authentication virtual-machine azure-keyvault

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

我对环境没有完全控制。

我遵循了本教程 Use Azure Key Vault with a Windows virtual machine in .NET 尽我所能,但实际上该虚拟机已经由sysadmin创建。

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

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

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

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

    • 如果我从PC上的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

您在设置中看到任何错误或有一些故障排除建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

一旦我创建了Azure VM的标识,错误就会消失。看来您不需要使用https,但我收到与您相同的错误{{1}}。 enter image description here