3

我已经创建了这样的 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)。

有什么我不知道的权限吗?我已经尝试过类似的其他角色,例如owneror contributor,但 SP 也遇到了相同的错误,如下所示:

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


8 月 14 日更新:

我也无法使用 SP 登录

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

4

2 回答 2

4

您需要使用 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

于 2018-08-13T23:00:38.997 回答
4

对于 Azure 容器注册表,有两种登录方式。

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

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

在此处输入图像描述

此服务主体只是设置为 Reader。所以我们不能推送图像。

在此处输入图像描述

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

于 2018-08-14T08:35:31.683 回答