【问题标题】:Azure Managed Service Identity: Failed to acquire tokens after 12 timesAzure 托管服务标识:12 次后无法获取令牌
【发布时间】:2019-01-22 08:30:17
【问题描述】:

我的虚拟机具有系统分配的托管服务标识。我允许它从 Azure 容器注册表中提取图像。 I followed this tutorial.

我昨天工作得很好。但是当要拉新图像时,它说要重新验证。这就是失败的地方。当我执行以下任一操作时,我都会收到错误消息,指出令牌获取失败。

我做错了吗?

az login --identity

az acr login --name 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

【问题讨论】:

  • 还有问题吗?或者,如果答案有帮助,您可以接受。

标签: azure-active-directory azure-container-registry azure-managed-identity


【解决方案1】:

有说明你做的事情遵循文档。

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

此 CLI 命令意味着您启用 VM 系统 MSI。见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 命令意味着您分配 VM Reader 权限以使用 VM 系统 MSI 访问 ACR。

  1. az login --identity

此 CLI 命令意味着您使用虚拟机的系统分配身份登录。权限取决于 VM 的受让人。这样你就可以在VM权限下运行CLI命令了。

  1. az acr login --name ManiTempRegistry

此 CLI 命令意味着您使用当前用户登录 ACR。在这个问题中,这意味着您使用具有 Reader 权限的 VM 系统 MSI 登录 ACR。

以上所有步骤都完成了,接下来你就可以从 ACR 中拉取 docker 镜像作为 Reader 了。并且令牌存储在文件~/.docker/config.json 中。该文件将显示如下:

所以如果令牌没有过期,就不需要再次登录。因此,您可以检查令牌是否正常。还有什么问题可以私信我。

【讨论】:

    【解决方案2】:

    接受的答案对我不起作用,但停止然后再次启动 VM 解决了这个问题。请注意,重新启动没有奏效;必须停止然后从 Azure Web 界面启动,即 VM 的解除分配和重新分配。 Azure VM 分配中的故障。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2020-07-14
      • 2018-07-22
      相关资源
      最近更新 更多