Risolvere i problemi relativi ai limiti del controllo degli accessi in base al ruolo di Azure

Questo articolo descrive alcune soluzioni comuni quando si superano i limiti nel controllo degli accessi in base al ruolo di Azure.

Prerequisiti

Nota

Le query usate in questo articolo restituiscono solo assegnazioni di ruolo o ruoli personalizzati per la lettura. Ad esempio, se si dispone solo delle autorizzazioni per leggere le assegnazioni di ruolo nell'ambito del gruppo di risorse, le assegnazioni di ruolo nell'ambito della sottoscrizione non vengono restituite.

Sintomo: non è possibile creare altre assegnazioni di ruolo

Quando si tenta di assegnare un ruolo, viene visualizzato il messaggio di errore seguente:

No more role assignments can be created (code: RoleAssignmentLimitExceeded)

Causa

supporto tecnico di Azure fino a 4000 assegnazioni di ruolo per sottoscrizione. Questo limite include le assegnazioni di ruolo negli ambiti di sottoscrizione, gruppo di risorse e risorsa, ma non nell'ambito del gruppo di gestione. È consigliabile provare a ridurre il numero di assegnazioni di ruolo nella sottoscrizione.

Nota

Il limite di 4000 assegnazioni di ruolo per ogni sottoscrizione è fisso e non può essere aumentato.

Per ottenere il numero di assegnazioni di ruolo, è possibile visualizzare il grafico nella pagina Controllo di accesso (IAM) del portale di Azure. È anche possibile usare i comandi di Azure PowerShell seguenti:

$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count

Soluzione 1: sostituire le assegnazioni di ruolo basate su entità con assegnazioni di ruolo basate su gruppi

Per ridurre il numero di assegnazioni di ruolo nella sottoscrizione, aggiungere entità (utenti, entità servizio e identità gestite) ai gruppi e assegnare ruoli ai gruppi. Seguire questa procedura per identificare dove è possibile sostituire più assegnazioni di ruolo per le entità con una singola assegnazione di ruolo per un gruppo.

  1. Accedere al portale di Azure e aprire Azure Resource Graph Explorer.

  2. Selezionare Ambito e impostare l'ambito per la query.

    In genere si imposta l'ambito su Directory per eseguire query sull'intero tenant, ma è possibile limitare l'ambito a sottoscrizioni specifiche.

    Screenshot di Azure Resource Graph Explorer che mostra la selezione dell'ambito.

  3. Selezionare Imposta ambito di autorizzazione e impostare l'ambito di autorizzazione su At, sopra e sotto per eseguire query su tutte le risorse nell'ambito specificato.

    Screenshot di Azure Resource Graph Explorer che mostra il riquadro Imposta ambito autorizzazione.

  4. Eseguire la query seguente per ottenere le assegnazioni di ruolo con lo stesso ruolo e allo stesso ambito, ma per entità diverse.

    Questa query controlla le assegnazioni di ruolo attive e non considera le assegnazioni di ruolo idonee in Microsoft Entra Privileged Identity Management. Per elencare le assegnazioni di ruolo idonee, è possibile usare l'interfaccia di amministrazione di Microsoft Entra, PowerShell o l'API REST. Per altre informazioni, vedere Get-AzRoleEligibilityScheduleInstance o Istanze di pianificazione dell'idoneità ai ruoli - Elenco per ambito.

    Se si usano condizioni di assegnazione di ruolo o si delega la gestione delle assegnazioni di ruolo con condizioni, è consigliabile usare la query Condizioni. In caso contrario, usare la query predefinita.

    authorizationresources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend RoleId = tolower(tostring(properties.roleDefinitionId))
    | join kind = leftouter (
      authorizationresources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleDefinitionName = tostring(properties.roleName)
      | extend RoleId = tolower(id)
      | project RoleDefinitionName, RoleId
    ) on $left.RoleId == $right.RoleId
    | extend principalId = tostring(properties.principalId)
    | extend principal_to_ra = pack(principalId, id)
    | summarize count_ = count(), AllPrincipals = make_set(principal_to_ra) by RoleDefinitionId = RoleId, Scope = tolower(properties.scope), RoleDefinitionName
    | where count_ > 1
    | order by count_ desc
    

    Di seguito è riportato un esempio dei risultati. La colonna count_ è il numero di entità assegnate allo stesso ruolo e allo stesso ambito. Il conteggio viene ordinato in ordine decrescente.

    Screenshot di Azure Resource Graph Explorer che mostra le assegnazioni di ruolo con lo stesso ruolo e allo stesso ambito, ma per entità diverse.

  5. Identificare una riga in cui si desidera sostituire più assegnazioni di ruolo con una singola assegnazione di ruolo per un gruppo.

  6. Nella riga selezionare Visualizza dettagli per aprire il riquadro Dettagli .

    Screenshot del riquadro Dettagli che mostra le assegnazioni di ruolo con lo stesso ruolo e con lo stesso ambito, ma per entità diverse.

    Colonna Descrizione
    RoleDefinitionId ID del ruolo attualmente assegnato.
    Ambito Ambito per l'assegnazione di ruolo, che sarà una sottoscrizione, un gruppo di risorse o una risorsa.
    RoleDefinitionName Nome del ruolo attualmente assegnato.
    count_ Numero di entità assegnate allo stesso ruolo e allo stesso ambito.
    AllPrincipals Elenco di ID entità assegnati allo stesso ruolo e allo stesso ambito.
  7. Usare RoleDefinitionId, RoleDefinitionName e Scope per ottenere il ruolo e l'ambito.

  8. Usare AllPrincipals per ottenere l'elenco degli ID entità con la stessa assegnazione di ruolo.

  9. Creare un gruppo Microsoft Entra. Per altre informazioni, vedere Gestire i gruppi e l'appartenenza ai gruppi di Microsoft Entra.

  10. Aggiungere le entità da AllPrincipals al gruppo.

    Per informazioni su come aggiungere entità in blocco, vedere Aggiungere in blocco i membri del gruppo in Microsoft Entra ID.

  11. Assegnare il ruolo al gruppo creato nello stesso ambito. Per ulteriori informazioni, vedi Assegnare ruoli di Azure usando il portale di Azure.

    È ora possibile trovare e rimuovere le assegnazioni di ruolo basate su entità.

  12. Ottenere i nomi delle entità dagli ID entità.

  13. Aprire la pagina Controllo di accesso (IAM) nello stesso ambito delle assegnazioni di ruolo.

  14. Selezionare la scheda Assegnazioni di ruolo.

  15. Per filtrare le assegnazioni di ruolo, selezionare il filtro Ruolo e quindi selezionare il nome del ruolo.

  16. Trovare le assegnazioni di ruolo basate su entità.

    Dovrebbe essere visualizzata anche l'assegnazione di ruolo basata su gruppo.

    Screenshot della pagina Controllo di accesso (IAM) che mostra le assegnazioni di ruolo con lo stesso ruolo e con lo stesso ambito, ma per entità diverse.

  17. Selezionare e rimuovere le assegnazioni di ruolo basate su entità. Per altre informazioni, vedere Rimuovere le assegnazioni di ruolo di Azure.

Soluzione 2- Rimuovere le assegnazioni di ruolo ridondanti

Per ridurre il numero di assegnazioni di ruolo nella sottoscrizione, rimuovere le assegnazioni di ruolo ridondanti. Seguire questa procedura per identificare la posizione in cui le assegnazioni di ruolo ridondanti in un ambito inferiore possono essere potenzialmente rimosse perché un'assegnazione di ruolo a un ambito superiore concede già l'accesso.

  1. Accedere al portale di Azure e aprire Azure Resource Graph Explorer.

  2. Selezionare Ambito e impostare l'ambito per la query.

    In genere si imposta l'ambito su Directory per eseguire query sull'intero tenant, ma è possibile limitare l'ambito a sottoscrizioni specifiche.

    Screenshot di Azure Resource Graph Explorer che mostra la selezione dell'ambito.

  3. Selezionare Imposta ambito di autorizzazione e impostare l'ambito di autorizzazione su At, sopra e sotto per eseguire query su tutte le risorse nell'ambito specificato.

    Screenshot di Azure Resource Graph Explorer che mostra il riquadro Imposta ambito autorizzazione.

  4. Eseguire la query seguente per ottenere le assegnazioni di ruolo con lo stesso ruolo e la stessa entità, ma in ambiti diversi.

    Questa query controlla le assegnazioni di ruolo attive e non considera le assegnazioni di ruolo idonee in Microsoft Entra Privileged Identity Management. Per elencare le assegnazioni di ruolo idonee, è possibile usare l'interfaccia di amministrazione di Microsoft Entra, PowerShell o l'API REST. Per altre informazioni, vedere Get-AzRoleEligibilityScheduleInstance o Istanze di pianificazione dell'idoneità ai ruoli - Elenco per ambito.

    Se si usano condizioni di assegnazione di ruolo o si delega la gestione delle assegnazioni di ruolo con condizioni, è consigliabile usare la query Condizioni. In caso contrario, usare la query predefinita.

    authorizationresources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId))
    | extend PrincipalId = tolower(properties.principalId)
    | extend RoleDefinitionId_PrincipalId = strcat(RoleDefinitionId, "_", PrincipalId)
    | join kind = leftouter (
      authorizationresources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleDefinitionName = tostring(properties.roleName)
      | extend rdId = tolower(id)
      | project RoleDefinitionName, rdId
    ) on $left.RoleDefinitionId == $right.rdId
    | summarize count_ = count(), Scopes = make_set(tolower(properties.scope)) by RoleDefinitionId_PrincipalId,RoleDefinitionName
    | project RoleDefinitionId = split(RoleDefinitionId_PrincipalId, "_", 0)[0], RoleDefinitionName, PrincipalId = split(RoleDefinitionId_PrincipalId, "_", 1)[0], count_, Scopes
    | where count_ > 1
    | order by count_ desc
    

    Di seguito è riportato un esempio dei risultati. La colonna count_ è il numero di ambiti diversi per le assegnazioni di ruolo con lo stesso ruolo e la stessa entità. Il conteggio viene ordinato in ordine decrescente.

    Screenshot di Azure Resource Graph Explorer che mostra le assegnazioni di ruolo per lo stesso ruolo e la stessa entità, ma in ambiti diversi.

    Colonna Descrizione
    RoleDefinitionId ID del ruolo attualmente assegnato.
    RoleDefinitionName Nome del ruolo attualmente assegnato.
    PrincipalId ID dell'entità a cui è assegnato il ruolo.
    count_ Numero di ambiti diversi per le assegnazioni di ruolo con lo stesso ruolo e la stessa entità.
    Ambiti Ambiti per le assegnazioni di ruolo con lo stesso ruolo e la stessa entità.
  5. Identificare una riga in cui si desidera rimuovere le assegnazioni di ruolo ridondanti.

  6. In una riga selezionare Visualizza dettagli per aprire il riquadro Dettagli .

    Screenshot del riquadro Dettagli che mostra le assegnazioni di ruolo per lo stesso ruolo e la stessa entità, ma in ambiti diversi.

  7. Usare RoleDefinitionId, RoleDefinitionName e PrincipalId per ottenere il ruolo e l'ID entità.

  8. Usare Ambiti per ottenere l'elenco degli ambiti per lo stesso ruolo e la stessa entità.

  9. Determinare l'ambito necessario per l'assegnazione di ruolo. È possibile rimuovere le altre assegnazioni di ruolo.

    Quando si determinano le assegnazioni di ruolo che è possibile rimuovere, è consigliabile seguire le procedure consigliate relative ai privilegi minimi. L'assegnazione di ruolo nell'ambito superiore potrebbe concedere più accesso all'entità di sicurezza rispetto a quanto necessario. In tal caso, è necessario rimuovere l'assegnazione di ruolo con l'ambito superiore. Ad esempio, un utente potrebbe non avere bisogno di un'assegnazione di ruolo Collaboratore macchina virtuale nell'ambito della sottoscrizione quando un'assegnazione di ruolo Collaboratore macchina virtuale in un ambito del gruppo di risorse inferiore concede l'accesso necessario.

  10. Ottenere il nome dell'entità dall'ID entità.

  11. Aprire la pagina Controllo di accesso (IAM) nell'ambito di un'assegnazione di ruolo da rimuovere.

  12. Selezionare la scheda Assegnazioni di ruolo.

  13. Per filtrare le assegnazioni di ruolo, selezionare il filtro Ruolo e quindi selezionare il nome del ruolo.

  14. Trovare l'entità.

  15. Selezionare e rimuovere l'assegnazione di ruolo. Per altre informazioni, vedere Rimuovere le assegnazioni di ruolo di Azure.

Soluzione 3- Sostituire più assegnazioni di ruolo predefinite con un'assegnazione di ruolo personalizzata

Per ridurre il numero di assegnazioni di ruolo nella sottoscrizione, sostituire più assegnazioni di ruolo predefinite con un'unica assegnazione di ruolo personalizzata. Seguire questa procedura per identificare la posizione in cui è possibile sostituire più assegnazioni di ruolo predefinite.

  1. Accedere al portale di Azure e aprire Azure Resource Graph Explorer.

  2. Selezionare Ambito e impostare l'ambito per la query.

    In genere si imposta l'ambito su Directory per eseguire query sull'intero tenant, ma è possibile limitare l'ambito a sottoscrizioni specifiche.

    Screenshot di Azure Resource Graph Explorer che mostra la selezione dell'ambito.

  3. Eseguire la query seguente per ottenere assegnazioni di ruolo con lo stesso ambito principale e lo stesso ambito, ma con ruoli predefiniti diversi.

    Questa query controlla le assegnazioni di ruolo attive e non considera le assegnazioni di ruolo idonee in Microsoft Entra Privileged Identity Management. Per elencare le assegnazioni di ruolo idonee, è possibile usare l'interfaccia di amministrazione di Microsoft Entra, PowerShell o l'API REST. Per altre informazioni, vedere Get-AzRoleEligibilityScheduleInstance o Istanze di pianificazione dell'idoneità ai ruoli - Elenco per ambito.

    Se si usano condizioni di assegnazione di ruolo o si delega la gestione delle assegnazioni di ruolo con condizioni, è consigliabile usare la query Condizioni. In caso contrario, usare la query predefinita.

    AuthorizationResources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend PrincipalId = tostring(properties.principalId) 
    | extend Scope = tolower(properties.scope)
    | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId))
    | join kind = leftouter (
      AuthorizationResources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleName = tostring(properties.roleName)
      | extend RoleId = tolower(id)
      | extend RoleType = tostring(properties.type) 
      | where RoleType == "BuiltInRole"
      | extend RoleId_RoleName = pack(RoleId, RoleName)
    ) on $left.RoleDefinitionId == $right.RoleId
    | summarize count_ = count(), AllRD = make_set(RoleId_RoleName) by PrincipalId, Scope
    | where count_ > 1
    | order by count_ desc
    

    Di seguito è riportato un esempio dei risultati. La colonna count_ è il numero di diverse assegnazioni di ruolo predefinite con la stessa entità e lo stesso ambito. Il conteggio viene ordinato in ordine decrescente.

    Screenshot di Azure Resource Graph Explorer che mostra le assegnazioni di ruolo per con la stessa entità e lo stesso ambito.

    Colonna Descrizione
    PrincipalId ID dell'entità a cui sono stati assegnati i ruoli predefiniti.
    Ambito Ambito per le assegnazioni di ruolo predefinite.
    count_ Numero di assegnazioni di ruolo predefinite con la stessa entità e lo stesso ambito.
    AllRD ID e nome dei ruoli predefiniti.
  4. In una riga selezionare Visualizza dettagli per aprire il riquadro Dettagli .

    Screenshot del riquadro Dettagli che mostra le assegnazioni di ruolo con la stessa entità e lo stesso ambito.

  5. Usare AllRD per visualizzare i ruoli predefiniti che possono essere combinati in un ruolo personalizzato.

  6. Elencare le azioni e le azioni dei dati per i ruoli predefiniti. Per altre informazioni, vedere Elencare le definizioni dei ruoli di Azure o i ruoli predefiniti di Azure

  7. Creare un ruolo personalizzato che includa tutte le azioni e le azioni dei dati come ruoli predefiniti. Per semplificare la creazione del ruolo personalizzato, è possibile iniziare clonando uno dei ruoli predefiniti. Per altre informazioni, vedere Creare o aggiornare ruoli personalizzati di Azure usando il portale di Azure.

  8. Ottenere il nome dell'entità dall'ID entità.

  9. Aprire la pagina Controllo di accesso (IAM) nello stesso ambito delle assegnazioni di ruolo.

  10. Assegnare il nuovo ruolo personalizzato all'entità. Per ulteriori informazioni, vedi Assegnare ruoli di Azure usando il portale di Azure.

    È ora possibile rimuovere le assegnazioni di ruolo predefinite.

  11. Nella pagina Controllo di accesso (IAM) nello stesso ambito selezionare la scheda Assegnazioni di ruolo.

  12. Trovare le assegnazioni di ruolo principali e predefinite.

  13. Rimuovere le assegnazioni di ruolo predefinite dall'entità. Per altre informazioni, vedere Rimuovere le assegnazioni di ruolo di Azure.

Soluzione 4- Rendere idonee le assegnazioni di ruolo

Per ridurre il numero di assegnazioni di ruolo nella sottoscrizione e si dispone di Microsoft Entra ID P2, rendere idonee le assegnazioni di ruolo in Microsoft Entra Privileged Identity Management invece di assegnare in modo permanente.

Soluzione 5 - Aggiungere una sottoscrizione aggiuntiva

Aggiungere una sottoscrizione aggiuntiva.

Sintomo: non è possibile creare altre assegnazioni di ruolo nell'ambito del gruppo di gestione

Non è possibile assegnare un ruolo nell'ambito del gruppo di gestione.

Causa

supporto tecnico di Azure fino a 500 assegnazioni di ruolo per gruppo di gestione. Questo limite è diverso dal limite di assegnazioni di ruolo per ogni sottoscrizione.

Nota

Il limite di 500 assegnazioni di ruolo per gruppo di gestione è fisso e non può essere aumentato.

Soluzione

Provare a ridurre il numero di assegnazioni di ruolo nel gruppo di gestione. Per le opzioni possibili, vedere Sintomo: non è possibile creare altre assegnazioni di ruolo. Affinché le query recuperino le risorse a livello di gruppo di gestione, è necessario apportare la modifica seguente alle query:

Sostituzione

| where id startswith "/subscriptions"

With

| where id startswith "/providers/Microsoft.Management/managementGroups"

Sintomo: non è possibile creare altre definizioni di ruolo

Quando si tenta di creare un nuovo ruolo personalizzato, viene visualizzato il messaggio seguente:

Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)

Causa

supporto tecnico di Azure fino a 5000 ruoli personalizzati in una directory. Per Microsoft Azure gestito da 21Vianet, il limite è 2000 ruoli personalizzati.

Soluzione

Seguire questa procedura per trovare ed eliminare ruoli personalizzati di Azure inutilizzati.

  1. Accedere al portale di Azure e aprire Azure Resource Graph Explorer.

  2. Selezionare Ambito e impostare l'ambito su Directory per la query.

    Screenshot di Azure Resource Graph Explorer che mostra la selezione dell'ambito.

  3. Eseguire la query seguente per ottenere tutti i ruoli personalizzati che non dispongono di assegnazioni di ruolo:

    Questa query controlla le assegnazioni di ruolo attive e non considera le assegnazioni di ruolo personalizzate idonee in Microsoft Entra Privileged Identity Management. Per elencare le assegnazioni di ruolo personalizzate idonee, è possibile usare l'interfaccia di amministrazione di Microsoft Entra, PowerShell o l'API REST. Per altre informazioni, vedere Get-AzRoleEligibilityScheduleInstance o Istanze di pianificazione dell'idoneità ai ruoli - Elenco per ambito.

    AuthorizationResources
    | where type =~ "microsoft.authorization/roledefinitions"
    | where tolower(properties.type) == "customrole"
    | extend rdId = tolower(id)
    | extend Scope = tolower(properties.assignableScopes)
    | join kind = leftouter (
    AuthorizationResources
      | where type =~ "microsoft.authorization/roleassignments"
      | extend RoleId = tolower(tostring(properties.roleDefinitionId))
      | summarize RoleAssignmentCount = count() by RoleId
    ) on $left.rdId == $right.RoleId
    | where isempty(RoleAssignmentCount)
    | project RoleDefinitionId = rdId, RoleDefinitionName = tostring(properties.roleName), Scope
    

    Di seguito è riportato un esempio dei risultati:

    Screenshot di Azure Resource Graph Explorer che mostra ruoli personalizzati senza assegnazioni di ruolo.

    Colonna Descrizione
    RoleDefinitionId ID del ruolo personalizzato inutilizzato.
    RoleDefinitionName Nome del ruolo personalizzato inutilizzato.
    Ambito Ambiti assegnabili per il ruolo personalizzato inutilizzato.
  4. Aprire l'ambito (in genere una sottoscrizione) e quindi aprire la pagina Controllo di accesso (IAM).

  5. Selezionare la scheda Ruoli per visualizzare l'elenco di tutti i ruoli predefiniti e personalizzati.

  6. Nel filtro Tipo selezionare CustomRole per visualizzare solo i ruoli personalizzati.

  7. Selezionare i puntini di sospensione (...) per il ruolo personalizzato da eliminare e quindi selezionare Elimina.

    Screenshot di un elenco di ruoli personalizzati che possono essere selezionati per l'eliminazione.

Passaggi successivi