Azure 托管服务标识:12 次后无法获取令牌
Azure Managed Service Identity: Failed to acquire tokens after 12 times
我有一个具有系统分配的托管服务标识的 VM。我授予它从 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
里面有说明,按照文档做的。
az vm identity assign -g myResourceGroup -n myDockerVM
。
此 CLI 命令意味着您启用 VM 系统 MSI。参见 az vm identity
。
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。
az login --identity
此 CLI 命令意味着您使用 VM 的系统分配身份登录。权限取决于 VM 的受让人。这样您就可以 运行 具有 VM 权限的 CLI 命令。
az acr login --name ManiTempRegistry
此CLI 命令表示您使用当前用户登录ACR。本期是指您使用Reader权限的VM系统MSI登录ACR。
以上步骤都完成了,那么你就可以从ACR中拉取docker镜像作为Reader了。并且令牌存储在文件~/.docker/config.json
中。该文件将显示如下:
因此如果token没有过期,则不需要重新登录。所以你可以检查令牌是否正常。还有什么问题可以给我留言
接受的答案对我不起作用,但停止然后再次启动 VM 解决了这个问题。请注意,重启无效;必须停止然后从 Azure Web 界面启动,即 VM 的解除分配和重新分配。看起来像是 Azure VM 分配中的一个小故障。
我有一个具有系统分配的托管服务标识的 VM。我授予它从 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
里面有说明,按照文档做的。
az vm identity assign -g myResourceGroup -n myDockerVM
。
此 CLI 命令意味着您启用 VM 系统 MSI。参见 az vm identity
。
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。
az login --identity
此 CLI 命令意味着您使用 VM 的系统分配身份登录。权限取决于 VM 的受让人。这样您就可以 运行 具有 VM 权限的 CLI 命令。
az acr login --name ManiTempRegistry
此CLI 命令表示您使用当前用户登录ACR。本期是指您使用Reader权限的VM系统MSI登录ACR。
以上步骤都完成了,那么你就可以从ACR中拉取docker镜像作为Reader了。并且令牌存储在文件~/.docker/config.json
中。该文件将显示如下:
因此如果token没有过期,则不需要重新登录。所以你可以检查令牌是否正常。还有什么问题可以给我留言
接受的答案对我不起作用,但停止然后再次启动 VM 解决了这个问题。请注意,重启无效;必须停止然后从 Azure Web 界面启动,即 VM 的解除分配和重新分配。看起来像是 Azure VM 分配中的一个小故障。