Устранение неполадок доступа к Keyvault из Azure VM - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно развернуть приложение .Net Core 2.2 на виртуальной машине Azure, и я должен прочитать некоторые учетные данные из Azure Keyvault.

У меня нет полного контроля над окружающей средой.

Я следовал этому уроку Использование хранилища ключей Azure с виртуальной машиной 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

Видите ли вы какие-либо ошибки в моих настройках или есть предложения по устранению неполадок?

1 Ответ

1 голос
/ 11 апреля 2019

Я могу воспроизвести эту ошибку, ошибка, вероятно, указывает на то, что личность не найдена.Я предлагаю еще раз проверить, правильно ли вы присвоили системный идентификатор на портале Azure.

Проверьте, совпадает ли sysytemAssignedIdentity при создании с помощью команды Az CLI с идентификатором объекта на панели виртуальной машины.,Если у вас много арендаторов, убедитесь, что вы создали системный идентификатор в соответствующем арендаторе.

enter image description here

После создания идентификатора для виртуальной машины Azure,ошибка исчезает.Кажется, вам не нужно использовать https, я получаю ту же ошибку Unable to connect to the remote server, что и вы.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...