Идентификатор управляемой службы Azure: не удалось получить токены после 12 раз

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

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

Я делаю что-то неправильно?

az login - удостоверение личности

az acr логин - имя MYREGISTRY

MSI: Failed to acquire tokens after 12 times
Traceback (most recent call last):
  File "/opt/az/lib/python3.6/site-packages/knack/cli.py", line 206, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 328, in execute
    raise ex
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 386, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 379, in _run_job
    six.reraise(*sys.exc_info())
  File "/opt/az/lib/python3.6/site-packages/six.py", line 693, in reraise
    raise value
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 356, in _run_job
    result = cmd_copy(params)
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 171, in __call__
    return self.handler(*args, **kwargs)
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/__init__.py", line 441, in default_command_handler
    return op(**command_args)
  File "/opt/az/lib/python3.6/site-packages/azure/cli/command_modules/profile/custom.py", line 111, in login
    return profile.find_subscriptions_in_vm_with_msi(username)
  File "/opt/az/lib/python3.6/site-packages/azure/cli/core/_profile.py", line 297, in find_subscriptions_in_vm_with_msi
    msi_creds = MSIAuthentication(resource=resource)
  File "/opt/az/lib/python3.6/site-packages/msrestazure/azure_active_directory.py", line 576, in __init__
    self.set_token()
  File "/opt/az/lib/python3.6/site-packages/msrestazure/azure_active_directory.py", line 584, in set_token
    token_entry = self._vm_msi.get_token(self.resource)
  File "/opt/az/lib/python3.6/site-packages/msrestazure/azure_active_directory.py", line 632, in get_token
    token_entry = self._retrieve_token_from_imds_with_retry(resource)
  File "/opt/az/lib/python3.6/site-packages/msrestazure/azure_active_directory.py", line 674, in _retrieve_token_from_imds_with_retry
    raise TimeoutError('MSI: Failed to acquire tokens after {} times'.format(max_retry))
TimeoutError: MSI: Failed to acquire tokens after 12 times

1 ответ

Решение

Есть объяснение, что то, что вы делаете, следует за документом.

  1. az vm identity assign -g myResourceGroup -n myDockerVM,

Эта команда CLI означает, что вы включаете MSI системы VM. Увидеть az vm identity,

  1. az role assignment create --assignee '0a6b28fd-*********' --scope '/subscriptions/{subscription-id}/resourceGroups/{your-resource-group}/providers/Microsoft.ContainerRegistry/registries/{acr-name}' --role reader

Эта команда CLI означает, что вы назначаете разрешение на чтение виртуальной машины для доступа к ACR с помощью MSI системы VM.

  1. az login --identity

Эта команда CLI означает, что вы входите в систему, используя системную идентификационную информацию виртуальной машины Разрешение зависит от правопреемника с ВМ. Так что вы можете запустить команду CLI с разрешением VM.

  1. az acr login --name ManiTempRegistry

Эта команда CLI означает, что вы входите в ACR с текущим пользователем. В этом выпуске это означает, что вы входите в ACR с MSI системы VM с разрешением Reader.

Все вышеперечисленные шаги завершены, затем вы можете просто извлечь образ докера из ACR в качестве устройства чтения. И токен хранится в файле ~/.docker/config.json, И файл покажет так:

Так что, если токен не истек, вам не нужно снова входить в систему. Таким образом, вы можете проверить, в порядке ли токен. Любой другой вопрос вы можете дать мне сообщение.

Принятый ответ не помог мне, но остановка и повторный запуск виртуальной машины снова решили проблему. Имейте в виду, что перезагрузка не сработала; пришлось остановить, а затем запустить из веб-интерфейса Azure, т.е. освободить и перераспределить виртуальную машину. Похоже на сбой в выделении виртуальных машин Azure.