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

如何限制DevOps流水线服务主体仅能分配Microsoft Graph User.Read.All权限

限制服务主体仅能分配Microsoft Graph User.Read.All权限的解决方案

核心方案:自定义Azure AD角色(最小权限原则)

通过创建带条件的自定义Azure AD角色,让流水线服务主体仅拥有分配特定权限的能力,避免赋予全局管理员等高权限角色。

步骤1:获取权限与资源ID

首先需要获取Microsoft Graph服务主体ID和User.Read.All应用权限的ID,用于后续角色定义的条件限制:

# 安装并导入Microsoft Graph PowerShell模块(若未安装)
Install-Module Microsoft.Graph -Force
Import-Module Microsoft.Graph.Identity.DirectoryManagement

# 获取Microsoft Graph服务主体
$graphSP = Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'"
# 获取User.Read.All应用权限的ID
$userReadAllPerm = $graphSP.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }
$permId = $userReadAllPerm.Id
$graphResourceId = $graphSP.Id

步骤2:创建带条件的自定义角色

定义一个仅允许分配Microsoft Graph User.Read.All权限的角色,通过条件语句限制操作范围:

$roleDefinition = @{
    DisplayName = "Restricted User.Read.All Assigner"
    Description = "仅允许为服务主体分配Microsoft Graph的User.Read.All应用权限"
    RolePermissions = @(
        @{
            AllowedResourceActions = @(
                "microsoft.directory/servicePrincipals/oAuth2PermissionGrants/write"
            )
            Condition = "(@Resource.id eq '$graphResourceId') and (@PermissionGrant.scopes has 'User.Read.All')"
        }
    )
    IsEnabled = $true
}
New-MgRoleManagementDirectoryRoleDefinition -BodyParameter $roleDefinition

这里的条件语句确保:

  • 仅针对Microsoft Graph服务主体(@Resource.id eq '$graphResourceId')
  • 仅允许分配User.Read.All权限(@PermissionGrant.scopes has 'User.Read.All')

步骤3:将角色分配给流水线服务主体

把创建好的自定义角色分配给流水线使用的服务主体:

# 获取自定义角色
$customRole = Get-MgRoleManagementDirectoryRoleDefinition -Filter "displayName eq 'Restricted User.Read.All Assigner'"
# 获取流水线服务主体
$pipelineSP = Get-MgServicePrincipal -Filter "displayName eq '你的流水线服务主体名称'"
# 分配角色
New-MgRoleManagementDirectoryRoleAssignment -DirectoryScopeId "/" -RoleDefinitionId $customRole.Id -PrincipalId $pipelineSP.Id

验证与注意事项

  • 权限验证:使用该服务主体尝试分配其他权限(如Mail.Read)会被拒绝,仅User.Read.All分配操作成功。
  • 权限ID稳定性:User.Read.All的权限ID极少变更,但如果发生变动,需更新自定义角色的条件语句。
  • 最小权限原则:确保自定义角色仅包含必要的OAuth2PermissionGrants/write动作,避免多余权限。

为什么不使用Azure Policy?

Azure Policy主要用于Azure资源的合规治理,对Azure AD内部的权限分配操作支持有限,无法精准限制特定权限的分配动作,因此自定义Azure AD角色是更适配的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:53:16