Azure服务主体从容器注册表中提取图像

时间:2018-08-13 22:42:45

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

我已经创建了这样的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:未授权:需要身份验证

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

另一个是使用命令docker login azureacrServer -u servicePrincipalId -p sppassword使用服务主体登录。这样,您登录后仅具有服务主体的权限。我尝试过,结果如下图所示:

Spatialite package

此服务主体仅设置为Reader。因此我们无法推送图像。

enter image description here

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