Azure多租户应用:创建仅单subscription权限的用户/Service Principal
如何创建仅拥有单个Azure订阅访问权限的账号?
当然可以!你完全可以为第二个系统创建一个仅具备特定订阅访问权限的Service Principal(服务主体)——这不仅能满足单订阅管理的需求,还能遵循最小权限原则,降低安全风险。下面给你两种可行的方案,以及你之前操作没达预期的原因说明:
方案一:创建全新的限定订阅权限的SP(推荐)
这是最清晰的权限隔离方式,专门为第二个系统打造独立的身份:
- 用Azure CLI快速创建
执行以下命令,替换占位符为你的实际信息:
这里的关键是az ad sp create-for-rbac --name "SecondSystem-Subscription-SP" --role "Contributor" --scopes "/subscriptions/{目标订阅ID}"--scopes参数,直接把SP的权限范围锁定在目标订阅上;--role可以根据实际需求调整,比如只读访问用Reader,需要全管理用Owner,或者自定义角色。执行后会返回appId、password、tenantId等凭据,把这些交给第二个系统用来认证即可。 - 验证权限(可选但推荐)
可以用这个SP登录测试,确认只能访问目标订阅:az login --service-principal -u {appId} -p {password} --tenant {tenantId} # 尝试列出目标订阅的VM,应该能正常返回 az vm list --subscription {目标订阅ID} # 尝试访问其他订阅,会提示权限不足 az vm list --subscription {其他订阅ID}
方案二:调整现有SP的权限范围(不推荐,除非必须复用)
如果你坚持要用已有的SP,那需要修改它的角色分配,把权限范围缩小到单个订阅:
- 先查看现有SP的所有角色分配,找出需要移除的宽范围权限:
az role assignment list --assignee {现有SP的appId} - 删除不需要的角色分配(比如全局或多订阅范围的):
az role assignment delete --assignee {appId} --role {原有角色名} --scope {原有权限范围} - 添加目标订阅的角色分配:
az role assignment create --assignee {appId} --role "Contributor" --scopes "/subscriptions/{目标订阅ID}"
关于你之前操作的补充说明
你提到“为已创建的Service Principal设置密码”,其实SP的密码(客户端密钥)只是身份认证凭据,用来证明这个SP的身份,和它能访问哪些资源是两回事。权限的控制核心是角色分配+作用域(scopes)——之前的操作只设置了认证凭据,但没调整权限范围,所以才没达到仅访问单订阅的效果。
另外提醒下:如果是跨租户场景(第二个系统管理的是客户租户下的订阅),要确保客户已经授予这个SP对其订阅的访问权限;如果是同租户,直接按上面的步骤操作即可。
内容的提问来源于stack exchange,提问作者Michael Sabin
相关产品推荐
相关产品推荐

