无法使用服务主体登录 ACR - 访问被拒绝

问题描述

我有一个服务主体,它对订阅具有所有者访问权限,除非进行一些网络操作。在同一个订阅中,我有一个资源组,我在其中创建了 ACR。我正在尝试使用我的服务主体登录 acr,但它抛出了拒绝访问错误

由于 SP 具有所有者权限,我希望它可以登录 ACR。

az login --service-principal -u *** --password=*** --tenant *** --allow-no-subscriptions az acr 登录 --name myregistry

警告:无法通过消息获取 AAD 授权令牌:发生错误:CONNECTIVITY_REFRESH_TOKEN_ERROR 访问注册表“acrshto01.azurecr.io”被拒绝。响应代码:403。请再次尝试运行“az login”以刷新权限。

解决方法

CONNECTIVITY_REFRESH_TOKEN_ERROR 可能发生在用户对注册表没有正确权限或 Azure CLI 的用户凭据过时。

如果您的帐户对注册表具有正确的权限,请运行 az login 以刷新权限、令牌和凭据。 参考:https://docs.microsoft.com/en-us/azure/container-registry/container-registry-health-error-reference#connectivity_refresh_token_error

看起来你的服务原则在创建时没有被授予所需的权限

为了向您的服务主体授予注册中心访问权限,您可以为服务主体分配一个新角色。 以下脚本使用 az role assignment create 命令向您在 SERVICE_PRINCIPAL_ID 变量中指定的服务主体授予所有者权限。

#!/bin/bash

# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry,and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=mycontainerregistry
SERVICE_PRINCIPAL_ID=<service-principal-ID>

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the service principal. Modify the '--role' argument
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role owner

参考:https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal#use-an-existing-service-principal

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...