Gestire i ruoli

Questo articolo illustra come gestire i ruoli usando Microsoft Entra PowerShell. Un ruolo in Microsoft Entra definisce le autorizzazioni che controllano l'accesso a risorse come utenti, gruppi e applicazioni. Si assegnano ruoli a utenti, gruppi o entità servizio per concedere le autorizzazioni necessarie per eseguire attività specifiche. È anche possibile definire l'ambito di ogni assegnazione all'intera directory, a un'unità amministrativa o a una registrazione specifica dell'applicazione in modo che il ruolo si applichi solo dove è necessario.

Prerequisiti

Per gestire i ruoli con Microsoft Entra PowerShell, è necessario:

Trovare le definizioni dei ruoli

Una definizione di ruolo è una raccolta di autorizzazioni che possono essere eseguite, ad esempio lettura, scrittura ed eliminazione. Viene in genere chiamato ruolo. Microsoft Entra ID ha più di 60 ruoli predefiniti ed è possibile creare ruoli personalizzati. Per comprendere le operazioni di ogni ruolo, è possibile visualizzare un elenco dettagliato delle relative autorizzazioni.

Per ottenere tutte le definizioni di ruolo, eseguire il seguente comando Get-EntraDirectoryRoleDefinition con almeno il ruolo Lettori directory.

Connect-Entra -Scopes 'RoleManagement.Read.Directory'
Get-EntraDirectoryRoleDefinition
DisplayName                                   Id                                   TemplateId                           Description
-----------                                   --                                   ----------                           -----------
Guest User                                    10dae51f-b6af-4016-8d66-8c2a99b929b3 10dae51f-b6af-4016-8d66-8c2a99b929b3 Default role for guest users. Can read a limited set of directory information.
Restricted Guest User                         2af84b1e-32c8-42b7-82bc-daa82404023b 2af84b1e-32c8-42b7-82bc-daa82404023b Restricted role for guest users. Can read a limited set of directory information.

Trovare le assegnazioni di ruolo

Questa sezione descrive come elencare i ruoli assegnati in Microsoft Entra ID. Per ottenere tutte le assegnazioni di ruolo, eseguire il comando Get-EntraDirectoryRoleAssignment con almeno il ruolo Lettori della directory.

Connect-Entra -Scopes 'RoleManagement.Read.Directory'
Get-EntraDirectoryRoleAssignment -All 
Id                                            PrincipalId                           RoleDefinitionId                      DirectoryScopeId AppScopeId
--                                            -----------                           ----------------                      ---------------- ----------
00001111-aaaa-2222-bbbb-3333cccc4444          aaaaaaaa-bbbb-cccc-1111-222222222222  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
11112222-bbbb-3333-cccc-4444dddd5555          bbbbbbbb-cccc-dddd-2222-333333333333  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
22223333-cccc-4444-dddd-5555eeee6666          cccccccc-dddd-eeee-3333-444444444444  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
33334444-dddd-5555-eeee-6666ffff7777          dddddddd-eeee-ffff-4444-555555555555  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
44445555-eeee-6666-ffff-7777aaaa8888          eeeeeeee-ffff-aaaa-5555-666666666666  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                 

PrincipalId Specifica l'account a cui viene assegnato il ruolo e RoleDefinitionId specifica il ruolo assegnato all'account.

Trovare assegnazioni di ruolo per un utente specifico

Per controllare i ruoli assegnati a un utente specifico, filtrare le assegnazioni di ruolo in base all'ID oggetto dell'utente.

Connect-Entra -Scopes 'RoleManagement.Read.Directory', 'User.Read.All'
$user = Get-EntraUser -UserId 'markus@contoso.com'
Get-EntraDirectoryRoleAssignment -All | Where-Object { $_.PrincipalId -eq $user.Id }
Id                                   PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
--                                   -----------                          ----------------                     ---------------- ----------
00001111-aaaa-2222-bbbb-3333cccc4444 bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /

L'output visualizza gli ID delle assegnazioni di ruolo, ma non i nomi visualizzati dei ruoli. Per risolvere i nomi dei ruoli per ciascun RoleDefinitionId, convogliare le assegnazioni attraverso Get-EntraDirectoryRoleDefinition.

$assignments = Get-EntraDirectoryRoleAssignment -All | Where-Object { $_.PrincipalId -eq $user.Id }
foreach ($assignment in $assignments) {
    $roleDef = Get-EntraDirectoryRoleDefinition -UnifiedRoleDefinitionId $assignment.RoleDefinitionId
    [PSCustomObject]@{
        RoleName = $roleDef.DisplayName
        Scope    = $assignment.DirectoryScopeId
    }
}
RoleName               Scope
--------               -----
Helpdesk Administrator /
User Administrator     /administrativeUnits/aaaaaaaa-bbbb-cccc-1111-222222222222

Assegnazione di ruoli

Per concedere l'accesso agli utenti di Microsoft Entra ID, assegnare i ruoli di Microsoft Entra. Questa sezione illustra come assegnare ruoli Microsoft Entra a utenti e gruppi. Per completare le attività seguenti, è necessario disporre almeno del ruolo di Amministratore ruolo con privilegi.

Assegnare ruoli agli utenti

  1. Usare Get-EntraUser per recuperare l'utente per l'assegnazione di ruolo.

    Connect-Entra -Scopes 'User.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    

    Il -UserId specifica l'ID come nome dell'entità utente principale (UPN) o ObjectId.

    DisplayName Id                                   Mail                                 UserPrincipalName
    ----------- --                                   ----                                 -----------------
    Markus Long bbbbbbbb-1111-2222-3333-cccccccccccc markus@contoso.com                   markus@contoso.onmicrosoft.com
    
  2. Usare il Get-EntraDirectoryRoleDefinition comando per ottenere l'ID ruolo (RoleDefinitionId) da assegnare.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory', 'EntitlementManagement.Read.All'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
    
  3. Usare il New-EntraDirectoryRoleAssignment comando per assegnare il ruolo.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId '/'
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
    --                                       -----------                          ----------------                     ---------------- ----------
    00001111-aaaa-2222-bbbb-3333cccc4444     aaaaaaaa-bbbb-cccc-1111-222222222222 a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /
    

Questo comando crea una nuova assegnazione di ruolo in Microsoft Entra ID.

  • Il -RoleDefinitionId parametro specifica l'ID della definizione del ruolo da assegnare. Le definizioni dei ruoli descrivono le autorizzazioni concesse a utenti o gruppi dal ruolo. Questo è l'identificatore del unifiedRoleDefinition a cui si riferisce l'assegnazione.

  • Il -PrincipalId parametro specifica l'ID dell'entità (utente, gruppo o entità servizio) a cui viene assegnato il ruolo.

  • Il-DirectoryScopeId parametro specifica l'ambito della directory su cui è effettiva l'assegnazione di ruolo. Il / valore rappresenta in genere l'ambito radice, ovvero l'assegnazione di ruolo è applicabile nell'intera directory.

Note

I passaggi descritti in questa sezione creano un'assegnazione di ruolo permanente (attiva). Per concedere a un utente un accesso temporaneo o just-in-time tramite Privileged Identity Management (PIM), vedi i cmdlet di Microsoft Entra PowerShell per Privileged Identity Management.

Assegnare ruoli ai gruppi

Per semplificare la gestione dei ruoli, è possibile assegnare Microsoft Entra ruoli a un gruppo anziché a singoli utenti. In questo modo, è possibile gestire le assegnazioni di ruolo per più utenti contemporaneamente.

  1. Creare un gruppo assegnabile a ruoli usando il IsAssignableToRole parametro . Questo parametro è impostato su True per indicare che il gruppo può essere assegnato a un ruolo.

    Connect-Entra -Scopes 'Group.ReadWrite.All'
    $params = @{
        DisplayName = 'HelpDesk admin group2'
        Description = 'Group assignable to role'
        MailEnabled = $False
        MailNickname = 'helpDeskAdminGroup'
        SecurityEnabled = $True
        IsAssignableToRole = $True
    }
    $group = New-EntraGroup @params
    
    DisplayName           Id                                   MailNickname       Description              GroupTypes
    -----------           --                                   ------------       -----------              ----------
    HelpDesk admin group2 vvvvvvvv-8888-9999-0000-jjjjjjjjjjjj helpDeskAdminGroup Group assignable to role {}
    
  2. Ottenere l'ID ruolo (RoleDefinitionId) da assegnare usando il Get-EntraDirectoryRoleDefinition comando .

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
    
  3. Creare un'assegnazione di ruolo usando il New-EntraDirectoryRoleAssignment comando dove PrincipalId è l'ID gruppo.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $group.Id -DirectoryScopeId '/'
    

Assegnare ruoli alle entità servizio

È possibile assegnare Microsoft Entra ruoli a un'entità servizio, inclusa un'identità gestita, in modo che un'applicazione possa eseguire attività di directory per proprio conto senza un utente connesso.

  1. Usare Get-EntraServicePrincipal per recuperare l'entità servizio.

    Connect-Entra -Scopes 'Application.Read.All'
    $servicePrincipal = Get-EntraServicePrincipal -Filter "DisplayName eq 'My Application'"
    
    DisplayName    Id                                   AppId                                SignInAudience ServicePrincipalType
    -----------    --                                   -----                                -------------- --------------------
    My Application cccccccc-dddd-eeee-3333-444444444444 44445555-eeee-6666-ffff-7777aaaa8888 AzureADMyOrg   Application
    
  2. Ottenere l'ID ruolo da assegnare.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Directory Readers'"
    
  3. Assegna il ruolo all'entità servizio.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $servicePrincipal.Id -DirectoryScopeId '/'
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
    --                                       -----------                          ----------------                     ---------------- ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          cccccccc-dddd-eeee-3333-444444444444 a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /
    

Assegnare ruoli con ambito per unità amministrativa

È possibile limitare un'assegnazione di ruolo a una specifica unità amministrativa anziché all'intera directory. Le autorizzazioni del ruolo si applicano quindi solo agli utenti, ai gruppi o ai dispositivi appartenenti a tale unità amministrativa, che consente di seguire il principio dei privilegi minimi. Per altre informazioni sulle unità amministrative, vedere Unità amministrative in Microsoft Entra ID.

  1. Recuperare l'entità (utente, gruppo o entità servizio) e l'unità amministrativa.

    Connect-Entra -Scopes 'User.Read.All', 'AdministrativeUnit.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    $adminUnit = Get-EntraAdministrativeUnit -Filter "DisplayName eq 'Seattle Admin Unit'"
    
  2. Ottenere la definizione del ruolo.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'User Administrator'"
    
  3. Assegna il ruolo nell'ambito dell'unità amministrativa.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    $directoryScopeId = '/administrativeUnits/' + $adminUnit.Id
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId $directoryScopeId
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId                                          AppScopeId
    --                                       -----------                          ----------------                     ----------------                                          ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /administrativeUnits/aaaaaaaa-bbbb-cccc-1111-222222222222
    

L'utente ha ora il ruolo Amministratore utenti solo all'interno dell'unità amministrativa specificata.

Assegnare ruoli con ambito applicazione

È possibile limitare l'ambito di un'assegnazione di ruolo alla registrazione di una singola applicazione, in modo che il soggetto possa gestire solo tale applicazione. Usare questo ambito quando, ad esempio, si vuole che uno sviluppatore gestisca la propria registrazione dell'app senza concedere loro autorizzazioni di amministratore applicazioni a livello di tenant.

  1. Recuperare l'utente e la registrazione dell'applicazione.

    Connect-Entra -Scopes 'User.Read.All', 'Application.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    $application = Get-EntraApplication -Filter "DisplayName eq 'My Web App'"
    
  2. Ottenere la definizione del ruolo.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Application Administrator'"
    
  3. Assegna il ruolo con ambito limitato all'applicazione.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    $directoryScopeId = '/' + $application.Id
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId $directoryScopeId
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId                      AppScopeId
    --                                       -----------                          ----------------                     ----------------                      ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /dddddddd-eeee-ffff-4444-555555555555
    

L'utente ha ora il ruolo Amministratore applicazione solo per la registrazione dell'applicazione specificata.

Note

I due formati di ambito hanno una semantica diversa. Un ambito di /{id} (usato per l'ambito dell'applicazione) indica che l'entità può gestire l'oggetto stesso. Un ambito indica /administrativeUnits/{id} che l'entità può gestire i membri dell'unità amministrativa (in base al ruolo assegnato), non l'unità amministrativa stessa. Per altre informazioni, vedere Assegnare ruoli Microsoft Entra in ambiti diversi.

Creare un ruolo personalizzato

Questa sezione illustra come creare nuovi ruoli personalizzati in Microsoft Entra ID con Microsoft Entra PowerShell. Per completare l'attività seguente, è necessario disporre almeno del ruolo Privileged Role Administrator.

Per creare un nuovo ruolo, usare il New-EntraDirectoryRoleDefinition cmdlet .

  • Il RolePermissions parametro specifica le autorizzazioni per la definizione del ruolo.
  • Il IsEnabled parametro specifica se la definizione del ruolo è abilitata.
  • Il DisplayName parametro specifica il nome visualizzato per la definizione del ruolo.
Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
$rolePermissions = New-object Microsoft.Open.MSGraph.Model.RolePermission
$rolePermissions.AllowedResourceActions =  @("microsoft.directory/applications/basic/read")
New-EntraDirectoryRoleDefinition -RolePermissions $rolePermissions -IsEnabled $true -DisplayName 'Custom Application Read'

DisplayName             Id                                   TemplateId                           Description IsBuiltIn IsEnabled
-----------             --                                   ----------                           ----------- --------- ---------
Custom Application Read a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 f5f5f5f5-aaaa-bbbb-cccc-d6d6d6d6d6d6             False     True

Per trovare altre opzioni di configurazione durante la creazione di un ruolo personalizzato, consultare l'articolo New-EntraDirectoryRoleDefinition.

Dopo aver creato il ruolo, è possibile assegnarlo a utenti o gruppi.

Pulire le risorse

Questa sezione illustra come eliminare i ruoli in Microsoft Entra ID con Microsoft Entra PowerShell. Per completare le attività seguenti, è necessario disporre almeno del ruolo Amministratore ruolo con privilegi.

Rimuovi assegnazioni di ruolo

Usare il Remove-EntraDirectoryRoleAssignment comando per rimuovere un'assegnazione di ruolo. Se è necessario trovare l'ID assegnazione di ruolo, indicato nel -Id parametro , eseguire prima il Get-EntraDirectoryRoleAssignment comando .

Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
$group = Get-EntraGroup -Filter "DisplayName eq 'HelpDesk admin group2'"
$directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
Get-EntraDirectoryRoleAssignment | Where-Object {$_.PrincipalId -eq $group.Id -and $_.RoleDefinitionId -eq $directoryRole.Id} | Remove-EntraDirectoryRoleAssignment

In questo esempio viene rimossa l'assegnazione di ruolo specificata da Microsoft Entra ID.

Rimuovi ruoli

Non è possibile eliminare i ruoli predefiniti. Usare il Remove-EntraDirectoryRoleDefinition comando per eliminare un ruolo personalizzato. Il DisplayName parametro fa riferimento al nome visualizzato del ruolo personalizzato.

Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Custom Application Read'" | Remove-EntraDirectoryRoleDefinition