Résoudre les problèmes de limites Azure RBAC

Cet article décrit certaines solutions courantes lorsque vous dépassez les limites du contrôle d’accès en fonction du rôle Azure (Azure RBAC).

Prérequis

Remarque

Les requêtes utilisées dans cet article retournent uniquement des attributions de rôles ou des rôles personnalisés pour lesquels vous disposez des autorisations de lecture. Par exemple, si vous ne disposez que des autorisations nécessaires pour lire les attributions de rôles dans l’étendue du groupe de ressources, les attributions de rôles dans l’étendue de l’abonnement ne seront pas retournées.

Symptôme : Plus aucune attribution de rôle ne peut être créée

Lorsque vous essayez d’attribuer un rôle, vous obtenez le message d’erreur suivant :

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

Cause

Azure prend en charge jusqu’à 4000 attributions de rôle par abonnement. Cette limite comprend les attributions de rôle au niveau de l’abonnement, du groupe de ressources et des étendues de ressources, mais pas au niveau du groupe d’administration. Vous devez essayer de réduire le nombre d’attributions de rôles dans l’abonnement.

Remarque

Cette limite de 4 000 attributions de rôle par abonnement est fixe et ne peut pas être augmentée.

Pour obtenir le nombre d’attributions de rôle, vous pouvez afficher le graphique sur la page contrôle d’accès (IAM) dans le Portail Azure. Vous pouvez également utiliser les commandes Azure PowerShell suivantes :

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

Solution 1 – Remplacer les attributions de rôles basées sur le principal par les attributions de rôles basées sur des groupes

Pour réduire le nombre d’attributions de rôles dans l’abonnement, ajoutez des principaux (utilisateurs, principaux de service et identités managées) aux groupes et attribuez plutôt les rôles aux groupes. Suivez ces étapes pour voir où certaines attributions de rôles pour les principaux peuvent être remplacées par une attribution de rôle unique pour un groupe.

  1. Connectez-vous au portail Azure et ouvrez l’Explorateur Azure Resource Graph.

  2. Sélectionnez Étendue et définissez l’étendue de la requête.

    En règle générale, vous définissez l’étendue sur Annuaire pour interroger l’intégralité de votre locataire, mais vous pouvez limiter l’étendue à des abonnements particuliers.

    Capture d’écran de l’Explorateur Azure Resource Graph montrant la sélection de l’étendue.

  3. Sélectionnez Définir l’étendue d’autorisation et définissez l’étendue d’autorisation sur Dans, au-dessus et en dessous de pour interroger toutes les ressources dans l’étendue spécifiée.

    Capture d’écran de l’explorateur Azure Resource Graph montrant le volet Définir l’étendue d’autorisation.

  4. Exécutez la requête suivante pour obtenir les attributions de rôles avec le même rôle et dans la même étendue, mais pour différents principaux.

    Cette requête vérifie les attributions de rôles actives et ne prend pas en compte les attributions de rôles éligibles dans Microsoft Entra Privileged Identity Management. Pour répertorier les attributions de rôles éligibles, vous pouvez utiliser le Centre d’administration Microsoft Entra, PowerShell ou l’API REST. Pour plus d’informations, consultez Get-AzRoleEligibilityScheduleInstance ou Instances de planification d’éligibilité de rôle – Liste pour l’étendue.

    Si vous utilisez des conditions d’attribution de rôle ou que vous déléguez la gestion des attributions de rôle avec des conditions, vous devez utiliser la requête Conditions. Sinon, utilisez la requête Par défaut.

    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
    

    Voici un exemple des résultats. La colonne count_ correspond au nombre de principaux affectés au même rôle et à la même étendue. Le nombre est trié dans l’ordre décroissant.

    Capture d’écran de l’explorateur Azure Resource Graph montrant les attributions de rôles avec le même rôle et dans la même étendue, mais pour différents principaux.

  5. Identifiez une ligne dans laquelle vous souhaitez remplacer les attributions de rôles multiples par une attribution de rôle unique pour un groupe.

  6. Dans la ligne, sélectionnez Afficher les détails pour ouvrir le volet Détails.

    Capture d’écran du volet Détails montrant les attributions de rôles avec le même rôle et dans la même étendue, mais pour différents principaux.

    Colonne Description
    RoleDefinitionId ID du rôle actuellement affecté.
    Étendue Étendue de l’attribution de rôle, qui sera un abonnement, un groupe de ressources ou une ressource.
    RoleDefinitionName Nom du rôle actuellement affecté.
    count_ Nombre de principaux affectés au même rôle et à la même étendue.
    AllPrincipals Liste des principaux ID affectés au même rôle et à la même étendue.
  7. Utilisez RoleDefinitionId, RoleDefinitionName et Étendue pour obtenir le rôle et l’étendue.

  8. Utilisez AllPrincipals pour obtenir la liste des ID principaux avec la même attribution de rôle.

  9. Créer un groupe Microsoft Entra. Pour plus d’informations, consultez Gérer les groupes Microsoft Entra et l’appartenance aux groupes.

  10. Ajoutez les principaux au groupe depuis AllPrincipals.

    Pour plus d’informations sur l’ajout de principaux en bloc, consultez Ajouter en bloc des membres de groupe dans Microsoft Entra ID.

  11. Attribuez le rôle au groupe que vous avez créé dans la même étendue. Pour plus d’informations, consultez Attribuer des rôles Azure en utilisant le portail Azure.

    Vous pouvez maintenant rechercher et supprimer les attributions de rôles basées sur le principal.

  12. Obtenez les noms de principaux à partir des ID de principaux.

  13. Ouvrez la page Contrôle d’accès (IAM) dans la même étendue que les attributions de rôles.

  14. Sélectionnez l’onglet Attributions de rôles.

  15. Pour filtrer les attributions de rôles, sélectionnez le filtre Rôle, puis sélectionnez le nom du rôle.

  16. Recherchez les attributions de rôles basées sur le principal.

    Vous devez également voir votre attribution de rôle basée sur un groupe.

    Capture d’écran de la page Contrôle d’accès (IAM) montrant les attributions de rôles avec le même rôle et dans la même étendue, mais pour différents principaux.

  17. Sélectionnez et supprimez les attributions de rôles basées sur le principal. Pour plus d’informations, consultez Supprimer des attributions de rôles Azure.

Solution 2 – Supprimer les attributions de rôles redondantes

Pour réduire le nombre d’attributions de rôles dans l’abonnement, supprimez les attributions de rôles redondantes. Suivez ces étapes pour voir où des attributions de rôles redondantes dans une étendue inférieure peuvent potentiellement être supprimées, puisqu’une attribution de rôle dans une étendue plus élevée accorde déjà l’accès.

  1. Connectez-vous au portail Azure et ouvrez l’Explorateur Azure Resource Graph.

  2. Sélectionnez Étendue et définissez l’étendue de la requête.

    En règle générale, vous définissez l’étendue sur Annuaire pour interroger l’intégralité de votre locataire, mais vous pouvez limiter l’étendue à des abonnements particuliers.

    Capture d’écran de l’Explorateur Azure Resource Graph montrant la sélection de l’étendue.

  3. Sélectionnez Définir l’étendue d’autorisation et définissez l’étendue d’autorisation sur Dans, au-dessus et en dessous de pour interroger toutes les ressources dans l’étendue spécifiée.

    Capture d’écran de l’explorateur Azure Resource Graph montrant le volet Définir l’étendue d’autorisation.

  4. Exécutez la requête suivante pour obtenir les attributions de rôles avec le même rôle et le même principal, mais dans différentes étendues.

    Cette requête vérifie les attributions de rôles actives et ne prend pas en compte les attributions de rôles éligibles dans Microsoft Entra Privileged Identity Management. Pour répertorier les attributions de rôles éligibles, vous pouvez utiliser le Centre d’administration Microsoft Entra, PowerShell ou l’API REST. Pour plus d’informations, consultez Get-AzRoleEligibilityScheduleInstance ou Instances de planification d’éligibilité de rôle – Liste pour l’étendue.

    Si vous utilisez des conditions d’attribution de rôle ou que vous déléguez la gestion des attributions de rôle avec des conditions, vous devez utiliser la requête Conditions. Sinon, utilisez la requête Par défaut.

    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
    

    Voici un exemple des résultats. La colonne count_ correspond au nombre d’étendues différentes pour les attributions de rôles avec le même rôle et le même principal. Le nombre est trié dans l’ordre décroissant.

    Capture d’écran de l’explorateur Azure Resource Graph montrant les attributions de rôles pour le même rôle et le même principal, mais dans différentes étendues.

    Colonne Description
    RoleDefinitionId ID du rôle actuellement affecté.
    RoleDefinitionName Nom du rôle actuellement affecté.
    PrincipalId ID du principal affecté au rôle.
    count_ Nombre d’étendues différentes pour les attributions de rôles avec le même rôle et le même principal.
    Étendues Étendues pour les attributions de rôles avec le même rôle et le même principal.
  5. Identifiez une ligne dans laquelle vous souhaitez supprimer les attributions de rôles redondantes.

  6. Dans une ligne, sélectionnez Afficher les détails pour ouvrir le volet Détails.

    Capture d’écran du volet Détails montrant les attributions de rôles pour le même rôle et le même principal, mais dans différentes étendues.

  7. Utilisez RoleDefinitionId, RoleDefinitionName et PrincipalId pour obtenir le rôle et l’ID de principal.

  8. Utilisez Étendues pour obtenir la liste des étendues pour le même rôle et le même principal.

  9. Déterminez l’étendue requise pour l’attribution de rôle. Les autres attributions de rôles peuvent être supprimées.

    Suivez les meilleures pratiques des privilèges minimums lors de la détermination des attributions de rôles pouvant être supprimées. L’attribution de rôle à l’étendue supérieure peut accorder plus d’accès au principal que ce qui est nécessaire. Dans ce cas, vous devez supprimer l’attribution de rôle avec l’étendue supérieure. Par exemple, un utilisateur n’a peut-être pas besoin d’une attribution de rôle Contributeur de machine virtuelle au niveau de l’étendue de l’abonnement lorsqu’une attribution de rôle Contributeur de machine virtuelle à une étendue de groupe de ressources inférieure accorde l’accès requis.

  10. Obtenez le nom du principal à partir de l’ID de principal.

  11. Ouvrez la page Contrôle d’accès (IAM) dans l’étendue d’une attribution de rôle que vous souhaitez supprimer.

  12. Sélectionnez l’onglet Attributions de rôles.

  13. Pour filtrer les attributions de rôles, sélectionnez le filtre Rôle, puis sélectionnez le nom du rôle.

  14. Recherchez le principal.

  15. Sélectionnez et supprimez l’attribution de rôle. Pour plus d’informations, consultez Supprimer des attributions de rôles Azure.

Solution 3 – Remplacer plusieurs attributions de rôles intégrées par une attribution de rôle personnalisé

Pour réduire le nombre d’attributions de rôles dans l’abonnement, remplacez plusieurs attributions de rôles intégrées par une attribution de rôle personnalisé unique. Suivez ces étapes pour identifier où plusieurs attributions de rôles intégrées peuvent potentiellement être remplacées.

  1. Connectez-vous au portail Azure et ouvrez l’Explorateur Azure Resource Graph.

  2. Sélectionnez Étendue et définissez l’étendue de la requête.

    En règle générale, vous définissez l’étendue sur Annuaire pour interroger l’intégralité de votre locataire, mais vous pouvez limiter l’étendue à des abonnements particuliers.

    Capture d’écran de l’Explorateur Azure Resource Graph montrant la sélection de l’étendue.

  3. Exécutez la requête suivante pour obtenir des attributions de rôles avec le même principal et la même étendue, mais avec des rôles intégrés différents.

    Cette requête vérifie les attributions de rôles actives et ne prend pas en compte les attributions de rôles éligibles dans Microsoft Entra Privileged Identity Management. Pour répertorier les attributions de rôles éligibles, vous pouvez utiliser le Centre d’administration Microsoft Entra, PowerShell ou l’API REST. Pour plus d’informations, consultez Get-AzRoleEligibilityScheduleInstance ou Instances de planification d’éligibilité de rôle – Liste pour l’étendue.

    Si vous utilisez des conditions d’attribution de rôle ou que vous déléguez la gestion des attributions de rôle avec des conditions, vous devez utiliser la requête Conditions. Sinon, utilisez la requête Par défaut.

    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
    

    Voici un exemple des résultats. La colonne count_ correspond au nombre d’attributions de rôles intégrées différentes avec le même principal et la même étendue. Le nombre est trié dans l’ordre décroissant.

    Capture d’écran de l’explorateur Azure Resource Graph montrant les attributions de rôles avec le même principal et la même étendue.

    Colonne Description
    PrincipalId ID du principal affecté aux rôles intégrés.
    Étendue Étendue des attributions de rôles intégrées.
    count_ Nombre d’attributions de rôles intégrées avec le même principal et la même étendue.
    AllRD ID et nom des rôles intégrés.
  4. Dans une ligne, sélectionnez Afficher les détails pour ouvrir le volet Détails.

    Capture d’écran du volet Détails montrant les attributions de rôles avec le même principal et la même étendue.

  5. Utilisez AllRD pour voir les rôles intégrés qui peuvent potentiellement être combinés dans un rôle personnalisé.

  6. Répertoriez les actions et les actions de données pour les rôles intégrés. Pour plus d’informations, consultez Répertorier les définitions de rôles Azure ou Rôles intégrés Azure

  7. Créez un rôle personnalisé qui inclut toutes les actions et actions de données en tant que rôles intégrés. Pour faciliter la création du rôle personnalisé, vous pouvez commencer par cloner l’un des rôles intégrés. Si vous souhaitez en savoir plus, consultez la rubrique Créer ou mettre à jour des rôles personnalisés Azure à l’aide du portail Azure.

  8. Obtenez le nom du principal à partir de l’ID de principal.

  9. Ouvrez la page Contrôle d’accès (IAM) dans la même étendue que les attributions de rôles.

  10. Affectez le nouveau rôle personnalisé au principal. Pour plus d’informations, consultez Attribuer des rôles Azure en utilisant le portail Azure.

    Vous pouvez maintenant supprimer les attributions de rôles intégrées.

  11. Dans la page Contrôle d’accès (IAM) dans la même étendue, sélectionnez l’onglet Attributions de rôles.

  12. Recherchez les attributions de rôle intégrées et de principal.

  13. Supprimez les attributions de rôles intégrées du principal. Pour plus d’informations, consultez Supprimer des attributions de rôles Azure.

Solution 4 – Rendre éligibles les attributions de rôles

Pour réduire le nombre d’attributions de rôles dans l’abonnement et que vous disposez de Microsoft Entra ID P2, rendez éligibles les attributions de rôles dans Microsoft Entra Privileged Identity Management au lieu d’une attribution définitive.

Solution 5 – Ajouter un abonnement supplémentaire

Ajoutez un abonnement supplémentaire.

Symptôme : Aucune nouvelle attribution de rôle ne peut être créée au niveau de l’étendue du groupe d’administration

Vous ne parvenez pas à attribuer un rôle dans l’étendue du groupe d’administration.

Cause

Azure prend en charge jusqu’à 500 attributions de rôle par groupe d’administration. Cette limite est différente de la limite d’attributions de rôle par abonnement.

Remarque

Cette limite de 500 attributions de rôle par groupe d’administration est fixe et ne peut pas être augmentée.

Solution

Essayez de réduire le nombre d’attributions de rôles dans le groupe d’administration. Pour connaître les options possibles, consultez Symptôme – Impossible de créer davantage d’attributions de rôles. Pour que les requêtes récupèrent des ressources au niveau du groupe d’administration, vous devez apporter la modification suivante aux requêtes :

Remplacer

| where id startswith "/subscriptions"

With

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

Symptôme - Plus aucune définition de rôle ne peut être créée

Lorsque vous essayez de créer un rôle personnalisé, vous recevez le message suivant :

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

Cause

Azure prend en charge jusqu’à 5 000 rôles personnalisés dans un répertoire. (Pour Microsoft Azure géré par 21Vianet, la limite est de 2 000 rôles personnalisés.)

Solution

Suivez ces étapes pour rechercher et supprimer des rôles personnalisés Azure inutilisés.

  1. Connectez-vous au portail Azure et ouvrez l’Explorateur Azure Resource Graph.

  2. Sélectionnez Étendue et définissez l’étendue sur Répertoire pour la requête.

    Capture d’écran de l’Explorateur Azure Resource Graph montrant la sélection de l’étendue.

  3. Exécutez la requête suivante pour obtenir tous les rôles personnalisés qui n’ont aucune attribution de rôle :

    Cette requête vérifie les attributions de rôles actives et ne prend pas en compte les attributions de rôles personnalisés éligibles dans Microsoft Entra Privileged Identity Management. Pour répertorier les attributions de rôles personnalisés éligibles, vous pouvez utiliser le Centre d’administration Microsoft Entra, PowerShell ou l’API REST. Pour plus d’informations, consultez Get-AzRoleEligibilityScheduleInstance ou Instances de planification d’éligibilité de rôle – Liste pour l’étendue.

    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
    

    Voici un exemple des résultats :

    Capture d’écran de l’explorateur Azure Resource Graph montrant des rôles personnalisés sans attributions de rôles.

    Colonne Description
    RoleDefinitionId ID du rôle personnalisé inutilisé.
    RoleDefinitionName Nom du rôle personnalisé inutilisé.
    Étendue Étendues attribuables pour le rôle personnalisé inutilisé.
  4. Ouvrez l’étendue (généralement l’abonnement), puis ouvrez la page Contrôle d’accès (IAM).

  5. Sélectionnez l’onglet Rôles pour voir la liste de tous les rôles intégrés et personnalisés.

  6. Dans le filtre Type, sélectionnez CustomRole pour voir vos rôles personnalisés.

  7. Sélectionnez les points de suspension (...) du rôle personnalisé à supprimer, puis sélectionnez Supprimer.

    Capture d’écran d’une liste de rôles personnalisés qui peuvent être sélectionnés pour être supprimés.

Étapes suivantes