治理不支持预配的应用程序的用户 - Microsoft PowerShell

三种常见情况下,在将应用程序与 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 治理或 Microsoft Entra 套件许可证。 如需查找符合要求的许可证,请参阅《Microsoft Entra ID 治理许可基础知识》。

术语

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

说明 Microsoft Graph 术语的图。

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

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

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

开始之前

  • 租户必须具有以下许可证之一:

    • Microsoft Entra ID P2 或 Microsoft Entra ID 治理
    • 企业移动性 + 安全性 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 -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. 选择与 Microsoft Entra ID 用户属性匹配的 users.csv 文件的列。

    如果使用 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 所需的属性填充这些新用户,以便稍后将其与应用程序中的现有用户以及 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。

为票证配置权利管理与 ServiceNow 的集成(可选)

如果有 ServiceNow,则可以选择通过采用逻辑应用的权利管理集成来配置 ServiceNow 票证自动创建。 在这种情况下,权利管理可以自动创建 ServiceNow 票证,用于手动预配已收到访问包分配的用户。

后续步骤