创建ARM服务连接失败:自动服务主体无法在AAD中创建应用
我们的Azure环境包含多个App Services,此前通过Service Connection从DevOps流水线部署.NET Web项目已达2年多。上周服务连接密钥过期,尝试刷新令牌失败后,我们删除旧连接并尝试重建,却始终无法创建新连接。
操作步骤
- 以Azure订阅Owner身份登录DevOps;
- 进入项目设置>服务连接>创建服务连接;
- 选择
Azure Resource Manager类型; - 在弹出的认证对话框中登录Azure账号;
- 选择
Service principal (automatic)模式; - 设定范围级别为订阅并指定目标订阅;
- 选择对应资源组(或留空);
- 勾选「为所有流水线授予访问权限」;
- 点击保存。
错误信息
- 首次点击保存时触发:
Failed to create an app in Azure Active Directory. Error: The requesting identity (CUID 1f0b82ec-5b86-7b51-8aff-5d7386cfb80c) does not have permission to access the tenant (). - 再次点击保存时触发:
Failed to get access token from strong box. Key is invalid.
注:我是Azure AD租户成员(非来宾用户),用户设置允许执行该操作,且已被分配目标订阅的Owner、Contributor和Reader权限;团队另一成员执行相同操作也出现完全一致的错误。核心疑问:报错中提到的缺少权限的「requesting identity」究竟是哪个用户或实体?
这里的requesting identity指的是你在DevOps中登录的当前Azure AD用户(错误里的CUID就是该用户的Azure AD唯一对象ID)——也就是触发自动创建服务主体操作的发起者。
你虽然拥有订阅层面的Owner权限,但自动创建服务主体的操作依赖的是Azure AD租户层面的权限:具体需要用户具备在Azure AD中创建「应用注册」(服务主体的关联对象)的权限。默认情况下,部分租户会限制普通用户创建应用注册,哪怕这些用户是订阅的Owner。
至于第二次出现的Failed to get access token from strong box. Key is invalid错误,是第一次创建失败后,DevOps缓存了无效的临时凭据,导致后续操作触发该报错,核心根源还是第一次的租户层面权限不足问题。
解决建议
- 联系Azure AD全局管理员,检查租户的「用户设置」中「用户可以注册应用程序」的开关是否处于开启状态;
- 若全局开关关闭,可让管理员给你的账号分配
Application Developer角色,或直接授予单个的「创建应用注册」权限; - 也可以绕过自动创建流程,改用手动创建服务主体的方式:先在Azure AD中手动创建应用注册并生成密钥,再在DevOps中选择
Service principal (manual)选项配置服务连接。
内容的提问来源于stack exchange,提问作者Brian Foley

