Behandeln von Azure RBAC-Grenzwerten
In diesem Artikel werden einige gängige Lösungen beschrieben, wenn Sie die Grenzwerte der rollenbasierten Zugriffssteuerung in Azure (Azure RBAC) überschreiten.
Voraussetzungen
- Rolle Leser Rolle zum Ausführen von Azure Resource Graph-Abfragen.
- Rolle Administrator für rollenbasierte Zugriffssteuerung, um Rollenzuweisungen hinzuzufügen oder zu entfernen.
- Rolle Benutzerzugriffsadministrator, um Rollenzuweisungen hinzuzufügen, Rollenzuweisungen zu entfernen oder benutzerdefinierte Rollen zu löschen.
- Rolle Gruppenadministrator oder Benutzeradministrator, um Gruppen zu erstellen.
Hinweis
Die in diesem Artikel verwendeten Abfragen geben nur Rollenzuweisungen oder benutzerdefinierte Rollen zurück, die Sie lesen können. Wenn Sie beispielsweise nur über Berechtigungen zum Lesen von Rollenzuweisungen im Ressourcengruppenbereich verfügen, werden keine Rollenzuweisungen im Abonnementbereich zurückgegeben.
Symptom: Es können keine weiteren Rollenzuweisungen erstellt werden
Wenn Sie versuchen, eine Rolle zuzuweisen, erhalten Sie die folgende Fehlermeldung:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Ursache
Azure unterstützt pro Abonnement bis zu 4000 Rollenzuweisungen. Dieser Grenzwert schließt Rollenzuweisungen im Abonnement, in der Ressourcengruppe und im Ressourcenbereich, aber nicht im Verwaltungsgruppenbereich ein. Sie sollten versuchen, die Anzahl der Rollenzuweisungen im Abonnement zu verringern.
Hinweis
Der Grenzwert 4000 für Rollenzuweisungen pro Abonnement ist fest und kann nicht erhöht werden.
Um die Anzahl der Rollenzuweisungen zu ermitteln, können Sie das Diagramm auf der Seite „Zugriffssteuerung (IAM)“ im Azure-Portal anzeigen. Sie können auch die folgenden Azure PowerShell-Befehle verwenden:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Lösung 1 : Ersetzen von prinzipalbasierten Rollenzuweisungen durch gruppenbasierte Rollenzuweisungen
Um die Anzahl der Rollenzuweisungen im Abonnement zu reduzieren, fügen Sie Prinzipale (Benutzer, Dienstprinzipale und verwaltete Identitäten) zu Gruppen hinzu, und weisen Sie stattdessen den Gruppen Rollen zu. Führen Sie die folgenden Schritte aus, um zu ermitteln, wo mehrere Rollenzuweisungen für Prinzipale durch eine einzelne Rollenzuweisung für eine Gruppe ersetzt werden können.
Melden Sie sich beim Azure-Portal an, und öffnen Sie den Azure Resource Graph-Explorer.
Wählen Sie Bereich aus, und legen Sie den Bereich für die Abfrage fest.
In der Regel legen Sie den Bereich auf Verzeichnis fest, um Ihren gesamten Mandanten abzufragen. Der Bereich kann allerdings auch auf bestimmte Abonnements beschränkt werden.
Wählen Sie Autorisierungsbereich festlegen aus, und legen Sie den Autorisierungsbereich auf Bei, oberhalb oder unterhalb fest, um alle Ressourcen im angegebenen Bereich abzufragen.
Führen Sie die folgende Abfrage aus, um die Rollenzuweisungen mit derselben Rolle und im selben Bereich abzurufen, jedoch für unterschiedliche Prinzipale.
Diese Abfrage überprüft aktive Rollenzuweisungen und berücksichtigt keine berechtigten Rollenzuweisungen in Microsoft Entra Privileged Identity Management. Zum Auflisten berechtigter Rollenzuweisungen können Sie Microsoft Entra Admin Center, PowerShell oder die REST-API verwenden. Weitere Informationen finden Sie unter Get-AzRoleEligibilityScheduleInstance oder Instanzen eines Rollenberechtigungszeitplans – Liste für Bereich.
Wenn Sie Rollenzuweisungsbedingungen oder das Delegieren der Rollenzuweisungsverwaltung mit Bedingungen verwenden, müssen Sie die Bedingungsabfrage verwenden. Verwenden Sie andernfalls die Standardabfrage.
- Standard
- Conditions (MSBuild-Bedingungen)
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
Hier sehen Sie ein Beispiel der Ergebnisse: Die Spalte count_ ist die Anzahl der Prinzipale, denen dieselbe Rolle im selben Bereich zugewiesen wurde. Die Anzahl wird in absteigender Reihenfolge sortiert.
Identifizieren Sie eine Zeile, in der Sie die mehreren Rollenzuweisungen durch eine einzelne Rollenzuweisung für eine Gruppe ersetzen möchten.
Wählen Sie in der Zeile Details anzeigen aus, um den Bereich Details zu öffnen.
Spalte Beschreibung RoleDefinitionId ID der aktuell zugewiesenen Rolle. Bereich Bereich für die Rollenzuweisung, bei der es sich um ein Abonnement, eine Ressourcengruppe oder eine Ressource handelt. RoleDefinitionName Name der aktuell zugewiesenen Rolle. count_ Anzahl der Prinzipale, denen dieselbe Rolle im selben Bereich zugewiesen ist. AllPrincipals Liste der Prinzipal-IDs, denen dieselbe Rolle im selben Bereich zugewiesen wurden. Verwenden Sie RoleDefinitionId, RoleDefinitionNameund Scope, um die Rolle und den Bereich abzurufen.
Verwenden Sie AllPrincipals, um die Liste der Prinzipal-IDs mit derselben Rollenzuweisung abzurufen.
Erstellen Sie eine Microsoft Entra-Gruppe. Weitere Informationen finden Sie unter Verwalten von Microsoft Entra-Gruppen und -Gruppenmitgliedschaften.
Fügen Sie die Prinzipale aus AllPrincipals zur Gruppe hinzu.
Informationen zum Massenhinzufügen von Prinzipalen finden Sie unter Hinzufügen von Gruppenmitgliedern zu Microsoft Entra ID per Massenvorgang.
Weisen Sie die Rolle der Gruppe zu, die Sie im selben Bereich erstellt haben. Weitere Informationen finden Sie unter Weisen Sie Azure-Rollen über das Azure-Portal zu.
Jetzt können Sie die prinzipalbasierten Rollenzuweisungen suchen und entfernen.
Rufen Sie die Prinzipalnamen aus den Prinzipal-IDs ab.
- Informationen zur Verwendung des Azure-Portals finden Sie unter Hinzufügen oder Aktualisieren von Profilinformationen und Einstellungen eines Benutzers.
- Informationen zur Verwendung von PowerShell finden Sie unter Get-MgUser.
- Informationen zur Verwendung der Azure CLI, finden Sie unter az ad user show.
Öffnen Sie die Seite Zugriffssteuerung (IAM) Seite im selben Bereich wie die Rollenzuweisungen.
Klicken Sie auf die Registerkarte Rollenzuweisungen.
Wählen Sie den Filter Rolle und dann den Rollennamen aus, um die Rollenzuweisungen zu filtern.
Finden Sie die prinzipalbasierten Rollenzuweisungen.
Außerdem sollte Ihre gruppenbasierte Rollenzuweisung angezeigt werden.
Wählen Sie die prinzipalbasierten Rollenzuweisungen aus, und entfernen Sie sie. Weitere Informationen finden Sie unter Entfernen von Azure-Rollenzuweisungen.
Lösung 2: Entfernen redundanter Rollenzuweisungen
Entfernen Sie redundante Rollenzuweisungen, um die Anzahl der Rollenzuweisungen im Abonnement zu verringern. Führen Sie diese Schritte aus, um zu ermitteln, wo redundante Rollenzuweisungen in einem niedrigeren Bereich möglicherweise entfernt werden können, da eine Rollenzuweisung in einem höheren Bereich bereits Zugriff gewährt.
Melden Sie sich beim Azure-Portal an, und öffnen Sie den Azure Resource Graph-Explorer.
Wählen Sie Bereich aus, und legen Sie den Bereich für die Abfrage fest.
In der Regel legen Sie den Bereich auf Verzeichnis fest, um Ihren gesamten Mandanten abzufragen. Der Bereich kann allerdings auch auf bestimmte Abonnements beschränkt werden.
Wählen Sie Autorisierungsbereich festlegen aus, und legen Sie den Autorisierungsbereich auf Bei, oberhalb oder unterhalb fest, um alle Ressourcen im angegebenen Bereich abzufragen.
Führen Sie die folgende Abfrage aus, um die Rollenzuweisungen mit derselben Rolle und demselben Prinzipal abzurufen, jedoch für unterschiedliche Bereiche.
Diese Abfrage überprüft aktive Rollenzuweisungen und berücksichtigt keine berechtigten Rollenzuweisungen in Microsoft Entra Privileged Identity Management. Zum Auflisten berechtigter Rollenzuweisungen können Sie Microsoft Entra Admin Center, PowerShell oder die REST-API verwenden. Weitere Informationen finden Sie unter Get-AzRoleEligibilityScheduleInstance oder Instanzen eines Rollenberechtigungszeitplans – Liste für Bereich.
Wenn Sie Rollenzuweisungsbedingungen oder das Delegieren der Rollenzuweisungsverwaltung mit Bedingungen verwenden, müssen Sie die Bedingungsabfrage verwenden. Verwenden Sie andernfalls die Standardabfrage.
- Standard
- Conditions (MSBuild-Bedingungen)
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
Hier sehen Sie ein Beispiel der Ergebnisse: Die Spalte count_ ist die Anzahl der verschiedenen Bereiche für Rollenzuweisungen mit derselben Rolle und demselben Prinzipal. Die Anzahl wird in absteigender Reihenfolge sortiert.
Spalte Beschreibung RoleDefinitionId ID der aktuell zugewiesenen Rolle. RoleDefinitionName Name der aktuell zugewiesenen Rolle. PrincipalId Die ID des Prinzipals, dem die Rolle zugewiesen wurde. count_ Anzahl der verschiedenen Bereiche für Rollenzuweisungen mit derselben Rolle und demselben Prinzipal. Bereiche Bereiche für Rollenzuweisungen mit derselben Rolle und demselben Prinzipal. Identifizieren Sie eine Zeile, in der Sie redundante Rollenzuweisungen entfernen möchten.
Wählen Sie in einer Zeile Details anzeigen aus, um den Bereich Details zu öffnen.
Verwenden Sie RoleDefinitionId, RoleDefinitionNameund PrincipalId, um die Rolle und die Prinzipal-ID abzurufen.
Verwenden Sie Scopes, um die Liste der Bereiche für dieselbe Rolle und denselben Prinzipal abzurufen.
Bestimmen Sie, welcher Bereich für die Rollenzuweisung erforderlich ist. Die anderen Rollenzuweisungen können entfernt werden.
Sie sollten bewährten Methoden der geringsten Rechte folgen, wenn Sie bestimmen, welche Rollenzuweisungen entfernt werden können. Die Rollenzuweisung im höheren Bereich kann mehr Zugriff auf den Prinzipal gewähren als erforderlich. In diesem Fall sollten Sie die Rollenzuweisung mit dem höheren Bereich entfernen. Benutzer benötigen z. B. möglicherweise keine Zuweisung der Rolle „Mitwirkender“ für VMs im Abonnementbereich, wenn die Zuweisung der Rolle „Mitwirkender“ für VMs in einem niedrigeren Ressourcengruppenbereich den erforderlichen Zugriff gewährt.
Rufen Sie den Prinzipalnamen aus der Prinzipal-ID ab.
- Informationen zur Verwendung des Azure-Portals finden Sie unter Hinzufügen oder Aktualisieren von Profilinformationen und Einstellungen eines Benutzers.
- Informationen zur Verwendung von PowerShell finden Sie unter Get-MgUser.
- Informationen zur Verwendung der Azure CLI, finden Sie unter az ad user show.
Öffnen Sie die Seite Zugriffssteuerung (IAM) im Bereich für eine Rollenzuweisung, die Sie entfernen möchten.
Klicken Sie auf die Registerkarte Rollenzuweisungen.
Wählen Sie den Filter Rolle und dann den Rollennamen aus, um die Rollenzuweisungen zu filtern.
Suchen Sie den Prinzipal.
Wählen Sie die Rollenzuweisung aus, und entfernen Sie sie. Weitere Informationen finden Sie unter Entfernen von Azure-Rollenzuweisungen.
Lösung 3: Ersetzen mehrerer integrierter Rollenzuweisungen durch eine benutzerdefinierte Rollenzuweisung
Ersetzen Sie mehrere integrierte Rollenzuweisungen durch eine einzelne benutzerdefinierte Rollenzuweisung, um die Anzahl der Rollenzuweisungen im Abonnement zu verringern. Führen Sie diese Schritte aus, um zu ermitteln, wo mehrere integrierte Rollenzuweisungen möglicherweise ersetzt werden können.
Melden Sie sich beim Azure-Portal an, und öffnen Sie den Azure Resource Graph-Explorer.
Wählen Sie Bereich aus, und legen Sie den Bereich für die Abfrage fest.
In der Regel legen Sie den Bereich auf Verzeichnis fest, um Ihren gesamten Mandanten abzufragen. Der Bereich kann allerdings auch auf bestimmte Abonnements beschränkt werden.
Führen Sie die folgende Abfrage aus, um Rollenzuweisungen mit demselben Prinzipal und Bereich abzurufen, jedoch für unterschiedliche integrierte Rollen.
Diese Abfrage überprüft aktive Rollenzuweisungen und berücksichtigt keine berechtigten Rollenzuweisungen in Microsoft Entra Privileged Identity Management. Zum Auflisten berechtigter Rollenzuweisungen können Sie Microsoft Entra Admin Center, PowerShell oder die REST-API verwenden. Weitere Informationen finden Sie unter Get-AzRoleEligibilityScheduleInstance oder Instanzen eines Rollenberechtigungszeitplans – Liste für Bereich.
Wenn Sie Rollenzuweisungsbedingungen oder das Delegieren der Rollenzuweisungsverwaltung mit Bedingungen verwenden, müssen Sie die Bedingungsabfrage verwenden. Verwenden Sie andernfalls die Standardabfrage.
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
Hier sehen Sie ein Beispiel der Ergebnisse: Die Spalte count_ ist die Anzahl der verschiedenen integrierten Rollenzuweisungen mit demselben Prinzipal und demselben Bereich. Die Anzahl wird in absteigender Reihenfolge sortiert.
Spalte Beschreibung PrincipalId Die ID des Prinzipals, dem die integrierten Rollen zugewiesen sind. Bereich Bereich für integrierte Rollenzuweisungen. count_ Anzahl der integrierten Rollenzuweisungen mit demselben Prinzipal und demselben Bereich. AllRD ID und Name integrierter Rollen. Wählen Sie in einer Zeile Details anzeigen aus, um den Bereich Details zu öffnen.
Verwenden Sie AllRD, um die integrierten Rollen anzuzeigen, die potenziell in einer benutzerdefinierten Rolle kombiniert werden können.
Listen Sie die Aktionen und Datenaktionen für die integrierten Rollen auf. Weitere Informationen finden Sie unter Auflisten von Azure-Rollendefinitionen oder Integrierte Azure-Rollen.
Erstellen Sie eine benutzerdefinierte Rolle, die alle Aktionen und Datenaktionen als integrierte Rollen enthält. Um die Erstellung der benutzerdefinierten Rolle zu erleichtern, können Sie zunächst eine der integrierten Rollen klonen. Weitere Informationen finden Sie unter Erstellen oder Aktualisieren von benutzerdefinierten Azure-Rollen über das Azure-Portal.
Rufen Sie den Prinzipalnamen aus der Prinzipal-ID ab.
- Informationen zur Verwendung des Azure-Portals finden Sie unter Hinzufügen oder Aktualisieren von Profilinformationen und Einstellungen eines Benutzers.
- Informationen zur Verwendung von PowerShell finden Sie unter Get-MgUser.
- Informationen zur Verwendung der Azure CLI, finden Sie unter az ad user show.
Öffnen Sie die Seite Zugriffssteuerung (IAM) Seite im selben Bereich wie die Rollenzuweisungen.
Weisen Sie dem Prinzipal die neue benutzerdefinierte Rolle zu. Weitere Informationen finden Sie unter Weisen Sie Azure-Rollen über das Azure-Portal zu.
Jetzt können Sie die Zuweisung der integrierten Rollen entfernen.
Wählen Sie auf der Seite Zugriffssteuerung (IAM) im selben Bereich die Registerkarte Rollenzuweisungen aus.
Finden Sie die prinzipalbasierten und integrierten Rollenzuweisungen.
Entfernen Sie die Zuweisung der integrierten Rollen vom Prinzipal. Weitere Informationen finden Sie unter Entfernen von Azure-Rollenzuweisungen.
Lösung 4: Rollenzuweisungen mit Berechtigungen versehen
Um die Anzahl der Rollenzuweisungen im Abonnement zu reduzieren, wenn Sie Microsoft Entra ID P2 haben, gewähren Sie Rollenzuweisungen in Zuweisen von Azure-Ressourcenrollen in Privileged Identity Management Berechtigungen, anstatt sie permanent zuzuweisen.
Lösung 5: Hinzufügen eines zusätzlichen Abonnements
Fügen Sie ein zusätzliches Abonnement hinzu.
Symptom: Im Verwaltungsgruppenbereich können keine weiteren Rollenzuweisungen erstellt werden
Im Verwaltungsgruppenbereich können keine Rollen zugewiesen werden.
Ursache
Azure unterstützt pro Verwaltungsgruppe bis zu 500 Rollenzuweisungen. Dieser Grenzwert unterscheidet sich vom Grenzwert für Rollenzuweisungen pro Abonnement.
Hinweis
Das Rollenzuweisungslimit 500 pro Verwaltungsgruppe ist fest und kann nicht erweitert werden.
Lösung
Versuchen Sie, die Anzahl der Rollenzuweisungen in der Verwaltungsgruppe zu verringern. Mögliche Optionen finden Sie unter Symptom: Es können keine weiteren Rollenzuweisungen erstellt werden. Damit die Abfragen Ressourcen auf Verwaltungsgruppenebene abrufen können, müssen Sie die folgenden Änderungen an den Abfragen vornehmen:
Ersetzen von
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Symptom: Es können keine weiteren Rollendefinitionen erstellt werden
Wenn Sie versuchen, eine neue benutzerdefinierte Rolle zu erstellen, wird die folgende Meldung angezeigt:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Ursache
Azure unterstützt bis zu 5.000 benutzerdefinierte Rollen in einem Verzeichnis. (Für Microsoft Azure, betrieben von 21Vianet, beträgt der Grenzwert 2000 benutzerdefinierte Rollen.)
Lösung
Führen Sie die folgenden Schritte aus, um nicht verwendete benutzerdefinierte Azure-Rollen zu suchen und zu löschen.
Melden Sie sich beim Azure-Portal an, und öffnen Sie den Azure Resource Graph-Explorer.
Wählen Sie Bereich aus, und legen Sie den Bereich für die Abfrage auf Verzeichnis fest.
Führen Sie die folgende Abfrage aus, um alle benutzerdefinierten Rollen abzurufen, für die keine Rollenzuweisungen vorhanden sind:
Diese Abfrage überprüft aktive Rollenzuweisungen und berücksichtigt keine berechtigten benutzerdefinierten Rollenzuweisungen in Microsoft Entra Privileged Identity Management. Zum Auflisten berechtigter benutzerdefinierter Rollenzuweisungen können Sie Microsoft Entra Admin Center, PowerShell oder die REST-API verwenden. Weitere Informationen finden Sie unter Get-AzRoleEligibilityScheduleInstance oder Instanzen eines Rollenberechtigungszeitplans – Liste für Bereich.
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
Im Folgenden sehen Sie ein Beispiel für die Ergebnisse:
Spalte Beschreibung RoleDefinitionId ID der nicht verwendeten benutzerdefinierten Rolle. RoleDefinitionName Name der nicht verwendeten benutzerdefinierten Rolle. Bereich Zuweisbare Bereiche für die nicht verwendete benutzerdefinierte Rolle. Öffnen Sie den Bereich (in der Regel Abonnement), und öffnen Sie dann die Seite Zugriffssteuerung (IAM).
Wählen Sie die Registerkarte Rollen aus, um eine Liste aller integrierten und benutzerdefinierten Rollen anzuzeigen.
Wählen Sie im Filter Typ die Option CustomRole aus, um nur Ihre benutzerdefinierten Rollen anzuzeigen.
Wählen Sie die Auslassungspunkte (…) für die benutzerdefinierte Rolle, die Sie löschen möchten, und anschließend Löschen aus.