Felsöka Azure RBAC-gränser
I den här artikeln beskrivs några vanliga lösningar när du överskrider gränserna för rollbaserad åtkomstkontroll i Azure (Azure RBAC).
Förutsättningar
- Läsarroll för att köra Azure Resource Graph-frågor.
- Rollbaserad administratörsroll för åtkomstkontroll för att lägga till eller ta bort rolltilldelningar.
- Rollen Administratör för användaråtkomst för att lägga till rolltilldelningar, ta bort rolltilldelningar eller ta bort anpassade roller.
- Gruppadministratörs - eller användaradministratörsroll för att skapa grupper.
Kommentar
De frågor som används i den här artikeln returnerar endast rolltilldelningar eller anpassade roller som du har behörighet att läsa. Om du till exempel bara har behörighet att läsa rolltilldelningar i resursgruppens omfång returneras inte rolltilldelningar i prenumerationsomfånget.
Symptom – Inga fler rolltilldelningar kan skapas
När du försöker tilldela en roll får du följande felmeddelande:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Orsak
Azure Support upp till 4 000 rolltilldelningar per prenumeration. Den här gränsen omfattar rolltilldelningar för prenumerations-, resursgrupps- och resursomfången, men inte hanteringsgruppsomfånget. Berättigade rolltilldelningar och rolltilldelningar som schemalagts i framtiden räknas inte mot den här gränsen. Du bör försöka minska antalet rolltilldelningar i prenumerationen.
Kommentar
Gränsen på 4 000 rolltilldelningar per prenumeration är fast och kan inte ökas.
Du kan se antalet rolltilldelningar i diagrammet på sidan Åtkomstkontroll (IAM) i Azure-portalen. Du kan också använda följande Azure PowerShell-kommandon:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Lösning 1 – Ersätt huvudbaserade rolltilldelningar med gruppbaserade rolltilldelningar
Om du vill minska antalet rolltilldelningar i prenumerationen lägger du till huvudnamn (användare, tjänstens huvudnamn och hanterade identiteter) i grupper och tilldelar roller till grupperna i stället. Följ de här stegen för att identifiera var flera rolltilldelningar för huvudnamn kan ersättas med en enskild rolltilldelning för en grupp.
Logga in på Azure Portal och öppna Azure Resource Graph Explorer.
Välj Omfång och ange omfånget för frågan.
Du ställer vanligtvis in omfånget till Katalog för att fråga hela klientorganisationen, men du kan begränsa omfånget till vissa prenumerationer.
Välj Ange auktoriseringsomfång och ange auktoriseringsomfånget till At, ovan och nedan för att fråga alla resurser i det angivna omfånget.
Kör följande fråga för att hämta rolltilldelningarna med samma roll och i samma omfång, men för olika huvudnamn.
Den här frågan kontrollerar aktiva rolltilldelningar och överväger inte berättigade rolltilldelningar i Microsoft Entra Privileged Identity Management. Om du vill visa en lista över berättigade rolltilldelningar kan du använda administrationscentret för Microsoft Entra, PowerShell eller REST API. Mer information finns i Get-AzRoleEligibilityScheduleInstance eller Rollberättigande schemainstanser – lista för omfång.
Om du använder villkor för rolltilldelning eller delegerar rolltilldelningshantering med villkor bör du använda frågan Villkor. Annars använder du standardfrågan.
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
Följande visar ett exempel på resultatet. Kolumnen count_ är antalet huvudnamn som tilldelats samma roll och i samma omfång. Antalet sorteras i fallande ordning.
Identifiera en rad där du vill ersätta flera rolltilldelningar med en enskild rolltilldelning för en grupp.
På raden väljer du Visa information för att öppna fönstret Information .
Kolumn beskrivning RoleDefinitionId ID för den tilldelade rollen. Omfattning Omfång för rolltilldelningen, som ska vara en prenumeration, resursgrupp eller resurs. RoleDefinitionName Namnet på den tilldelade rollen. antal_ Antal huvudkonton som tilldelats samma roll och i samma omfång. AllPrincipals Lista över huvud-ID:t som tilldelats samma roll och i samma omfång. Använd RoleDefinitionId, RoleDefinitionName och Omfång för att hämta rollen och omfånget.
Använd AllPrincipals för att hämta listan över huvud-ID:t med samma rolltilldelning.
Skapa en Microsoft Entra-grupp. Mer information finns i Hantera Microsoft Entra-grupper och gruppmedlemskap.
Lägg till huvudnamnen från AllPrincipals i gruppen.
Information om hur du lägger till huvudkonton i bulk finns i Masstillägg av gruppmedlemmar i Microsoft Entra-ID.
Tilldela rollen till den grupp som du skapade i samma omfång. Mer information finns i Tilldela Azure-roller med Azure-portalen.
Nu kan du hitta och ta bort de huvudnamnsbaserade rolltilldelningarna.
Hämta huvudnamnen från huvud-ID:t.
- Information om hur du använder Azure Portal finns i Lägga till eller uppdatera en användares profilinformation och inställningar.
- Information om hur du använder PowerShell finns i Get-MgUser.
- Om du vill använda Azure, CLI, se az ad user show.
Öppna sidan Åtkomstkontroll (IAM) i samma omfång som rolltilldelningarna.
Välj fliken Rolltilldelningar.
Om du vill filtrera rolltilldelningarna väljer du filtret Roll och väljer sedan rollnamnet.
Hitta de huvudbaserade rolltilldelningarna.
Du bör också se din gruppbaserade rolltilldelning.
Välj och ta bort de huvudnamnsbaserade rolltilldelningarna. Mer information finns i Ta bort Azure-rolltilldelningar.
Lösning 2 – Ta bort redundanta rolltilldelningar
Om du vill minska antalet rolltilldelningar i prenumerationen tar du bort redundanta rolltilldelningar. Följ de här stegen för att identifiera var redundanta rolltilldelningar med ett lägre omfång potentiellt kan tas bort eftersom en rolltilldelning i ett högre omfång redan ger åtkomst.
Logga in på Azure Portal och öppna Azure Resource Graph Explorer.
Välj Omfång och ange omfånget för frågan.
Du ställer vanligtvis in omfånget till Katalog för att fråga hela klientorganisationen, men du kan begränsa omfånget till vissa prenumerationer.
Välj Ange auktoriseringsomfång och ange auktoriseringsomfånget till At, ovan och nedan för att fråga alla resurser i det angivna omfånget.
Kör följande fråga för att hämta rolltilldelningarna med samma roll och samma huvudnamn, men med olika omfång.
Den här frågan kontrollerar aktiva rolltilldelningar och överväger inte berättigade rolltilldelningar i Microsoft Entra Privileged Identity Management. Om du vill visa en lista över berättigade rolltilldelningar kan du använda administrationscentret för Microsoft Entra, PowerShell eller REST API. Mer information finns i Get-AzRoleEligibilityScheduleInstance eller Rollberättigande schemainstanser – lista för omfång.
Om du använder villkor för rolltilldelning eller delegerar rolltilldelningshantering med villkor bör du använda frågan Villkor. Annars använder du standardfrågan.
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
Följande visar ett exempel på resultatet. Kolumnen count_ är antalet olika omfång för rolltilldelningar med samma roll och samma huvudnamn. Antalet sorteras i fallande ordning.
Kolumn beskrivning RoleDefinitionId ID för den tilldelade rollen. RoleDefinitionName Namnet på den tilldelade rollen. PrincipalId ID för det huvudnamn som tilldelats rollen. antal_ Antal olika omfång för rolltilldelningar med samma roll och samma huvudnamn. Omfattningar Omfång för rolltilldelningar med samma roll och samma huvudnamn. Identifiera en rad där du vill ta bort redundanta rolltilldelningar.
På en rad väljer du Visa information för att öppna fönstret Information .
Använd RoleDefinitionId, RoleDefinitionName och PrincipalId för att hämta roll- och huvudnamns-ID:t.
Använd Omfång för att hämta listan över omfång för samma roll och samma huvudnamn.
Avgör vilket omfång som krävs för rolltilldelningen. De andra rolltilldelningarna kan tas bort.
Du bör följa bästa praxis med minsta möjliga behörighet när du avgör vilka rolltilldelningar som kan tas bort. Rolltilldelningen i det högre omfånget kan ge mer åtkomst till huvudkontot än vad som behövs. I så fall bör du ta bort rolltilldelningen med det högre omfånget. En användare kanske till exempel inte behöver en rolltilldelning för virtuell datordeltagare i prenumerationsomfånget när en rolltilldelning för virtuell datordeltagare i ett lägre resursgruppsomfång ger den åtkomst som krävs.
Hämta huvudnamnet från huvudnamns-ID:t.
- Information om hur du använder Azure Portal finns i Lägga till eller uppdatera en användares profilinformation och inställningar.
- Information om hur du använder PowerShell finns i Get-MgUser.
- Om du vill använda Azure, CLI, se az ad user show.
Öppna sidan Åtkomstkontroll (IAM) i omfånget för en rolltilldelning som du vill ta bort.
Välj fliken Rolltilldelningar.
Om du vill filtrera rolltilldelningarna väljer du filtret Roll och väljer sedan rollnamnet.
Hitta huvudnamnet.
Välj och ta bort rolltilldelningen. Mer information finns i Ta bort Azure-rolltilldelningar.
Lösning 3 – Ersätt flera inbyggda rolltilldelningar med en anpassad rolltilldelning
Om du vill minska antalet rolltilldelningar i prenumerationen ersätter du flera inbyggda rolltilldelningar med en enda anpassad rolltilldelning. Följ de här stegen för att identifiera var flera inbyggda rolltilldelningar potentiellt kan ersättas.
Logga in på Azure Portal och öppna Azure Resource Graph Explorer.
Välj Omfång och ange omfånget för frågan.
Du ställer vanligtvis in omfånget till Katalog för att fråga hela klientorganisationen, men du kan begränsa omfånget till vissa prenumerationer.
Kör följande fråga för att hämta rolltilldelningar med samma huvudnamn och samma omfång, men med olika inbyggda roller.
Den här frågan kontrollerar aktiva rolltilldelningar och överväger inte berättigade rolltilldelningar i Microsoft Entra Privileged Identity Management. Om du vill visa en lista över berättigade rolltilldelningar kan du använda administrationscentret för Microsoft Entra, PowerShell eller REST API. Mer information finns i Get-AzRoleEligibilityScheduleInstance eller Rollberättigande schemainstanser – lista för omfång.
Om du använder villkor för rolltilldelning eller delegerar rolltilldelningshantering med villkor bör du använda frågan Villkor. Annars använder du standardfrågan.
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
Följande visar ett exempel på resultatet. Kolumnen count_ är antalet olika inbyggda rolltilldelningar med samma huvudnamn och samma omfång. Antalet sorteras i fallande ordning.
Kolumn beskrivning PrincipalId ID för det huvudnamn som tilldelats de inbyggda rollerna. Omfattning Omfång för inbyggda rolltilldelningar. antal_ Antal inbyggda rolltilldelningar med samma huvudnamn och samma omfång. AllRD ID och namn på inbyggda roller. På en rad väljer du Visa information för att öppna fönstret Information .
Använd AllRD för att se de inbyggda rollerna som potentiellt kan kombineras till en anpassad roll.
Visa en lista över åtgärder och dataåtgärder för de inbyggda rollerna. Mer information finns i Lista azure-rolldefinitioner eller inbyggda Azure-roller
Skapa en anpassad roll som innehåller alla åtgärder och dataåtgärder som inbyggda roller. För att göra det enklare att skapa den anpassade rollen kan du börja med att klona en av de inbyggda rollerna. Mer information finns i Skapa eller uppdatera anpassade Azure-roller med hjälp av Azure Portal.
Hämta huvudnamnet från huvudnamns-ID:t.
- Information om hur du använder Azure Portal finns i Lägga till eller uppdatera en användares profilinformation och inställningar.
- Information om hur du använder PowerShell finns i Get-MgUser.
- Om du vill använda Azure, CLI, se az ad user show.
Öppna sidan Åtkomstkontroll (IAM) i samma omfång som rolltilldelningarna.
Tilldela den nya anpassade rollen till huvudnamnet. Mer information finns i Tilldela Azure-roller med Azure-portalen.
Nu kan du ta bort de inbyggda rolltilldelningarna.
På sidan Åtkomstkontroll (IAM) i samma omfång väljer du fliken Rolltilldelningar .
Hitta huvudnamn och inbyggda rolltilldelningar.
Ta bort de inbyggda rolltilldelningarna från huvudkontot. Mer information finns i Ta bort Azure-rolltilldelningar.
Lösning 4 – Gör rolltilldelningar berättigade
Om du vill minska antalet rolltilldelningar i prenumerationen och du har Microsoft Entra ID P2 gör du rolltilldelningar berättigade i Microsoft Entra Privileged Identity Management i stället för permanent tilldelade.
Lösning 5 – Lägga till ytterligare en prenumeration
Lägg till ytterligare en prenumeration.
Symptom – Inga fler rolltilldelningar kan skapas i hanteringsgruppens omfång
Du kan inte tilldela en roll i hanteringsgruppens omfång.
Orsak
Azure Support upp till 500 rolltilldelningar per hanteringsgrupp. Den här gränsen skiljer sig från rolltilldelningsgränsen per prenumeration.
Kommentar
Gränsen på 500 rolltilldelningar per hanteringsgrupp är fast och kan inte ökas.
Lösning
Försök att minska antalet rolltilldelningar i hanteringsgruppen. Möjliga alternativ finns i Symptom – Det går inte att skapa fler rolltilldelningar. För att frågorna ska kunna hämta resurser på hanteringsgruppsnivå måste du göra följande ändring i frågorna:
Replace
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Symptom – Inga fler rolldefinitioner kan skapas
När du försöker skapa en ny anpassad roll får du följande meddelande:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Orsak
Azure Support har upp till 5 000 anpassade roller i en katalog. (För Microsoft Azure som drivs av 21Vianet är gränsen 2 000 anpassade roller.)
Lösning
Följ de här stegen för att hitta och ta bort oanvända anpassade Azure-roller.
Logga in på Azure Portal och öppna Azure Resource Graph Explorer.
Välj Omfång och ange omfånget till Katalog för frågan.
Kör följande fråga för att hämta alla anpassade roller som inte har några rolltilldelningar:
Den här frågan kontrollerar aktiva rolltilldelningar och tar inte hänsyn till berättigade anpassade rolltilldelningar i Microsoft Entra Privileged Identity Management. Om du vill visa en lista över berättigade anpassade rolltilldelningar kan du använda administrationscentret för Microsoft Entra, PowerShell eller REST API. Mer information finns i Get-AzRoleEligibilityScheduleInstance eller Rollberättigande schemainstanser – lista för omfång.
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
Följande visar ett exempel på resultatet:
Kolumn beskrivning RoleDefinitionId ID för den oanvända anpassade rollen. RoleDefinitionName Namnet på den oanvända anpassade rollen. Omfattning Tilldelningsbara omfång för den oanvända anpassade rollen. Öppna omfånget (vanligtvis prenumeration) och öppna sedan sidan Åtkomstkontroll (IAM).
Välj fliken Roller för att visa en lista med alla inbyggda och anpassade roller.
I filtret Typ väljer du CustomRole för att bara se dina anpassade roller.
Välj ellipsen (...) för den anpassade roll som du vill ta bort och välj sedan Ta bort.