我有一个受 Azure AD 保护的 Web API。我为 Web API 创建了一个应用程序注册,只允许来自该 Azure AD 的用户访问 API(即单租户)。此过程还在该租户中创建了一个服务主体。
我想知道的是,此服务主体是否可以在信任此 Azure AD 的 Azure 订阅中自行分配 RBAC 角色(与此相关的任何 RBAC 角色)?或者这是否是用户启动的操作,其中具有适当权限(如 Owner
或 User Access Administrator
)的用户必须为此服务主体分配适当的角色?
无论我的理解是什么,我相信是后者(即另一个用户必须执行此操作)。不过看起来应该是可能的。
我之所以这么说是因为当我创建一个新的 Azure 订阅时,我会自动在该 Azure 订阅中分配一个 Owner
角色(我是 Azure AD 中的全局管理员)。我想知道这是如何实现的。
如果确实可以,那么应该为服务主体分配什么 Azure AD 角色?
对此的任何见解将不胜感激。
答案 0 :(得分:2)
当然可以,但服务主体还需要 Microsoft.Authorization/roleAssignments/write
权限,例如Owner
或 User Access Administrator
为自身分配另一个 RBAC 角色。
如果您的意思是服务主体当前没有 RBAC 角色,那么它不能,即使它是租户中的全局管理员,也无法直接将 RBAC 角色分配给自己。
另外,用户账号与服务主体不同,如果用户是租户中的全局管理员,他可以简单地Elevate access to manage all Azure subscriptions and management groups
为自己(这个只对用户有效,对服务主体无效),然后他将获得 User Access Administrator
范围内的 root
角色,然后他可以为自己分配任何 RBAC 角色。
如果您的服务主体是全局管理员并希望为自己分配 RBAC 角色,您可能需要先将全局管理员角色分配给另一个用户帐户,然后提升访问权限以管理所有 Azure 订阅,然后使用该用户帐户将 RBAC 角色分配给服务主体。
答案 1 :(得分:1)
您是正确的,主体只能在已经拥有权限时才能授予自己权限。因此,全新的 MSI 主体不会成为任何组的成员或分配任何 RBAC 角色,因此无法授予自己额外的权利。
在 Azure 订阅的情况下,创建订阅的主体要么有权在现有租户中这样做,要么正在创建新租户和订阅,并且系统将权限授予作为创建者的用户/所有者。
自动向新 MSI 授予权限的一种可能方法是使用 Azure 函数,调用 Microsoft Graph 来查询与搜索条件匹配的新 MSI,然后向 MSI 主体授予所需的权限。必须为该功能分配一个 MSI,该 MSI 需要在所需范围内授予新 MSI 所需权限的权限。