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

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 stöder 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. 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.

  1. Logga in på Azure-portalen och öppna Azure Resource Graph Explorer.

  2. 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.

    Skärmbild av Azure Resource Graph Explorer som visar omfångsval.

  3. 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.

    Skärmbild av Azure Resource Graph Explorer som visar fönstret Ange auktoriseringsomfång.

  4. 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.

    Skärmbild av Azure Resource Graph Explorer som visar rolltilldelningar med samma roll och i samma omfång, men för olika huvudnamn.

  5. Identifiera en rad där du vill ersätta flera rolltilldelningar med en enskild rolltilldelning för en grupp.

  6. På raden väljer du Visa information för att öppna fönstret Information .

    Skärmbild av informationsfönstret som visar rolltilldelningar med samma roll och i samma omfång, men för olika huvudnamn.

    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.
  7. Använd RoleDefinitionId, RoleDefinitionName och Omfång för att hämta rollen och omfånget.

  8. Använd AllPrincipals för att hämta listan över huvud-ID:t med samma rolltilldelning.

  9. Skapa en Microsoft Entra-grupp. Mer information finns i Hantera Microsoft Entra-grupper och gruppmedlemskap.

  10. 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.

  11. 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.

  12. Hämta huvudnamnen från huvud-ID:t.

  13. Öppna sidan Åtkomstkontroll (IAM) i samma omfång som rolltilldelningarna.

  14. Välj fliken Rolltilldelningar.

  15. Om du vill filtrera rolltilldelningarna väljer du filtret Roll och väljer sedan rollnamnet.

  16. Hitta de huvudbaserade rolltilldelningarna.

    Du bör också se din gruppbaserade rolltilldelning.

    Skärmbild av sidan Åtkomstkontroll (IAM) som visar rolltilldelningar med samma roll och i samma omfång, men för olika huvudnamn.

  17. 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.

  1. Logga in på Azure-portalen och öppna Azure Resource Graph Explorer.

  2. 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.

    Skärmbild av Azure Resource Graph Explorer som visar omfångsval.

  3. 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.

    Skärmbild av Azure Resource Graph Explorer som visar fönstret Ange auktoriseringsomfång.

  4. 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.

    Skärmbild av Azure Resource Graph Explorer som visar rolltilldelningar för samma roll och samma huvudnamn, men med olika omfång.

    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.
  5. Identifiera en rad där du vill ta bort redundanta rolltilldelningar.

  6. På en rad väljer du Visa information för att öppna fönstret Information .

    Skärmbild av informationsfönstret som visar rolltilldelningar för samma roll och samma huvudnamn, men med olika omfång.

  7. Använd RoleDefinitionId, RoleDefinitionName och PrincipalId för att hämta roll- och huvudnamns-ID:t.

  8. Använd Omfång för att hämta listan över omfång för samma roll och samma huvudnamn.

  9. 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.

  10. Hämta huvudnamnet från huvudnamns-ID:t.

  11. Öppna sidan Åtkomstkontroll (IAM) i omfånget för en rolltilldelning som du vill ta bort.

  12. Välj fliken Rolltilldelningar.

  13. Om du vill filtrera rolltilldelningarna väljer du filtret Roll och väljer sedan rollnamnet.

  14. Hitta huvudnamnet.

  15. 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.

  1. Logga in på Azure-portalen och öppna Azure Resource Graph Explorer.

  2. 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.

    Skärmbild av Azure Resource Graph Explorer som visar omfångsval.

  3. 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.

    Skärmbild av Azure Resource Graph Explorer som visar rolltilldelningar för med samma huvudnamn och samma omfång.

    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.
  4. På en rad väljer du Visa information för att öppna fönstret Information .

    Skärmbild av informationsfönstret som visar rolltilldelningar med samma huvudnamn och samma omfång.

  5. Använd AllRD för att se de inbyggda rollerna som potentiellt kan kombineras till en anpassad roll.

  6. 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

  7. 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-portalen.

  8. Hämta huvudnamnet från huvudnamns-ID:t.

  9. Öppna sidan Åtkomstkontroll (IAM) i samma omfång som rolltilldelningarna.

  10. 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.

  11. På sidan Åtkomstkontroll (IAM) i samma omfång väljer du fliken Rolltilldelningar .

  12. Hitta huvudnamn och inbyggda rolltilldelningar.

  13. 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 stöder 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 har stöd för 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.

  1. Logga in på Azure-portalen och öppna Azure Resource Graph Explorer.

  2. Välj Omfång och ange omfånget till Katalog för frågan.

    Skärmbild av Azure Resource Graph Explorer som visar omfångsval.

  3. 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:

    Skärmbild av Azure Resource Graph Explorer som visar anpassade roller utan rolltilldelningar.

    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.
  4. Öppna omfånget (vanligtvis prenumeration) och öppna sedan sidan Åtkomstkontroll (IAM).

  5. Välj fliken Roller för att visa en lista med alla inbyggda och anpassade roller.

  6. I filtret Typ väljer du CustomRole för att bara se dina anpassade roller.

  7. Välj ellipsen (...) för den anpassade roll som du vill ta bort och välj sedan Ta bort.

    Skärmbild av en lista över anpassade roller som kan väljas för borttagning.

Nästa steg