【问题标题】:Azure Service Principal pull images from Container RegistryAzure 服务主体从 Container Registry 拉取映像
【发布时间】:2018-08-13 22:42:44
【问题描述】:

我已经创建了这样的 Azure 服务主体

az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role reader

登录 (az login --service-principal -u $SERVICE_PRINCIPAL_NAME -p $SERVICE_PRINCIPAL_ID --tenant $TENANT_ID) 后,我可以看到我的注册表中的所有图像 (az acr repository list --name $ACR_REGISTRY_NAME),但我无法推送或拉取图像 (docker pull myregistry.azurecr.io/myimage:latest)。

是否有我不知道的权限?我尝试过与ownercontributor 等其他角色类似的操作,但SP 也遇到了同样的错误,如下所示:

来自守护程序的错误响应:获取https://myregistry.azurecr.io/v2/myimage/latest/manifests/latest:未授权:需要身份验证


8 月 14 日更新:

我也无法使用 SP 进行 docker 登录

来自守护程序的错误响应:获取 myregistry.azurecr.io/v2:未授权:需要身份验证

【问题讨论】:

  • 看你的错误似乎你需要先docker login

标签: azure docker azure-cli azure-container-registry service-principal


【解决方案1】:

您需要使用 docker login 登录到注册表

docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword

参考:https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication#service-principal

【讨论】:

  • 不幸的是,这也不起作用:>来自守护程序的错误响应:获取myregistry.azurecr.io/v2:未授权:需要身份验证
  • 您必须将 替换为您的登录服务器
【解决方案2】:

对于 Azure Container Registry,有两种登录方式。

一种是用az acr login -n azureacrServer -u username -p password命令登录,登录后你就有了owner权限。

另一种是使用命令docker login azureacrServer -u servicePrincipalId -p sppassword 使用服务主体登录。这样,你登录后就只有服务主体的权限了。我试了一下,结果如下图所示:

此服务主体只是设置为读取器。所以我们无法推送图片。

您可以使用命令az role assignment list --scope acrId获取有关Azure容器注册表的服务主体的详细信息,该命令将显示该注册表的所有服务主体。命令 az acr show --resource-group groupName --name acrName --query id --output tsv 将显示注册表 ID。

【讨论】:

  • 谢谢你的详细解答,问题其实是完全不同的方向,供参考:github.com/docker/for-mac/issues/2295
  • @zara 所以我建议你在答案末尾获取服务主体的信息。:-)
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2021-03-13
  • 2017-07-02
  • 2023-03-07
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 2022-11-07
相关资源
最近更新 更多