我已经创建了这样的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
)。
我没有任何权限吗?我已经尝试过与其他角色类似,例如owner
或contributor
,但SP也会出现相同的错误,如下所示:
来自守护程序的错误响应:获取https://myregistry.azurecr.io/v2/myimage/latest/manifests/latest:未授权:需要验证
8月的更新14。:
我也无法使用SP进行docker登录
守护程序的错误响应:获取myregistry.azurecr.io/v2:未授权:需要身份验证
答案 0 :(得分:3)
您需要使用docker login登录到注册表
docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword
答案 1 :(得分:1)
对于Azure容器注册表,有两种登录方式。
一种是使用命令az acr login -n azureacrServer -u username -p password
登录,登录后您拥有所有者权限。
另一个是使用命令docker login azureacrServer -u servicePrincipalId -p sppassword
使用服务主体登录。这样,您登录后仅具有服务主体的权限。我尝试过,结果如下图所示:
此服务主体仅设置为Reader。因此我们无法推送图像。
您可以使用命令az role assignment list --scope acrId
获取有关Azure容器注册表的服务主体的详细信息,该命令将显示注册表的所有服务主体。命令az acr show --resource-group groupName --name acrName --query id --output tsv
将为您显示注册表ID。