次の方法で共有

管理不支持自动预配的应用程序的用户 - Microsoft PowerShell

在四种常见场景下,在将应用程序与 Microsoft Entra ID 治理功能(例如 访问评审)一起使用之前,有必要先用应用程序的现有用户及其访问权限填充 Microsoft Entra ID。

  • 应用程序在使用自己的身份提供程序后,已迁移到 Microsoft Entra ID
  • 不使用 Microsoft Entra ID 作为唯一标识提供者的应用程序
  • 应用程序不使用 Microsoft Entra ID 作为其标识提供者,也不支持预配
  • 应用程序使用 Microsoft Entra ID 作为其标识提供者,并为用户提供其他访问权限

有关前两种情况(应用程序支持预配,或使用 LDAP 目录、SQL 数据库,拥有 SOAP 或 REST API,或依赖 Microsoft Entra ID 作为其标识提供者)的详细信息,请参阅治理应用程序的现有用户一文。 该文介绍了如何为那些类别的应用程序的现有用户使用标识治理功能。

本文介绍第三种情况。 对于某些旧应用程序,从应用程序中删除其他标识提供者或本地凭据身份验证或启用对这些应用程序的预配协议的支持可能不可行。 对于这些应用程序,如果要使用 Microsoft Entra ID 评审谁有权访问该应用程序,或者从该应用程序中移除某人的访问权限,则需要在 Microsoft Entra ID 中创建表示应用程序用户的分配。 本文介绍了应用程序在不使用 Microsoft Entra ID 作为其标识提供者且不支持预配时的场景。

有关第四种方案的详细信息,请参阅目录用户访问评审(预览版)中包含的自定义数据资源

许可要求

使用此功能需要Microsoft Entra ID Governance 或 Microsoft Entra Suite 许可证。 若要查找符合要求的正确许可证,请参阅 Microsoft Entra ID Governance 许可基础知识

术语

本文演示了使用 Microsoft Graph PowerShell cmdlet 管理应用程序角色分配的过程。 它使用以下 Microsoft Graph 术语。

说明 Microsoft Graph 术语的图。

在 Microsoft Entra ID 中,服务主体 (ServicePrincipal) 表示特定组织目录中的应用程序。 ServicePrincipal 具有名为 AppRoles 的属性,该属性会列出应用程序支持的角色,例如 Marketing specialistAppRoleAssignment 将用户链接到服务主体,并指定用户在该应用程序中具有的角色。

还可以使用 Microsoft Entra 权利管理访问包为用户提供对应用程序的有限访问权限。 在权利管理中,AccessPackage 包含一个或多个资源角色(可能来自多个服务主体)。 AccessPackage 还为用户提供访问权限包的分配 (Assignment)。

为用户创建访问包分配时,Microsoft Entra 权利管理会自动为用户在每个应用程序中创建所需的 AppRoleAssignment 实例。 有关详细信息,请参阅 Microsoft Entra ID 权利管理中的资源访问管理 教程,了解如何通过 PowerShell 创建访问包。

在您开始之前

  • 您的租户必须具有下列许可证之一:

    • Microsoft Entra ID P2 或 Microsoft Entra ID Governance
    • 企业移动性 + 安全性 E5 许可证
  • 需要具备适当的管理权限。 如果这是你第一次执行这些步骤,则需要全局管理员角色来授权在租户中使用 Microsoft Graph PowerShell。

  • 应用程序需要租户中的服务主体。 如果服务主体尚不存在,则可以注册一个应用程序以在 Microsoft Entra ID 中表示它。

从应用程序收集现有用户

确保所有用户都记录在 Microsoft Entra ID 中的第一步是收集有权访问应用程序的现有用户的列表。

某些应用程序可能具有从其数据存储中导出当前用户列表的内置命令。 在其他情况下,应用程序可能依赖于外部目录或数据库。

在某些环境中,应用程序可能位于不适用于管理对 Microsoft Entra ID 的访问权限的网络段或系统上。 因此可能需要从该应用程序、目录或数据库提取用户列表,然后将其作为文件传输到可用于 Microsoft Entra 交互的另一个系统。

如果应用程序有 LDAP 目录或 SQL 数据库,请参阅从应用程序中收集现有用户,以获得有关如何提取用户集合的建议。

否则,如果应用程序没有目录或数据库,你需要联系应用程序的所有者,让其提供用户列表。 这可能为 CSV 文件之类的格式,每行代表一个用户。 确保文件中每个用户的一个字段包含唯一标识符(例如电子邮件地址),该标识符也存在于 Microsoft Entra ID 的用户中。

如果此系统未安装 Microsoft Graph PowerShell cmdlet,或未连接到 Microsoft Entra ID,则将包含用户列表的 CSV 文件传输到安装了 Microsoft Graph PowerShell cmdlet 的系统。

确认 Microsoft Entra ID 具有与应用程序用户匹配的用户

现在,你已获得从应用程序获取的所有用户的列表,会将应用程序数据存储中的这些用户与 Microsoft Entra ID 中的用户匹配。

检索 Microsoft Entra ID 中用户的 ID

本部分演示如何使用 Microsoft Graph PowerShell cmdlet 与 Microsoft Entra ID 进行交互。

当您的组织首次在此方案中使用这些 cmdlet 时,您需要具备全局管理员权限,以便在租户中允许使用 Microsoft Graph PowerShell。 后续交互可以使用较低特权角色,例如:

  • 用户管理员(如果预计会创建新用户)。
  • 在您仅负责管理应用程序角色分配的情况下,可以是应用程序管理员或 标识治理管理员
  1. 打开 PowerShell。

  2. 如果没有已安装 Microsoft Graph PowerShell 模块 ,请使用以下命令安装 Microsoft.Graph.Users 模块和其他模块:

    Install-Module Microsoft.Graph
    

    如果已安装模块,请确保使用的是最新版本:

    Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
    
  3. 连接到 Microsoft Entra ID:

    $msg = Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -ContextScope Process -Scopes "User.ReadWrite.All,Application.ReadWrite.All,AppRoleAssignment.ReadWrite.All,EntitlementManagement.ReadWrite.All"
    
  4. 如果这是你第一次使用此命令,则可能需要同意允许 Microsoft Graph 命令行工具具有这些权限。

  5. 将从应用程序数据存储中获取的用户列表读取到 PowerShell 会话中。 如果用户列表位于 CSV 文件中,则可以使用 PowerShell cmdlet Import-Csv,并将上一部分中的文件的名称作为参数提供。

    例如,如果将从 SAP 云标识服务获取的文件命名为 Users-exported-from-sap.csv 并位于当前目录中,则输入此命令。

    $filename = ".\Users-exported-from-sap.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    

    另举一例,如果使用了数据库或目录,并将该文件命名为 users.csv 且位于当前目录中,则输入以下命令:

    $filename = ".\users.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    
  6. 选择 users.csv 文件中与 Microsoft Entra ID 用户属性匹配的列。

    如果使用 SAP 云标识服务,则默认映射是 SAP SCIM 属性 userName 与 Microsoft Entra ID 属性 userPrincipalName

    $db_match_column_name = "userName"
    $azuread_match_attr_name = "userPrincipalName"
    

    另举一例,如果使用了数据库或目录,则在你拥有用户的数据库中,名为 EMail 的列中的值将与 Microsoft Entra 属性 userPrincipalName 中的值相同:

    $db_match_column_name = "EMail"
    $azuread_match_attr_name = "userPrincipalName"
    
  7. 检索 Microsoft Entra ID 中的这些用户的 ID。

    以下 PowerShell 脚本使用前面指定的 $dbusers$db_match_column_name$azuread_match_attr_name 值。 它将查询 Microsoft Entra ID,以定位具有与源文件中每条记录的某个属性值匹配的用户。 如果从源 SAP 云标识服务、数据库或目录获取的文件中存在许多用户,则可能需要几分钟时间才能完成此脚本。 如果在 Microsoft Entra ID 中没有具有该值的属性,并且需要使用 contains 或其他筛选表达式,则需要在下面的步骤 11 中自定义此脚本和该内容,以使用其他筛选表达式。

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    
  8. 查看以前查询的结果。 请查看 SAP 云标识服务、数据库或目录中是否存在任何用户由于错误或缺少匹配项而无法在 Microsoft Entra ID 中找到。

    以下 PowerShell 脚本将显示未找到的记录计数:

    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Error "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    
  9. 脚本完成以后,如果数据源中有任何记录在 Microsoft Entra ID 中无法找到,系统会提示错误。 ** 如果应用程序的数据存储中并非所有用户记录都能在 Microsoft Entra ID 中找到,那么您需要调查哪些记录没有匹配及其原因。

    例如,某人在 Microsoft Entra ID 中的电子邮件地址和 userPrincipalName 可能已更改,但在应用程序的数据源中未更新其相应的 mail 属性。 或者,用户可能已经离开了组织,但仍处于应用程序的数据源中。 或者,应用程序数据源中可能有一个供应商或超级管理员帐户,该帐户与 Microsoft Entra ID 中的任何特定人员都不对应。

  10. 如果存在无法在 Microsoft Entra ID 中找到的用户,或有用户未处于活动状态并且能够登录,但你想要审查其权限或在 SAP 云标识服务、数据库或目录中更新其属性,则需要更新应用程序、匹配规则,或为其更新或创建 Microsoft Entra 用户。

    如果选择用于在 Microsoft Entra ID 中创建用户的选项,则可以使用以下任一方法批量创建用户:

    确保使用 Microsoft Entra ID 所需的属性填充这些新用户,以便稍后将其与应用程序中的现有用户以及 Microsoft Entra ID 所需的属性(包括 userPrincipalNamemailNicknamedisplayName)匹配。 userPrincipalName 对于目录中的所有用户必须是唯一的。

    例如,数据库中可能有用户,其中,EMail 列中的值是要用作 Microsoft Entra 用户主体名称的值,Alias 列中的值包含 Microsoft Entra ID 邮件别名,Full name 列中的值包含用户的显示名称:

    $db_display_name_column_name = "Full name"
    $db_user_principal_name_column_name = "Email"
    $db_mail_nickname_column_name = "Alias"
    

    然后,可以使用此脚本为 SAP 云标识服务、数据库或目录中与 Microsoft Entra ID 用户不匹配的用户创建 Microsoft Entra 用户。 请注意,可能需要修改此脚本以添加组织中所需的其他 Microsoft Entra 属性,或者如果 $azuread_match_attr_name 既不是 mailNickname 也不是 userPrincipalName,则提供该 Microsoft Entra 属性。

    $dbu_missing_columns_list = @()
    $dbu_creation_failed_list = @()
    foreach ($dbu in $dbu_not_matched_list) {
       if (($null -ne $dbu.$db_display_name_column_name -and $dbu.$db_display_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_user_principal_name_column_name -and $dbu.$db_user_principal_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_mail_nickname_column_name -and $dbu.$db_mail_nickname_column_name.Length -gt 0)) {
          $params = @{
             accountEnabled = $false
             displayName = $dbu.$db_display_name_column_name
             mailNickname = $dbu.$db_mail_nickname_column_name
             userPrincipalName = $dbu.$db_user_principal_name_column_name
             passwordProfile = @{
               Password = -join (((48..90) + (96..122)) * 16 | Get-Random -Count 16 | % {[char]$_})
             }
          }
          try {
            New-MgUser -BodyParameter $params
          } catch { $dbu_creation_failed_list += $dbu; throw }
       } else {
          $dbu_missing_columns_list += $dbu
       }
    }
    
  11. 将任何缺失的用户添加到 Microsoft Entra ID 后,再次运行步骤 7 中的脚本。 然后运行步骤 8 中的脚本。 检查是否未报告任何错误。

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Warning "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count -ne 0) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    

注册应用程序

如果应用程序已在 Microsoft Entra ID 中注册,则继续执行下一步。

你使用的帐户必须有权管理 Microsoft Entra ID 中的应用程序。 以下任何Microsoft Entra 角色都包含所需的权限:

  1. 创建应用程序和服务主体。

    例如,如果企业应用程序命名为 CORPDB1,请输入以下命令:

    $azuread_app_name = "CORPDB1"
    $azuread_app = New-MgApplication -DisplayName $azuread_app_name
    $azuread_sp = New-MgServicePrincipal -DisplayName $azuread_app_name -AppId $azuread_app.AppId
    
  2. 向应用程序添加角色,并将应用程序标记为已与 Microsoft Entra ID 集成,以便可以查看其分配。 例如,如果角色名称为 General,请在以下 PowerShell 命令中提供该值:

    $ar0 = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphAppRole
    $ar0.AllowedMemberTypes += "User"
    $ar0.Description = "General role"
    $ar0.DisplayName = "General"
    $ar0.id = New-Guid
    $ar0.IsEnabled = $true
    $ar0.Value = "General"
    $ara = @()
    $ara += $ar0
    
    $azuread_app_tags = @()
    $azuread_app_tags += "WindowsAzureActiveDirectoryIntegratedApp"
    
    $azuread_app_update = Update-MgApplication -ApplicationId $azuread_app.Id -AppRoles $ara -Tags $azuread_app_tags
    

检查尚未被分配到应用程序的用户

前面的步骤已确认应用程序数据存储中的所有用户都作为 Microsoft Entra ID 中的用户存在。 但是,它们当前可能并未都分配给 Microsoft Entra ID 中的应用程序角色。 因此,后续步骤是查看哪些用户没有分配应用程序角色。

  1. 查找应用程序的服务主体 ID。

    例如,如果企业应用程序命名为 CORPDB1,请输入以下命令:

    $azuread_app_name = "CORPDB1"
    $azuread_sp_filter = "displayName eq '" + ($azuread_app_name -replace "'","''") + "'"
    $azuread_sp = Get-MgServicePrincipal -Filter $azuread_sp_filter -All
    
  2. 检索当前已分配到 Microsoft Entra ID 中应用程序的用户。

    这建立在上一命令中设置的 $azuread_sp 变量的基础上。

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  3. 将上一部分的用户 ID 列表与当前分配给应用程序的用户进行比较:

    $azuread_not_in_role_list = @()
    foreach ($id in $azuread_match_id_list) {
       $found = $false
       foreach ($existing in $azuread_existing_assignments) {
          if ($existing.principalId -eq $id) {
             $found = $true; break;
          }
       }
       if ($found -eq $false) { $azuread_not_in_role_list += $id }
    }
    $azuread_not_in_role_count = $azuread_not_in_role_list.Count
    Write-Output "$azuread_not_in_role_count users in the application's data store are not assigned to the application roles."
    

    如果没有用户被未分配到应用程序角色,这表明所有用户都已被分配到应用程序角色,则在执行访问评审之前无需进行任何进一步更改。

    但是,如果当前未将一个或多个用户分配到应用程序角色,则需要继续执行该过程,将它们添加到应用程序角色之一。

  4. 将剩余用户分配到某一应用程序角色。

    一个应用程序可以有多个角色。 使用此命令列出可用角色:

    $azuread_sp.AppRoles | where-object {$_.AllowedMemberTypes -contains "User"} | ft DisplayName,Id
    

    从列表中选择相应的角色,并获取其角色 ID。 例如,如果角色名称为 General,请在以下 PowerShell 命令中提供该值:

    $azuread_app_role_name = "General"
    $azuread_app_role_id = ($azuread_sp.AppRoles | where-object {$_.AllowedMemberTypes -contains "User" -and $_.DisplayName -eq $azuread_app_role_name}).Id
    if ($null -eq $azuread_app_role_id) { write-error "role $azuread_app_role_name not located in application manifest"}
    

在 Microsoft Entra ID 中创建应用角色分配

若要 Microsoft Entra ID 将应用程序中的用户与 Microsoft Entra ID 中的用户匹配,需要在 Microsoft Entra ID 中创建应用程序角色分配。

如果在 Microsoft Entra ID 中为用户创建与应用程序相关的角色分配,而该应用程序不支持预配,则

  • 除非用户在 Microsoft Entra ID 外部进行了更新,或者 Microsoft Entra ID 中的分配被移除,否则用户将无限期保留在该应用程序中。
  • 在下一次评审该应用程序的角色分配时,用户将参加评审。
  • 如果用户在访问评审中被拒绝,将移除其应用程序角色分配。
  1. 为当前没有角色分配的用户创建应用程序角色分配:

    foreach ($u in $azuread_not_in_role_list) {
       $res = New-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -AppRoleId $azuread_app_role_id -PrincipalId $u -ResourceId $azuread_sp.Id 
    }
    
  2. 请等待一分钟,以便更改可以在 Microsoft Entra ID 中传播。

  3. 查询 Microsoft Entra ID 以获取更新的角色分配列表:

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  4. 将上一部分的用户 ID 列表与当前分配给应用程序的用户进行比较:

    $azuread_still_not_in_role_list = @()
    foreach ($id in $azuread_match_id_list) {
       $found = $false
       foreach ($existing in $azuread_existing_assignments) {
          if ($existing.principalId -eq $id) {
             $found = $true; break;
          }
       }
       if ($found -eq $false) { $azuread_still_not_in_role_list += $id }
    }
    $azuread_still_not_in_role_count = $azuread_still_not_in_role_list.Count
    if ($azuread_still_not_in_role_count -gt 0) {
       Write-Output "$azuread_still_not_in_role_count users in the application's data store are not assigned to the application roles."
    }
    

    如果未将任何用户分配到应用程序角色,请检查 Microsoft Entra 审核日志中是否存在上一步中发生的错误。

选择适当的审阅者

创建每个访问评审时,管理员可以选择一个或多个审阅者。 审阅者都可以通过选择继续访问资源的用户或将其删除来执行评审。

通常,资源所有者负责执行评审。 如果要创建组评审,作为评审模式 B 中集成的应用程序的访问权限的一部分,则可以选择组所有者作为审阅者。 因为 Microsoft Entra ID 中的应用程序不一定具有所有者,因此无法选择应用程序所有者作为审阅者。 相反,在创建评审时,可以提供应用程序所有者的名称作为审阅者。

还可以选择在创建组或应用程序的评审时进行 多阶段评审。 例如,可以选择让每个分配的用户的经理执行评审的第一个阶段,让资源所有者执行第二阶段。 这样,资源所有者就可以专注于已获得其经理批准的用户。

在创建评审之前,请检查租户中是否有足够的 Microsoft Entra ID P2 或 Microsoft Entra ID Governance SKU 席位。 此外,请检查所有审阅者是否都是具有电子邮件地址的活动用户。 访问评审开始后,他们都会查看来自 Microsoft Entra ID 的电子邮件。 如果审阅者没有邮箱,则在评审开始时,他们不会收到电子邮件或电子邮件提醒。 而且,如果阻止他们登录 Microsoft Entra ID,则他们将无法执行评审。

创建对应用程序角色分配的评审

一旦用户成为应用程序角色,并且你确定了审阅者,你就可以配置 Microsoft Entra ID 以开始评审

按照创建组或应用程序访问评审的指南中的说明,完成应用程序角色分配的评审。 将评审配置为在评审完成后应用结果。

检索在评审完成后更新了的任务

  1. 评审完成后,可以检索具有应用程序角色分配的已更新用户列表。

    $res = (Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  2. PrincipalDisplayNamePrincipalId 列包含每个保留应用程序角色分配的用户的显示名称和 Microsoft Entra 用户 ID。

后续步骤