【发布时间】: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