Устранение неполадок доступа по умолчанию с виртуальной машины Azure

#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 , что и вы. введите описание изображения здесь