如何让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执行配置,希望找到细粒度的权限解决方案。
解决方案
方案一:将服务主体设为目标应用的所有者
这是最简便的方式,服务主体成为应用所有者后,默认拥有该应用的全量管理权限(包括凭据重置),且权限仅作用于目标应用,不会影响其他应用。
- 使用拥有Azure AD应用管理权限的账户(如全局管理员、应用管理员)登录CLI:
az login - 获取服务主体的对象ID(若未掌握):
az ad sp show --id <服务主体客户端ID> --query id -o tsv - 将服务主体添加为目标应用的所有者:
az ad app owner add --id <目标应用ID> --owner-object-id <服务主体对象ID> - 再次用服务主体登录并执行凭据重置命令,此时权限足够:
az login --service-principal -u <服务主体客户端ID> -p <密钥> --tenant <租户ID> az ad app credential reset --id <目标应用ID> --cert "@./azureappcert.pem" --append
方案二:创建自定义细粒度角色(严格权限控制)
若不想让服务主体拥有应用的全量管理权限,仅需凭据重置权限,可创建自定义Azure AD角色,限定仅能操作目标应用的凭据。
- 编写自定义角色定义文件(例如
app-cred-role.json):{ "Name": "应用凭据管理角色", "Description": "仅允许更新指定Azure AD应用的凭据", "IsEnabled": true, "Permissions": [ { "AllowedResourceActions": [ "microsoft.directory/applications/credentials/update" ] } ], "AssignableScopes": [ "/applications/<目标应用ID>" ] } - 使用有权限的账户登录CLI,创建自定义角色:
az ad role definition create --role-definition app-cred-role.json - 将自定义角色分配给服务主体,作用范围限定为目标应用:
az ad role assignment create --assignee <服务主体对象ID> --role "应用凭据管理角色" --scope "/applications/<目标应用ID>" - 验证权限:用服务主体登录后执行凭据重置命令,即可正常运行。
内容的提问来源于stack exchange,提问作者SarahGC
相关产品推荐
相关产品推荐

