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

使用SPN通过AZ CLI创建Azure AD应用注册时无法生成关联服务主体

问题描述

我创建了一个Azure DevOps服务连接,使用名为master-app的应用注册/SPN,该SPN拥有以下Microsoft Graph应用权限(已获得管理员同意):

Application.ReadWrite.All
Application.ReadWrite.OwnedBy
Directory.ReadWrite.All

此前执行命令az ad app create --display-name mynewapp时,会同时创建mynewapp应用注册及其关联的SPN,但近两日执行该命令仅能创建应用注册,无法生成关联SPN。我尝试执行az account clear/az logout并重新使用master-app的客户端ID和密钥ID登录,但问题依旧。

请问可能是什么原因导致的?我看到有说法称SPN只能创建无SPN的应用注册,但此前流水线明明可以成功创建带SPN的应用注册,这该如何解释?


可能原因及解释

1. Azure CLI版本变更

近期Azure CLI的版本更新可能调整了az ad app create的默认行为,或者引入了相关bug。az ad app create默认会同时创建应用注册和关联服务主体,除非显式添加--enable-service-principal false参数。你可以回退到之前能正常工作的CLI版本测试,例如:

az upgrade --version 2.51.0 # 替换为之前成功的版本号

同时可查看Azure CLI的Release Notes,确认是否有关于应用注册/服务主体创建逻辑的变更。

2. Azure AD租户配置限制

租户管理员可能近期修改了应用注册相关的权限设置:

  • 检查Azure AD的用户设置 -> 应用注册中的谁可以创建应用注册选项,是否设置为仅允许管理员创建,或限制了服务主体创建服务主体的权限;
  • 部分租户会启用**"禁止非管理员创建服务主体"**的隐性限制,即使SPN拥有Application.ReadWrite.All权限,也会被阻止自动生成关联SPN。

3. 权限有效性或范围变更

虽然你确认SPN拥有指定权限,但可能存在以下情况:

  • 权限被管理员撤销或修改了作用范围(比如从全局租户范围改为特定组/应用范围);
  • Directory.ReadWrite.All权限是否真的有效?创建服务主体需要该权限或Application.ReadWrite.All的全局范围授权,若权限范围被缩小,会导致无法生成SPN。

4. 关于"SPN只能创建无SPN的应用注册"的说法

这个说法并不准确。SPN默认可以创建带关联服务主体的应用注册,前提是拥有足够的权限(如你配置的Application.ReadWrite.All或Directory.ReadWrite.All)。此前流水线能成功,说明当时租户配置、权限和CLI环境都满足条件,当前问题大概率是后续环境或配置发生了变更,而非SPN本身的固有限制。


排查步骤
  • 在本地用master-app的身份执行az ad app create --display-name test-app,验证是否能复现问题,排除Azure DevOps服务连接的环境影响;
  • 执行az account show确认当前登录的租户、身份信息是否正确,确保是用master-app的身份在目标租户下操作;
  • 联系租户管理员检查Azure AD的应用注册和服务主体创建权限设置;
  • 回退Azure CLI版本到之前的稳定版本测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:18