Мне нужно развернуть приложение .Net Core 2.2 на виртуальной машине Azure, и я должен прочитать некоторые учетные данные из Azure Keyvault.
У меня нет полного контроля над окружающей средой.
Я следовал этому руководству Используйте Azure Key Vault с виртуальной машиной Windows в .NET. сколько мог, но на самом деле виртуальная машина уже была создана сисадмином.
Я создал KeyVault в той же группе ресурсов виртуальной машины и добавил 2 секрета.
Я проверил, что виртуальная машина зарегистрирована в Active Directory и что ей присвоено системное удостоверение.
Я добавил в свой Keyvault политику доступа, позволяющую читать и перечислять секреты для моей виртуальной машины.
Я попробовал пример приложения в учебнике.
Если я запущу его из Visual Studio на своем компьютере (используя Azure Cli для аутентификации с помощью AZ LOGIN), я смогу получить секреты.
Если я развертываю приложение на своей виртуальной машине Azure, я получаю исключение «Идентификация не найдена» при попытке получить токен.
Я также попытался получить токен с помощью 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
Вы видите какую-либо ошибку в моих настройках или у вас есть предложения по устранению неполадок?
Я могу воспроизвести эту ошибку, ошибка, вероятно, указывает на то, что Identity not found. Я предлагаю еще раз проверить, правильно ли вы назначили системное удостоверение на портале Azure.
Убедитесь, что sysytemAssignedIdentity
при его создании с помощью команды Az CLI совпадает с идентификатором объекта на панели виртуальной машины. Если у вас много арендаторов, убедитесь, что вы создаете системное назначенное удостоверение в нужном арендаторе.
Как только я создаю удостоверение для виртуальной машины Azure, ошибка исчезает. Вроде не нужно использовать https, у меня такая же ошибка Unable to connect to the remote server
как и у вас.