Поделиться через


Управление пользователями приложения, которое не поддерживает подготовку — Microsoft PowerShell

Существует три распространенных сценария, в которых необходимо заполнить идентификатор Microsoft Entra существующими пользователями приложения перед использованием приложения с Управление идентификацией Microsoft Entra функциями, такими как проверки доступа.

  • Приложение перенесено на идентификатор Microsoft Entra после использования собственного поставщика удостоверений
  • Приложение, которое не использует идентификатор Microsoft Entra в качестве единственного поставщика удостоверений
  • Приложение не использует идентификатор Microsoft Entra в качестве поставщика удостоверений и не поддерживает подготовку

Дополнительные сведения об этих первых двух сценариях, где приложение поддерживает подготовку или использует каталог LDAP, базу данных SQL, имеет SOAP или REST API или использует идентификатор Microsoft Entra в качестве поставщика удостоверений, см. в статье , которая управляет существующими пользователями приложения. В этой статье описывается использование функций управления удостоверениями для существующих пользователей этих категорий приложений.

В этой статье рассматривается третий сценарий. Для некоторых устаревших приложений может быть невозможно удалить других поставщиков удостоверений или локальную проверку подлинности учетных данных из приложения или включить поддержку протоколов подготовки для этих приложений. Для этих приложений, если вы хотите использовать идентификатор Microsoft Entra для проверки того, кто имеет доступ к приложению, или удалить доступ кого-то из этого приложения, вам потребуется создать назначения в идентификаторе Microsoft Entra, представляющего пользователей приложения. В этой статье рассматривается сценарий приложения, которое не использует идентификатор Microsoft Entra в качестве поставщика удостоверений и не поддерживает подготовку.

Требования к лицензиям

Для использования этой функции требуются лицензии Управление идентификацией Microsoft Entra или Microsoft Entra Suite. Чтобы найти подходящую лицензию для ваших требований, см. Управление идентификацией Microsoft Entra основы лицензирования.

Терминология

В этой статье показано, как управлять назначениями ролей для приложения с помощью командлетов Microsoft Graph PowerShell. Здесь используется указанная ниже терминология Microsoft Graph.

Диаграмма, на которой показана терминология Microsoft Graph.

В идентификаторе Microsoft Entra субъект-служба (ServicePrincipal) представляет приложение в каталоге конкретной организации. В ServicePrincipal есть свойство AppRoles со списком ролей, поддерживаемых приложением, таких как Marketing specialist. AppRoleAssignment сопоставляет пользователя с субъектом-службой и указывает роль, которую пользователь имеет в этом приложении.

Вы также можете использовать пакеты управления правами Microsoft Entra, чтобы предоставить пользователям ограниченный доступ к приложению. В управлении правами AccessPackage содержит одну или несколько ролей ресурсов, потенциально из нескольких субъектов-служб. AccessPackage также имеет назначения (Assignment) для пользователей в пакет для доступа.

При создании назначения для пользователя в пакет доступа управление правами Microsoft Entra автоматически создает необходимые AppRoleAssignment экземпляры для каждого приложения. Дополнительные сведения см . в руководстве по управлению доступом к ресурсам в руководстве по управлению правами Microsoft Entra по созданию пакетов доступа с помощью PowerShell.

Подготовка к работе

  • Вам потребуется наличие одной из следующих лицензий в арендаторе:

    • Идентификатор Microsoft Entra P2 или Управление идентификацией Microsoft Entra
    • Лицензия Enterprise Mobility + Security E5.
  • Вам потребуется соответствующая административная роль. Если вы впервые выполняете эти действия, вам потребуется роль глобального администратора для авторизации использования Microsoft Graph PowerShell в арендаторе.

  • Приложению требуется субъект-служба в клиенте. Если субъект-служба еще не существует, можно зарегистрировать приложение для представления его в идентификаторе Microsoft Entra.

Сбор существующих пользователей из приложения

Первым шагом к обеспечению записи всех пользователей в идентификаторе Microsoft Entra id является сбор списка существующих пользователей, имеющих доступ к приложению.

Некоторые приложения имеют встроенную команду для экспорта актуального списка пользователей из хранилища данных. Иногда приложение использует внешний каталог или базу данных.

В некоторых средах приложение может находиться в сетевом сегменте или системе, которая не подходит для управления доступом к идентификатору Microsoft Entra. Поэтому может потребоваться извлечь список пользователей из этого приложения, каталога или базы данных, а затем передать его в виде файла в другую систему, которая может использоваться для взаимодействия Microsoft Entra.

Если у приложения есть каталог LDAP или база данных SQL, см. статью "Сбор существующих пользователей из приложения " для получения рекомендаций по извлечению коллекции пользователей.

В противном случае, если у приложения нет каталога или базы данных, необходимо обратиться к владельцу приложения и предоставить им список пользователей. Это может быть форматом, например CSV-файлом, с одной строкой на пользователя. Убедитесь, что одно поле каждого пользователя в файле содержит уникальный идентификатор, например адрес электронной почты, который также присутствует для пользователей в идентификаторе Microsoft Entra ID.

Если у этой системы нет установленных командлетов Microsoft Graph PowerShell или нет подключения к идентификатору Microsoft Entra, перенесите CSV-файл, содержащий список пользователей, в систему с установленными командлетами Microsoft Graph PowerShell.

Убедитесь, что идентификатор Microsoft Entra имеет пользователей, соответствующих пользователям из приложения

Теперь, когда у вас есть список всех пользователей, полученных из приложения, вы будете соответствовать этим пользователям из хранилища данных приложения с пользователями в идентификаторе Microsoft Entra.

Получение идентификаторов пользователей в идентификаторе Microsoft Entra

В этом разделе показано, как взаимодействовать с идентификатором Microsoft Entra с помощью командлетов Microsoft Graph PowerShell .

Когда ваша организация впервые применит эти командлеты для данного сценария, вам потребуется роль глобального администратора, чтобы предоставить согласие на использование 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:

    $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 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.

    Если вы используете службы SAP Cloud Identity Services, то сопоставление по умолчанию — это атрибут userName SAP SCIM с атрибутом userPrincipalNameидентификатора Microsoft Entra ID:

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

    В другом примере, если вы используете базу данных или каталог, у вас могут быть пользователи в базе данных, где значение в столбце с именем EMail совпадает со значением атрибута userPrincipalNameMicrosoft Entra:

    $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, чтобы найти пользователя с атрибутом с соответствующим значением для каждой записи в исходном файле. Если в файле есть много пользователей, полученных из исходной облачной службы идентификации SAP, базы данных или каталога, этот сценарий может занять несколько минут. Если у вас нет атрибута в идентификаторе Microsoft Entra, который имеет значение, и необходимо использовать 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. Просмотрите результаты предыдущих запросов. Узнайте, не удалось ли находиться в идентификаторе Microsoft Entra в любом из пользователей в облачных службах удостоверений SAP, базе данных или каталоге из-за ошибок или отсутствующих совпадений.

    Следующий скрипт 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. Если не все записи для пользователей из хранилища данных приложения могут находиться как пользователи в идентификаторе Microsoft Entra, вам потребуется исследовать, какие записи не совпадают и почему.

    Например, адрес электронной почты пользователя и userPrincipalName могут быть изменены в идентификаторе Microsoft Entra без mail соответствующего свойства, обновляемого в источнике данных приложения. Также есть вариант, что пользователь уже покинул организацию, но сведения о нем сохранились в источнике данных приложения. Или может быть учетная запись поставщика или суперадминистратор в источнике данных приложения, который не соответствует любому конкретному лицу в идентификаторе Microsoft Entra.

  10. Если пользователи не могли находиться в идентификаторе Microsoft Entra ID или не были активными и не смогли войти, но вы хотите проверить доступ или обновить их атрибуты в SAP Cloud Identity Services, базе данных или каталоге, вам потребуется обновить приложение, соответствующее правило или обновить или создать пользователей Microsoft Entra для них. Дополнительные сведения об изменениях см. в статье об управлении сопоставлениями и учетными записями пользователей в приложениях, которые не совпадают с пользователями в идентификаторе Microsoft Entra.

    Если выбрать вариант создания пользователей в идентификаторе Microsoft Entra, вы можете создать пользователей в массовом режиме с помощью одного из следующих вариантов:

    Убедитесь, что эти новые пользователи заполняются атрибутами, необходимыми для идентификатора Microsoft Entra, чтобы позже сопоставить их с существующими пользователями в приложении, а также атрибуты, необходимые идентификатору Microsoft Entra, включая userPrincipalNamemailNickname и displayName. Он 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"
    

    Затем этот скрипт можно использовать для создания пользователей Microsoft Entra для пользователей в sap Cloud Identity Services, в базе данных или каталоге, который не совпадает с пользователями в идентификаторе 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 запустите сценарий из шага 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, перейдите к следующему шагу.

Учетная запись, используемая вами, должна иметь разрешение на управление приложениями в идентификаторе Microsoft Entra. Любые из следующих ролей 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, чтобы его назначения можно было проверить. Например, если роль имеет имя 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. Однако они могут не все в настоящее время назначаться ролям приложения в идентификаторе Microsoft Entra. На следующем этапе нужно выяснить, какие пользователи не имеют назначений нужных ролей приложения.

  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.

    Это создается на основе переменной, заданной $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."
    

    Если число пользователей, не назначенных ролям приложения, равно 0, значит, всем пользователям назначены роли приложения и перед выполнением проверки доступа не требуются дополнительные изменения.

    Но если одному или нескольким пользователям сейчас не назначены роли приложения, продолжайте выполнение процедуры и добавьте таких пользователей в одну из ролей приложения.

  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

Чтобы идентификатор Microsoft Entra соответствовал пользователям в приложении с пользователями в идентификаторе Microsoft Entra, необходимо создать назначения ролей приложения в идентификаторе Microsoft Entra.

Когда назначение роли приложения создается в идентификаторе Microsoft Entra для пользователя в приложении, а приложение не поддерживает подготовку, а затем

  • Пользователь будет оставаться в приложении на неопределенный срок, если они не обновляются за пределами идентификатора Microsoft Entra, или до тех пор, пока назначение в идентификаторе Microsoft Entra не будет удалено.
  • при следующей проверке назначений ролей для этого приложения этот пользователь будет включен в проверку;
  • если пользователю отказано в проверке доступа, назначение роли приложения будет удалено.
  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.

  3. Запрос идентификатора Microsoft Entra, чтобы получить обновленный список назначений ролей:

    $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 не обязательно имеют владельца, параметр выбора владельца приложения в качестве рецензента невозможен. Вместо этого при создании проверки можно указать имена владельцев приложений, которые будут рецензентами.

Кроме того, при создании проверки группы или приложения можно выбрать многоэтапную проверку. Например, можно выбрать, чтобы менеджер каждого назначенного пользователя выполнял первый этап проверки, а владелец ресурса — второй этап. Таким образом, владелец ресурса может сосредоточиться на пользователях, которые уже были одобрены их менеджером.

Перед созданием проверок убедитесь, что в клиенте достаточно мест SKU идентификатора Microsoft Entra ID P2 или Управление идентификацией Microsoft Entra номера SKU. Кроме того, убедитесь, что все рецензенты являются активными пользователями, имеющими адреса электронной почты. При запуске проверок доступа каждый из них проверяет электронную почту из идентификатора Microsoft Entra. Если у рецензента нет почтового ящика, он не получит сообщение электронной почты или напоминание при запуске проверки. И если они заблокированы для входа в идентификатор Microsoft Entra ID, они не смогут выполнить проверку.

Создание проверки назначений ролей приложения

После того как пользователи находятся в ролях приложения, и вы определили рецензентов, вы можете настроить идентификатор Microsoft Entra для запуска проверки.

Следуйте инструкциям в руководстве по созданию проверки доступа для групп и приложений, чтобы создать проверку назначений ролей приложения. Настройте проверку, чтобы применить результаты после завершения.

Получение назначений, обновляемых после завершения проверки

  1. После завершения проверки можно получить обновленный список пользователей с назначениями ролей приложения.

    $res = (Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  2. Столбцы PrincipalDisplayName и PrincipalId содержат отображаемые имена и идентификаторы пользователей Microsoft Entra каждого пользователя, сохраняющего назначение роли приложения.

Настройка интеграции управления правами с ServiceNow для запроса (необязательно)

Если у вас есть ServiceNow, вы можете настроить автоматическое создание билета ServiceNow с помощью интеграции управления правами с помощью Logic Apps. В этом сценарии управление правами может автоматически создавать билеты ServiceNow для подготовки пользователей, которые получили назначения пакетов доступа.

Следующие шаги