Azure ExpiredAuthenticationToken во время New-AzureRmResourceGroupDeployment при развертывании ресурсов через Visual Studio

Я пытаюсь развернуть кластер HDInsight с помощью шаблона ARM через Visual Studio. Я создал проект группы ресурсов Azure в Visual Studio 2015 и добавил определения ресурсов в файлы шаблона JSON.

Однако, когда я перешел к его развертыванию (щелкнув проект правой кнопкой мыши, выбрав «Развернуть» -> «Новое развертывание», введя свои параметры), отображается вывод Visual Studio (я вырезал некоторые скучные вещи):

17:19:23 - Сборка началась.

17:19:23 — Проект «LaunchHdInsightCluster.deployproj» (цели StageArtifacts):

[отрезать]

17:20:27 — [ПОДВЕРГЛ.] 17:20:27 — статус подготовки ресурса Microsoft.HDInsight/clusters 'groupbhdinsight' выполняется

17:31:06 — [ОШИБКА] New-AzureRmResourceGroupDeployment: ExpiredAuthenticationToken: время истечения срока действия токена доступа в формате UTC «14 марта 2016 г., 17:31:06» раньше, чем текущее время в формате UTC «14 марта 2016 г. 5». :31:07 PM'.

Обратите внимание, что развертывание выполнялось только в течение 12 минут до истечения срока действия маркера доступа — очевидно, что для развертывания кластера HDInsight это проблема (в среднем занимает 20 минут).

Я просто пытаюсь понять, что здесь происходит под капотом, так как я не могу найти документацию для этого. то есть:

Что создает токен доступа и как? Как долго это длится? Меня не спрашивали о каких-либо учетных данных Azure при развертывании — я предполагаю, что это должно быть связано с тем, что я вошел в Visual Studio, используя ту же учетную запись, которую использую в Azure, и он «заимствует» сеанс аутентификации, но это просто предположение

Что определяет время истечения срока действия токена доступа, чтобы я мог предотвратить повторение этого?

Как обновить токен аутентификации?


person James Allen    schedule 14.03.2016    source источник
comment
У меня точно такая же проблема. Я инициировал свое развертывание около двадцати минут назад (около 14 марта 2016 г., 18:10 UTC). Считаете ли вы, что это временная проблема с группой ресурсов Azure? P.S. Регион = Запад США   -  person Igor Soloydenko    schedule 14.03.2016
comment
Я не вижу отключенных служб Azure: azure.microsoft.com/en-us/ статус В этом временном окне есть одна запись, связанная с классическими виртуальными машинами. Не уверен, что это актуально: › ОБЗОР ВОЗДЕЙСТВИЯ. В период с 01:30 UTC 10 марта 2016 г. до 03:53 UTC 14 марта 2016 г. клиенты, использующие новый портал (portal.azure.com), не могли добавлять конечные точки к классическим виртуальным машинам. Та же функция была доступна на классическом портале (manage.windowsazure.com).   -  person Igor Soloydenko    schedule 14.03.2016
comment
Что ж, к счастью, мое развертывание прошло успешно, несмотря на ошибку — похоже, у меня есть полностью работающий кластер HDInsight. Я предполагаю, что время аутентификации истекло после того, как шаблон ARM был отправлен в Azure, поэтому единственная «проблема» заключалась в том, чтобы не получить результат (т.е. развертывание прошло успешно). Поэтому я думаю, что проблема чисто на стороне клиента с Visual Studio.   -  person James Allen    schedule 14.03.2016
comment
Я нашел следующее в начале сценария PowerShell под названием Deploy-AzureResourceGroup.ps1, который VS сгенерировал как часть шаблона проекта: [Microsoft.Azure.Common.Authentication.AzureSession]::ClientFactory.AddUserAgent("VSAzureTools-$UI$($host.name)".replace(" ","_"), "2.8"). Я думаю, что VS вызывает этот скрипт для развертывания. Похоже, это захватывает токен из VS. Я мог бы попробовать изменить это, например. вместо этого выполнить Login-AzureRmAccount и выполнить вход в интерактивном режиме   -  person James Allen    schedule 14.03.2016


Ответы (5)


Здесь происходит то, что развертывание группы ресурсов Azure в VS использует сценарий PowerShell в проекте для выполнения развертывания (даже несмотря на то, что выходные данные размещаются в VS, мы используем этот сценарий PS для выполнения работы). Сценарий PowerShell аутентифицируется с помощью токена из вашего входа в VS. Этот токен действителен только в течение часа, а затем VS обновит его. Однако после передачи PowerShell PowerShell не обновляет его автоматически. Поэтому, если у вас есть токен на 59 минут, срок его действия истечет вскоре после начала развертывания. Жетон может длиться час или меньше. Мы работаем над исправлением этого (т. е. PowerShell автоматически обновляет токен), но это еще не прошло месяц или около того. См.: https://github.com/Azure/azure-powershell/issues/1068

Обходные пути: К сожалению, от VS нет хорошего обходного пути. Но...

Надеюсь, это поможет...

person bmoore-msft    schedule 15.03.2016
comment
Спасибо за подробный ответ @bmoore-msft! - person James Allen; 16.05.2016
comment
Я не знаю, следите ли вы за этой темой, но я все еще получаю ее больше года спустя. В моем случае у меня есть шаблон с проблемами, поэтому токен, который я получаю, действителен с первой попытки подключения, то есть при первой попытке развертывания. к тому времени, когда я исправил проблемы с проверкой, прошло 40 минут, и у меня есть только 20 минут, чтобы следить за развертыванием. - person bytejunkie; 06.09.2016
comment
Я только что столкнулся с такой же или очень похожей проблемой, вызывающей хаос в PowerShell и Visual Studio. Во-первых, что бы я ни делал в PowerShell, он продолжал выбирать неправильную подписку, даже когда я вызывал Select-AzureRmSubscription с явным SubscriptionId(!) Затем то же самое начало происходить в Visual Studio, прежде чем я получил ту же ошибку Expired Token. Решение для меня состояло в том, чтобы вызвать Clear-AzureRmContext с -Scope как Process, так и CurrentUser, прежде чем также вызывать Disable-AzureRmContextAutosave. - person AndyHerb; 06.07.2018

Бьюсь об заклад, это была временная проблема. Я повторил развертывание (необходимо изменить мой шаблон ARM), и теперь это удалось.

Проверьте свою группу ресурсов Azure на портале. Скорее всего, ваши ресурсы будут запущены.

@ Cleverguy25 объяснил, как, по моему мнению, работает процесс развертывания.

person Igor Soloydenko    schedule 14.03.2016
comment
Кажется, это было временно, после удаления всех ресурсов из моего первого запуска я попытался снова выполнить повторное развертывание без изменений в шаблоне ARM, и это удалось — это заняло около 45 минут. - person James Allen; 14.03.2016
comment
Итак, при развертывании того же шаблона ARM на следующий день я снова получил исключение ExpiredAuthenticationToken, на этот раз через 11 минут после начала развертывания. Так что это может быть не случайный разовый сбой, а скорее постоянная и прерывистая проблема :( Я предполагаю, что VS периодически обновляет токен аутентификации в фоновом режиме, может быть, со сроком действия час или два, и по случайной случайности он может истечь иногда во время длительного развертывания? - person James Allen; 15.03.2016

Я не уверен, но полагаю, что New-AzureRmResourceGroupDeployment загружает файл вашего шаблона и настраивает развертывание в облаке. Затем он запрашивает развертывание, чтобы убедиться, что оно выполнено, и выводит ресурсы по мере их создания. Очевидно, что эти запросы ошибаются, когда срок действия токена истекает. Но развертывание должно продолжаться.

Вы можете проигнорировать эту ошибку и самостоятельно запросить развертывание или группу ресурсов, чтобы узнать, когда это будет сделано.

person Cleverguy25    schedule 14.03.2016
comment
Если вы входите через LiveId, избежать интерактивного входа невозможно. Но если вы входите в систему через пользователя Azure AD, я думаю, вы можете снова указать пароль и войти в систему. Также вы можете настроить вход на основе сертификата с помощью ServicePrincipal, как описано здесь: azure .microsoft.com/en-us/blog/azps-1-0 - person Cleverguy25; 14.03.2016
comment
Да, оказывается, развертывание в конечном итоге удалось, несмотря на ошибку, поэтому я думаю, что вы правы насчет продолжения развертывания. - person James Allen; 14.03.2016

Я следую этому сообщению и просто выполняю эту команду «Clear-AzureRmContext», затем снова подключаюсь к Azure, используя «connect-AzAccount», проблема решена.

https://github.com/Azure/azure-powershell/issues/6585

person Ju Chen    schedule 15.06.2020

Откройте новую оболочку PowerShell и получите текущие метаданные, используемые для проверки подлинности запросов Azure Resource Manager с помощью Clear-AzureRmContext.

Это сработало волшебство для меня.

person Nkoro Joseph Ahamefula    schedule 08.08.2020