我需要将.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
您在设置中看到任何错误或有一些故障排除建议吗?