我正在尝试将签名的图像推送到Azure容器注册表。我收到错误消息“无法签名:您无权执行此操作:服务器返回401”,即使所有RBAC权限都已到位并且我使用正确的凭据登录。
我已经在个人(开发人员)Azure帐户中创建了一个ACR。我遵循了this article中解释的说明。 我已在Container Registry资源中启用了Content Trust。
我已在Azure AD中注册为用户,并且为容器注册表资源分配了以下角色: -所有者 -AcrImageSigner -AcrPush
我已使用az login
登录到Azure,然后使用ac acr login --resource-group <MY_RESOURCE_GROUP> --name <ACR_NAME>
登录了我的容器注册表
*编辑-或者,我尝试在ACR上启用管理员帐户,并将docker login
与管理员帐户凭据一起使用,
我能够通过Azure CLI查看分配给自己的角色,并且已经检查过我是否使用相同的凭据登录。我也尝试启用和禁用管理员访问密钥
这些是我用来从Windows计算机将签名图像推送到ACR的命令:
set DOCKER_CONTENT_TRUST=1
docker push <ACR_SERVER>/<IMAGE_NAME>:<TAG>
图像已推送到存储库,但未签名。这些是日志:
The push refers to repository [MY_ACR_NAME.azurecr.io/appname]
4a85926cec01: Layer already exists
349c7f00d08e: Layer already exists
370f72f4d447: Layer already exists
8dc6654a61c6: Layer already exists
8fa655db5360: Layer already exists
latest: digest: sha256:<A_VERY_LONG_SHA> size: 1375
Signing and pushing trust metadata
Enter passphrase for root key with ID 0c6a1f8:
Enter passphrase for new repository key with ID 96c45d3:
Repeat passphrase for new repository key with ID 96c45d3:
Finished initializing "MY_ACR_NAME.azurecr.io/appname"
failed to sign MY_ACR_NAME.azurecr.io/appname: you are not authorized to perform this operation: server returned 401.
由于我已通过身份验证并且具有适当的角色,因此我希望能够对图像进行签名。我希望有人能帮助我弄清楚我的缺失!
答案 0 :(得分:0)
根本原因是ACR无法识别权限列表 如果当前登录用户具有经典订阅管理员 角色,例如服务管理员和共同管理员。
如果用户具有服务管理员凭据,那么使用用户主体(Azure AD帐户)签名容器此时将失败,基本上是在尝试将容器签名到自己的私有存储库时。使用服务主体凭据签名和拉出已签名的容器不是问题。