3

我有一个服务主体,它拥有对订阅的所有者访问权限,但几乎没有网络操作。在同一个订阅中,我有一个资源组,我在其中创建了 ACR。我正在尝试使用我的服务主体登录到 acr,但它正在引发 Access Denied 错误。

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

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

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

4

1 回答 1

2

如果用户不具备注册表的正确权限或 Azure CLI 的用户凭据已过时,则可能会发生CONNECTIVITY_REFRESH_TOKEN_ERROR 。

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

看起来您的服务原则在创建时未授予所需的权限集

要向您的服务主体授予注册表访问权限,您可以为服务主体分配一个新角色。以下脚本使用az role assignment createSERVICE_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

于 2021-06-25T08:16:07.950 回答