You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Azure注册应用自行更新自身凭据?

问题描述

我尝试运行以下Azure CLI命令管理应用凭据:

az login --service-principal -u 00000000-0000-0000-0000-000000000000 -p secret --tenant 00000000-0000-0000-0000-000000000000
az ad app credential reset --id 00000000-0000-0000-0000-000000000000 --cert "@./azureappcert.pem" --append

但收到报错:

Insufficient privileges to complete the operation.

我了解Application.ReadWrite.All权限可实现此操作,但该权限允许操作所有注册应用,并非我想要的。此需求用于脚本自动化场景,且我使用微软账户登录,无法以自身身份通过CLI执行配置,希望找到细粒度的权限解决方案。

解决方案

方案一:将服务主体设为目标应用的所有者

这是最简便的方式,服务主体成为应用所有者后,默认拥有该应用的全量管理权限(包括凭据重置),且权限仅作用于目标应用,不会影响其他应用。

  1. 使用拥有Azure AD应用管理权限的账户(如全局管理员、应用管理员)登录CLI:
    az login
    
  2. 获取服务主体的对象ID(若未掌握):
    az ad sp show --id <服务主体客户端ID> --query id -o tsv
    
  3. 将服务主体添加为目标应用的所有者:
    az ad app owner add --id <目标应用ID> --owner-object-id <服务主体对象ID>
    
  4. 再次用服务主体登录并执行凭据重置命令,此时权限足够:
    az login --service-principal -u <服务主体客户端ID> -p <密钥> --tenant <租户ID>
    az ad app credential reset --id <目标应用ID> --cert "@./azureappcert.pem" --append
    

方案二:创建自定义细粒度角色(严格权限控制)

若不想让服务主体拥有应用的全量管理权限,仅需凭据重置权限,可创建自定义Azure AD角色,限定仅能操作目标应用的凭据。

  1. 编写自定义角色定义文件(例如app-cred-role.json):
    {
      "Name": "应用凭据管理角色",
      "Description": "仅允许更新指定Azure AD应用的凭据",
      "IsEnabled": true,
      "Permissions": [
        {
          "AllowedResourceActions": [
            "microsoft.directory/applications/credentials/update"
          ]
        }
      ],
      "AssignableScopes": [
        "/applications/<目标应用ID>"
      ]
    }
    
  2. 使用有权限的账户登录CLI,创建自定义角色:
    az ad role definition create --role-definition app-cred-role.json
    
  3. 将自定义角色分配给服务主体,作用范围限定为目标应用:
    az ad role assignment create --assignee <服务主体对象ID> --role "应用凭据管理角色" --scope "/applications/<目标应用ID>"
    
  4. 验证权限:用服务主体登录后执行凭据重置命令,即可正常运行。

内容的提问来源于stack exchange,提问作者SarahGC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 10:17:41