Azure管道:AzureCli@任务抛出:权限不足,无法完成操作:

x9ybnkn6  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(93)

我正在为NodeJs应用创建DevOps管道,我正在ACR中将其容器化为Docker映像,并在Azure中将其部署为ContainerApp。
我在订阅中具有以下权限:〉用户访问管理员(除此之外,不能授予更高的权限)
我已经创建了一个应用注册-〉AppReg 1-我将在管道中修补containerapp url
为了从ACR进行部署,我将编写一个管道作业作为bash脚本:
第一个
在输入中:我已经创建了一个ARM类型的服务连接,其中定义了手动服务主体inputs: azureSubscription:**armDeploymentServiceConnection**://在这里,我传递了在手动模式下创建的ServiceConnection:

用于此服务连接appdeploy 1的SP i已事先使用角色contributor创建
az ad sp create-for-rbac --scopes /subscriptions/xxxx --role Contributor --name **appSP**
此SP将导致附加AppRegistration ex-〉appSP。我仅将此SP用于内联脚本
当我运行管道时,这一行抛出以下错误:我试图获取注册AppReg 1的对象ID,我将在此注册我的containerApp:az ad app show --id $(AppReg1ClientId) --query id | jq -r .

ERROR: Insufficient privileges to complete the operation.

由于我使用角色contributor创建了服务主体,并使用该主体appSP创建了ServiceConnection,因此我认为此步骤会成功:

- task: AzureCLI@2
      inputs:
        azureSubscription: $(armDeploymentServiceConnection)

但这一行抛出错误inlineScript: | az ad app show --id $(APP_REG_CLIENT_ID) --query id | jq -r . //error line
我不确定,这里缺少什么?有人能帮忙吗?

rjee0c15

rjee0c151#

服务连接是在订阅/资源组下创建的,作为参与者,它拥有赠款管理订阅中所有资源的完全访问权限。但是,应用存在于Azure AD中,因此你需要在AAD中具有足够的权限才能列出它。由于它们处于不同的作用域中,你需要以AAD身份登录,然后运行“az ad app show --id”命令。
请好心地试着用这样的东西来试一试:

- task: AzureKeyVault@1
  inputs:
    ConnectedServiceName: **
    KeyVaultName: **
    SecretsFilter: 'secretUser,secretPassword'
    RunAsPreJob: true 
- pwsh: 
    az login -u $(secretUser) -p $(secretPassword)
    az --version
    az account show
    echo "containerapp  will be created"
    az ad app show --id *** --query id | jq -r

您也可以尝试在libarary-variable group中添加secretUser和secretPassword,并在yaml中使用它作为用户进行登录。
希望这能有所帮助。

egdjgwm8

egdjgwm82#

权限不足,无法完成操作:
此错误表示服务主体在运行commnad:命令时无权访问AAD应用程序az ad app show
当你向服务主体授予参与者角色时,它处于Azure订阅级别而不是AAD。
若要解决此问题,你需要在Azure门户-〉Azure Active Directory -〉角色和管理员-〉选择目标角色并添加用户中授予服务主体目录读取者角色或更高权限。
例如:

然后您可以运行azure cli命令:az ad app show成功。

更新日期:

另一种方法是可以在AAD -〉目标服务主体-〉API权限-〉搜索Microsoft Graph -〉应用程序中为服务主体设置Application.Read.AllApplication.ReadWrite.All范围。
以下是一个示例:

然后,您需要单击选项:授予xxx目录的管理员同意以应用API权限。

相关问题