Governar os usuários de um aplicativo que não oferece suporte ao provisionamento - Microsoft PowerShell

Há três cenários comuns em que é necessário preencher o Microsoft Entra ID com usuários existentes de um aplicativo antes de usar o aplicativo com um recurso de Governança de ID do Microsoft Entra, como revisões de acesso.

  • Aplicativo migrado para o Microsoft Entra ID após usar seu próprio provedor de identidade
  • Aplicativo que não usa o Microsoft Entra ID como seu único provedor de identidade
  • O aplicativo não usa o Microsoft Entra ID como seu provedor de identidade nem oferece suporte ao provisionamento

Para obter mais informações sobre esses dois primeiros cenários, em que o aplicativo oferece suporte ao provisionamento ou usa um diretório LDAP, banco de dados SQL, tem uma API SOAP ou REST ou depende do Microsoft Entra ID como seu provedor de identidade, consulte o artigo Governar os usuários existentes de um aplicativo. Esse artigo aborda como usar recursos de governança de identidade para usuários existentes dessas categorias de aplicativos.

Este artigo aborda o terceiro cenário. Para alguns aplicativos herdados, pode não ser viável remover outros provedores de identidade ou autenticação de credenciais locais do aplicativo ou habilitar o suporte para protocolos de provisionamento para esses aplicativos. Para esses aplicativos, se você quiser usar o Microsoft Entra ID para revisar quem tem acesso a esse aplicativo ou remover o acesso de alguém desse aplicativo, será necessário criar atribuições no Microsoft Entra ID que representem os usuários do aplicativo. Este artigo aborda esse cenário de um aplicativo que não usa o Microsoft Entra ID como seu provedor de identidade e não oferece suporte ao provisionamento.

Requisitos de licença

O uso desse recurso requer licenças do Microsoft Entra ID Governance. Para encontrar a licença certa para seus requisitos, consulte Fundamentos de licenciamento do Microsoft Entra ID Governance.

Terminologia

Este artigo ilustra o processo de gerenciamento de atribuições de função de aplicativo usando os cmdlets do Microsoft Graph PowerShell. Ele usa a seguinte terminologia do Microsoft Graph.

Diagrama que ilustra a terminologia do Microsoft Graph.

No Microsoft Entra ID, uma entidade de serviço (ServicePrincipal) representa um aplicativo no diretório de uma organização específica. ServicePrincipal tem uma propriedade chamada AppRoles que lista as funções suportadas por um aplicativo, como Marketing specialist. AppRoleAssignment Vincula um usuário a uma entidade de serviço e especifica qual função esse usuário tem nesse aplicativo.

Você também pode estar usando pacotes de acesso de gerenciamento de direitos do Microsoft Entra para dar aos usuários acesso limitado por tempo ao aplicativo. No gerenciamento de direitos, AccessPackage contém uma ou mais funções de recurso, potencialmente de várias entidades de serviço. AccessPackage também tem atribuições (Assignment) para usuários para o pacote de acesso.

Quando você cria uma atribuição para um usuário a um pacote de acesso, o gerenciamento de direitos do Microsoft Entra cria automaticamente as instâncias necessárias AppRoleAssignment para o usuário em cada aplicativo. Para obter mais informações, consulte o tutorial Gerenciar acesso a recursos no Microsoft Entra sobre como criar pacotes de acesso por meio do PowerShell.

Antes de começar

  • Tem de ter uma das seguintes licenças no seu inquilino:

    • Governança do Microsoft Entra ID P2 ou Microsoft Entra ID
    • Licença Enterprise Mobility + Security E5
  • Você precisa ter uma função administrativa adequada. Se esta for a primeira vez que você estiver executando essas etapas, precisará da função de Administrador Global para autorizar o uso do Microsoft Graph PowerShell em seu locatário.

  • Seu aplicativo precisa de uma entidade de serviço em seu locatário. Se uma entidade de serviço ainda não existir, você poderá registrar um aplicativo para representá-la no Microsoft Entra ID.

Coletar usuários existentes de um aplicativo

O primeiro passo para garantir que todos os usuários estejam registrados no Microsoft Entra ID é coletar a lista de usuários existentes que têm acesso ao aplicativo.

Alguns aplicativos podem ter um comando interno para exportar uma lista de usuários atuais do armazenamento de dados. Em outros casos, o aplicativo pode depender de um diretório externo ou banco de dados.

Em alguns ambientes, o aplicativo pode estar localizado em um segmento de rede ou sistema que não é apropriado para gerenciar o acesso ao Microsoft Entra ID. Portanto, talvez seja necessário extrair a lista de usuários desse aplicativo, diretório ou banco de dados e, em seguida, transferi-la como um arquivo para outro sistema que possa ser usado para interações do Microsoft Entra.

Se seu aplicativo tiver um diretório LDAP ou banco de dados SQL, consulte Coletar usuários existentes de um aplicativo para obter recomendações sobre como extrair a coleção de usuários.

Caso contrário, se o aplicativo não tiver um diretório ou banco de dados, você precisará entrar em contato com o proprietário do aplicativo e fazer com que ele forneça uma lista de usuários. Isso pode estar em um formato como um arquivo CSV, com uma linha por usuário. Certifique-se de que um campo de cada usuário no arquivo contenha um identificador exclusivo, como um endereço de email, que também esteja presente nos usuários no Microsoft Entra ID.

Se este sistema não tiver os cmdlets do Microsoft Graph PowerShell instalados ou não tiver conectividade com o Microsoft Entra ID, transfira o arquivo CSV que contém a lista de usuários para um sistema que tenha os cmdlets do Microsoft Graph PowerShell instalados.

Confirme se o Microsoft Entra ID tem usuários que correspondem aos usuários do aplicativo

Agora que você tem uma lista de todos os usuários obtidos do aplicativo, você fará a correspondência entre esses usuários do armazenamento de dados do aplicativo e os usuários no Microsoft Entra ID.

Recuperar as IDs dos usuários no Microsoft Entra ID

Esta seção mostra como interagir com o Microsoft Entra ID usando cmdlets do Microsoft Graph PowerShell .

Na primeira vez que sua organização usar esses cmdlets para esse cenário, você precisará estar em uma função de Administrador Global para permitir que o Microsoft Graph PowerShell seja usado em seu locatário. As interações subsequentes podem usar um papel menos privilegiado, como:

  • Administrador de usuários, se você prevê a criação de novos usuários.
  • Administrador de aplicativos ou administrador de governança de identidade, se você estiver apenas gerenciando atribuições de função de aplicativo.
  1. Abra o PowerShell.

  2. Se você não tiver os módulos do Microsoft Graph PowerShell já instalados, instale o Microsoft.Graph.Users módulo e outros usando este comando:

    Install-Module Microsoft.Graph
    

    Se já tiver os módulos instalados, certifique-se de que está a utilizar uma versão recente:

    Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
    
  3. Conecte-se ao Microsoft Entra ID:

    $msg = Connect-MgGraph -ContextScope Process -Scopes "User.ReadWrite.All,Application.ReadWrite.All,AppRoleAssignment.ReadWrite.All,EntitlementManagement.ReadWrite.All"
    
  4. Se esta for a primeira vez que você usa esse comando, talvez seja necessário consentir para permitir que as ferramentas de linha de comando do Microsoft Graph tenham essas permissões.

  5. Leia a lista de usuários obtida do armazenamento de dados do aplicativo na sessão do PowerShell. Se a lista de usuários estiver em um arquivo CSV, você poderá usar o cmdlet Import-Csv do PowerShell e fornecer o nome do arquivo da seção anterior como argumento.

    Por exemplo, se o arquivo obtido do SAP Cloud Identity Services tiver o nome Users-exported-from-sap.csv e estiver localizado no diretório atual, digite este comando.

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

    Para outro exemplo, se você estiver usando um banco de dados ou diretório, se o arquivo tiver o nome users.csv e estiver localizado no diretório atual, digite este comando:

    $filename = ".\users.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    
  6. Escolha a coluna do arquivo users.csv que corresponderá a um atributo de um usuário no Microsoft Entra ID.

    Se você estiver usando o SAP Cloud Identity Services, o mapeamento padrão é o atributo userName SAP SCIM com o atributo userPrincipalNameID do Microsoft Entra:

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

    Para outro exemplo, se você estiver usando um banco de dados ou diretório, você pode ter usuários em um banco de dados onde o valor na coluna nomeada EMail é o mesmo valor que no atributo userPrincipalNameMicrosoft Entra :

    $db_match_column_name = "EMail"
    $azuread_match_attr_name = "userPrincipalName"
    
  7. Recupere as IDs desses usuários no Microsoft Entra ID.

    O script PowerShell a seguir usa os $dbusersvalores , $db_match_column_namee $azuread_match_attr_name especificados anteriormente. Ele consultará o ID do Microsoft Entra para localizar um usuário que tenha um atributo com um valor correspondente para cada registro no arquivo de origem. Se houver muitos usuários no arquivo obtido do banco de dados ou diretório de origem do SAP Cloud Identity Services, esse script pode levar vários minutos para ser concluído. Se você não tiver um atributo no Microsoft Entra ID que tenha o valor e precisar usar uma contains ou outra expressão de filtro, será necessário personalizar esse script e isso na etapa 11 abaixo para usar uma expressão de filtro diferente.

    $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. Veja os resultados das consultas anteriores. Veja se algum dos usuários no SAP Cloud Identity Services, o banco de dados ou o diretório não pôde ser localizado no ID do Microsoft Entra devido a erros ou correspondências ausentes.

    O seguinte script do PowerShell exibirá as contagens de registros que não foram localizados:

    $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. Quando o script terminar, ele indicará um erro se algum registro da fonte de dados não estiver localizado no ID do Microsoft Entra. Se nem todos os registros de usuários do armazenamento de dados do aplicativo puderem ser localizados como usuários no Microsoft Entra ID, você precisará investigar quais registros não corresponderam e por quê.

    Por exemplo, o endereço de email de alguém e userPrincipalName podem ter sido alterados no ID do Microsoft Entra sem que sua propriedade correspondente mail tenha sido atualizada na fonte de dados do aplicativo. Ou, o usuário pode já ter saído da organização, mas ainda está na fonte de dados do aplicativo. Ou pode haver uma conta de fornecedor ou superadministrador na fonte de dados do aplicativo que não corresponda a nenhuma pessoa específica no Microsoft Entra ID.

  10. Se houver usuários que não puderam ser localizados no Microsoft Entra ID ou não estavam ativos e capazes de entrar, mas você deseja que seu acesso seja revisado ou seus atributos atualizados no SAP Cloud Identity Services, no banco de dados ou no diretório, será necessário atualizar o aplicativo, a regra de correspondência ou atualizar ou criar usuários do Microsoft Entra para eles. Para obter mais informações sobre qual alteração fazer, consulte Gerenciar mapeamentos e contas de usuário em aplicativos que não correspondem aos usuários no Microsoft Entra ID.

    Se você escolher a opção de criar usuários no Microsoft Entra ID, poderá criar usuários em massa usando:

    Certifique-se de que esses novos usuários sejam preenchidos com os atributos necessários para que a ID do Microsoft Entra os corresponda posteriormente aos usuários existentes no aplicativo e os atributos exigidos pela ID do Microsoft Entra, incluindo userPrincipalName, mailNickname e displayName. O userPrincipalName deve ser único entre todos os usuários no diretório.

    Por exemplo, você pode ter usuários em um banco de dados onde o valor na coluna nomeada EMail é o valor que você deseja usar como o Nome principal do usuário do Microsoft Entra, o valor na coluna Alias contém o apelido de email do ID do Microsoft Entra e o valor na coluna Full name contém o nome para exibição do usuário:

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

    Em seguida, você pode usar esse script para criar usuários do Microsoft Entra para aqueles no SAP Cloud Identity Services, o banco de dados ou o diretório que não corresponderam aos usuários no Microsoft Entra ID. Observe que talvez seja necessário modificar esse script para adicionar atributos adicionais do Microsoft Entra necessários em sua organização, ou se o $azuread_match_attr_name não for nem mailNicknameuserPrincipalName, para fornecer esse atributo do 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. Depois de adicionar quaisquer usuários ausentes ao Microsoft Entra ID, execute o script da etapa 7 novamente. Em seguida, execute o script a partir da etapa 8. Verifique se nenhum erro é relatado.

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

Registar a candidatura

Se o aplicativo já estiver registrado no Microsoft Entra ID, continue para a próxima etapa.

A conta que você está usando deve ter permissão para gerenciar aplicativos no Microsoft Entra ID. Qualquer uma das seguintes funções do Microsoft Entra inclui as permissões necessárias:

  1. Crie a entidade de segurança do aplicativo e do serviço.

    Por exemplo, se o aplicativo empresarial for chamado CORPDB1, digite os seguintes comandos:

    $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. Adicione uma função ao aplicativo e marque o aplicativo como integrado ao Microsoft Entra ID para que suas atribuições possam ser revisadas. Por exemplo, se o nome da função for General, forneça esse valor nos seguintes comandos do 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
    

Verificar se há usuários que ainda não estão atribuídos ao aplicativo

As etapas anteriores confirmaram que todos os usuários no armazenamento de dados do aplicativo existem como usuários no Microsoft Entra ID. No entanto, nem todos eles podem ser atribuídos atualmente às funções do aplicativo no Microsoft Entra ID. Portanto, as próximas etapas são ver quais usuários não têm atribuições para funções de aplicativo.

  1. Procure o ID da entidade de serviço para a entidade de serviço do aplicativo.

    Por exemplo, se o aplicativo empresarial for chamado CORPDB1, digite os seguintes comandos:

    $azuread_app_name = "CORPDB1"
    $azuread_sp_filter = "displayName eq '" + ($azuread_app_name -replace "'","''") + "'"
    $azuread_sp = Get-MgServicePrincipal -Filter $azuread_sp_filter -All
    
  2. Recupere os usuários que atualmente têm atribuições para o aplicativo no Microsoft Entra ID.

    Isso se baseia $azuread_sp na variável definida no comando anterior.

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  3. Compare a lista de IDs de usuário da seção anterior com os usuários atualmente atribuídos ao aplicativo:

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

    Se zero usuários não forem atribuídos a funções de aplicativo, indicando que todos os usuários serão atribuídos a funções de aplicativo, não será necessário fazer mais alterações antes de executar uma revisão de acesso.

    No entanto, se um ou mais usuários não estiverem atribuídos atualmente às funções do aplicativo, você precisará continuar o procedimento e adicioná-los a uma das funções do aplicativo.

  4. Selecione a função do aplicativo à qual atribuir os usuários restantes.

    Um aplicativo pode ter mais de uma função. Use este comando para listar as funções disponíveis:

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

    Selecione a função apropriada na lista e obtenha sua ID de função. Por exemplo, se o nome da função for General, forneça esse valor nos seguintes comandos do 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"}
    

Criar atribuições de função de aplicativo no Microsoft Entra ID

Para que o Microsoft Entra ID corresponda aos usuários no aplicativo com os usuários no Microsoft Entra ID, você precisa criar atribuições de função de aplicativo no Microsoft Entra ID.

Quando uma atribuição de função de aplicativo é criada na ID do Microsoft Entra para um usuário para um aplicativo e o aplicativo não oferece suporte ao provisionamento, então

  • O usuário permanecerá no aplicativo indefinidamente, a menos que seja atualizado fora da ID do Microsoft Entra ou até que a atribuição na ID do Microsoft Entra seja removida.
  • Na próxima revisão das atribuições de função desse aplicativo, o usuário será incluído na revisão.
  • Se o usuário for negado em uma revisão de acesso, sua atribuição de função de aplicativo será removida.
  1. Crie atribuições de função de aplicativo para usuários que não têm atribuições de função no momento:

    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. Aguarde um minuto para que as alterações se propaguem no Microsoft Entra ID.

  3. Consulte o ID do Microsoft Entra para obter a lista atualizada de atribuições de função:

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  4. Compare a lista de IDs de usuário da seção anterior com os usuários agora atribuídos ao aplicativo:

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

    Se algum usuário não estiver atribuído a funções de aplicativo, verifique se há um erro de uma etapa anterior no log de auditoria do Microsoft Entra.

Selecione os revisores apropriados

Ao criar cada revisão de acesso, os administradores podem escolher um ou mais revisores. Os revisores podem realizar uma revisão escolhendo usuários para acesso contínuo a um recurso ou removendo-os.

Normalmente, um proprietário de recurso é responsável por realizar uma revisão. Se você estiver criando uma revisão de um grupo, como parte do acesso de revisão para um aplicativo integrado no padrão B, poderá selecionar os proprietários do grupo como revisores. Como os aplicativos no Microsoft Entra ID não têm necessariamente um proprietário, a opção para selecionar o proprietário do aplicativo como revisor não é possível. Em vez disso, ao criar a revisão, você pode fornecer os nomes dos proprietários do aplicativo para serem os revisores.

Você também pode escolher, ao criar uma revisão de um grupo ou aplicativo, por ter uma revisão de vários estágios. Por exemplo, você pode optar por fazer com que o gerente de cada usuário atribuído execute o primeiro estágio da revisão e o proprietário do recurso o segundo estágio. Dessa forma, o proprietário do recurso pode se concentrar nos usuários que já foram aprovados por seu gerente.

Antes de criar as avaliações, verifique se você tem assentos suficientes de SKU de Governança do Microsoft Entra ID P2 ou Microsoft Entra ID no seu locatário. Além disso, verifique se todos os revisores são usuários ativos com endereços de e-mail. Quando as revisões de acesso começam, cada uma delas analisa um e-mail do Microsoft Entra ID. Se o revisor não tiver uma caixa de correio, ele não receberá o e-mail quando a avaliação começar ou um lembrete por e-mail. E, se eles forem impedidos de entrar no Microsoft Entra ID, eles não poderão realizar a revisão.

Criar a revisão das atribuições de função do aplicativo

Quando os usuários estiverem nas funções do aplicativo e você tiver os revisores identificados, poderá configurar o ID do Microsoft Entra para iniciar uma revisão.

Siga as instruções no guia para criar uma revisão de acesso de grupos ou aplicativos, para criar a revisão das atribuições de função do aplicativo. Configure a revisão para aplicar os resultados quando ela for concluída.

Recuperar as atribuições que são atualizadas quando as revisões são concluídas

  1. Quando a revisão for concluída, você poderá recuperar a lista atualizada de usuários com atribuições de função de aplicativo.

    $res = (Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  2. As colunas PrincipalDisplayName e PrincipalId contêm os nomes para exibição e IDs de usuário do Microsoft Entra de cada usuário que mantém uma atribuição de função de aplicativo.

Configurar a integração do gerenciamento de direitos com o ServiceNow para emissão de tíquetes (opcional)

Se você tiver o ServiceNow, poderá opcionalmente configurar a criação automatizada de tíquetes do ServiceNow, usando a integração de gerenciamento de direitos por meio de Aplicativos Lógicos. Nesse cenário, o gerenciamento de direitos pode criar automaticamente tíquetes do ServiceNow para provisionamento manual de usuários que receberam atribuições de pacotes de acesso.

Próximos passos