#azure #authentication #virtual-machine #azure-keyvault
#azure #проверка подлинности #виртуальная машина #azure-keyvault
Вопрос:
Мне нужно развернуть приложение .Net Core 2.2 на виртуальной машине Azure, и я должен прочитать некоторые учетные данные из Azure Keyvault.
У меня нет полного контроля над средой.
Я следовал этому руководству, используя Azure Key Vault с виртуальной машиной Windows в .NET, насколько мог, но на самом деле виртуальная машина уже была создана системным администратором.
-
Я создал KeyVault в той же группе ресурсов виртуальной машины и добавил 2 секрета.
-
Я проверил, что виртуальная машина зарегистрирована в Active Directory и что ей присвоен системный идентификатор.
-
Я добавил в свой Keyvault политику доступа, позволяющую считывать и перечислять секреты моей виртуальной машины.
-
Я попробовал пример приложения из руководства.
-
Если я запущу его из Visual Studio на своем ПК (используя Azure Cli для аутентификации с помощью входа в систему AZ), я смогу получить секреты
-
Если я развертываю приложение на своей виртуальной машине Azure, я получаю исключение «Идентификатор не найден» при попытке получить токен
-
-
Я также пытался получить токен с помощью powershell на виртуальной машине:
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01amp;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-01amp;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:
Я могу воспроизвести эту ошибку, ошибка, вероятно, указывает на то, что идентификатор не найден. Я предлагаю еще раз проверить, правильно ли вы назначили идентификатор, присвоенный системе на портале Azure.
Проверьте sysytemAssignedIdentity
, совпадает ли идентификатор объекта на панели виртуальной машины при его создании с помощью команды командной строки Az. Если у вас много клиентов, убедитесь, что вы создали идентификатор, назначенный системе, в правильном клиенте.
Как только я создаю удостоверение для виртуальной машины Azure, ошибка исчезает. Кажется, вам не нужно использовать https, я получаю ту же ошибку Unable to connect to the remote server
, что и вы.