共用方式為


控管不支援佈建的應用程式使用者 - 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 權利管理會自動為使用者到每個應用程式建立必要的 AppRoleAssignment 執行個體。 如需詳細資訊,請參閱在 Microsoft Entra 權利管理中管理對資源的存取教學課程,以了解如何透過 PowerShell 建立存取套件。

開始之前

  • 您必須在租用戶中具備下列其中一個授權:

    • Microsoft Entra ID P2 或 Microsoft Entra ID Governance
    • Enterprise Mobility + Security 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 中的使用者識別碼

本節說明如何使用 Microsoft Graph PowerShell Cmdlet 與 Microsoft Entra ID 互動。

組織在此情況下第一次使用這些 Cmdlet 時,您必須是全域管理員角色,才能在租用戶中使用 Microsoft Graph PowerShell。 後續的互動可以使用特殊權限較低的角色,例如:

  • 使用者管理員 (如果您預期會建立新的使用者)。
  • 應用程式管理員或 Identity Governance 管理員 (如果您只是管理應用程式角色指派)。
  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. 選擇 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 中這些使用者的識別碼。

    下列 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 要求的屬性,包括 userPrincipalNamemailNicknamedisplayNameuserPrincipalName 在目錄中的所有使用者中必須是唯一的。

    例如,您可能有資料庫中的使用者,其中名為 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. 查詢 [應用程式識別碼] 的 [服務主體識別碼]。

    例如,如果企業應用程式名為 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. 比較上一節的使用者識別碼清單與目前指派給應用程式的使用者:

    $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
    

    從清單中選取適當的角色,並取得其角色識別碼。 例如,如果角色名稱為 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使用者到應用程式的專案標識符時,且應用程式不支援佈建,然後

  • 使用者會無限期留在應用程式中,除非在 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. 比較上一節的使用者識別碼清單與目前指派給應用程式的使用者:

    $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 控管 SKU 基座。 此外,檢查所有檢閱者是否為具有電子郵件地址的作用中使用者。 存取檢閱開始時,他們都會檢閱來自 Microsoft Entra ID 的電子郵件。 如果檢閱者沒有信箱,當檢閱開始時或以電子郵件寄送提醒時,他們將不會收到電子郵件。 而且,如果他們遭封鎖而無法登入 Microsoft Entra ID,他們將無法執行檢閱。

建立應用程式角色指派的檢閱

一旦在應用程式角色找到使用者 中,且您已識別檢閱者,您就可以將 Microsoft Entra ID 設定為開始檢閱

遵循指南中建立群組或應用程式的存取權檢閱的指示,以建立應用程式角色指派的檢閱。 設定檢閱以在完成時套用結果。

擷取檢閱完成時檢視更新的指派

  1. 檢閱完成時,您可以擷取具有應用程式角色指派的使用者更新清單。

    $res = (Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  2. 資料行 PrincipalDisplayNamePrincipalId 包含每個保留應用程式角色指派之使用者的顯示名稱和 Microsoft Entra 使用者識別碼。

設定權利管理與 ServiceNow 進行票證整合 (選擇性)

如果您有 ServiceNow,您可以選擇性地設定自動化 ServiceNow 票證建立,使用透過 Logic Apps 權利管理整合。 在該案例中,權利管理可以自動建立 ServiceNow 票證,以手動佈建已接收存取套件指派的使用者。

下一步