Řešení potíží s limity Azure RBAC
Tento článek popisuje některá běžná řešení, když překročíte limity řízení přístupu na základě role v Azure (Azure RBAC).
Požadavky
- Role čtenáře pro spouštění dotazů Azure Resource Graphu
- Role správce řízení přístupu na základě role pro přidání nebo odebrání přiřazení rolí
- Role Správce uživatelských přístupů pro přidání přiřazení rolí, odebrání přiřazení rolí nebo odstranění vlastních rolí
- Seskupuje roli Správce nebo Správce uživatelů pro vytváření skupin.
Poznámka:
Dotazy použité v tomto článku vrací pouze přiřazení rolí nebo vlastní role, ke kterým máte oprávnění ke čtení. Pokud například máte oprávnění ke čtení přiřazení rolí pouze v oboru skupiny prostředků, přiřazení rolí v oboru předplatného se nevrátí.
Příznak – Není možné vytvořit žádná další přiřazení rolí
Při pokusu o přiřazení role se zobrazí následující chybová zpráva:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Příčina
podpora Azure až 4 000 přiřazení rolí na předplatné. Tento limit zahrnuje přiřazení rolí v oboru předplatného, skupiny prostředků a prostředku, ale ne v oboru skupiny pro správu. Způsobilá přiřazení rolí a přiřazení rolí naplánovaná v budoucnu se do tohoto limitu nezapočítávají. Měli byste se pokusit snížit počet přiřazení rolí v předplatném.
Poznámka:
Limit přiřazení rolí 4000 na předplatné je pevný a nejde ho zvýšit.
Pokud chcete zjistit počet přiřazení rolí, můžete si prohlédnout graf na stránce Řízení přístupu (IAM) na webu Azure Portal. Můžete také použít následující příkazy Azure PowerShellu:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Řešení 1 – Nahrazení přiřazení rolí založených na objektech zabezpečení pomocí přiřazení rolí založených na skupinách
Pokud chcete snížit počet přiřazení rolí v předplatném, přidejte instanční objekty (uživatele, instanční objekty a spravované identity) do skupin a přiřaďte k nim role. Tímto postupem určíte, kde lze pro objekty zabezpečení nahradit více přiřazení rolí jediným přiřazením role pro skupinu.
Přihlaste se k webu Azure Portal a otevřete Azure Resource Graph Explorer.
Vyberte Obor a nastavte obor dotazu.
Obor obvykle nastavíte na Adresář , abyste se mohli dotazovat na celého tenanta, ale rozsah můžete zúžit na konkrétní předplatná.
Vyberte Nastavit obor autorizace a nastavte obor autorizace na Hodnotu At( Nahoře a níže ) a dotazujte se na všechny prostředky v zadaném oboru.
Spuštěním následujícího dotazu získejte přiřazení rolí se stejnou rolí a ve stejném oboru, ale pro různé objekty zabezpečení.
Tento dotaz kontroluje aktivní přiřazení rolí a v Microsoft Entra Privileged Identity Management se nepovažuje za oprávněná přiřazení rolí. Pokud chcete zobrazit seznam oprávněných přiřazení rolí, můžete použít Centrum pro správu Microsoft Entra, PowerShell nebo rozhraní REST API. Další informace najdete v tématu Get-AzRoleEligibilityScheduleInstance nebo instance plánu způsobilosti rolí – seznam pro rozsah.
Pokud používáte podmínky přiřazení role nebo delegujete správu přiřazení rolí s podmínkami, měli byste použít dotaz Podmínky. V opačném případě použijte výchozí dotaz.
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
Následující příklad ukazuje příklad výsledků. Sloupec count_ je počet objektů zabezpečení přiřazených stejné roli a ve stejném oboru. Počet se seřadí sestupně.
Určete řádek, ve kterém chcete nahradit více přiřazení rolí jedním přiřazením role pro skupinu.
V řádku vyberte Zobrazit podrobnosti a otevřete podokno Podrobnosti .
Sloupec Popis RoleDefinitionId ID aktuálně přiřazené role. Obor Rozsah přiřazení role, což bude předplatné, skupina prostředků nebo prostředek. RoleDefinitionName Název aktuálně přiřazené role. COUNT Počet objektů zabezpečení přiřazených stejné roli a ve stejném oboru AllPrincipals SeznamIDch K získání role a oboru použijte RoleDefinitionId, RoleDefinitionName a Scope.
Pomocí funkcí AllPrincipals získáte seznam ID objektu zabezpečení se stejným přiřazením role.
Vytvořte skupinu Microsoft Entra. Další informace naleznete v tématu Správa skupin a členství ve skupinách Microsoft Entra.
Přidejte objekty zabezpečení ze služby AllPrincipals do skupiny.
Informace o hromadném přidávání objektů zabezpečení naleznete v tématu Hromadné přidání členů skupiny v Microsoft Entra ID.
Přiřaďte roli skupině, kterou jste vytvořili ve stejném oboru. Další informace viz Přiřazení rolí Azure pomocí webu Azure Portal.
Teď můžete najít a odebrat přiřazení rolí na základě objektu zabezpečení.
Získejte hlavní názvy z ID objektu zabezpečení.
- Pokud chcete použít Azure Portal, přečtěte si téma Přidání nebo aktualizace informací a nastavení profilu uživatele.
- Pokud chcete použít PowerShell, přečtěte si téma Get-MgUser.
- Pokud chcete použít Azure, rozhraní příkazového řádku, podívejte se na příkaz az ad user show.
Otevřete stránku Řízení přístupu (IAM) ve stejném oboru jako přiřazení rolí.
Vyberte kartu Přiřazení rolí.
Pokud chcete filtrovat přiřazení rolí, vyberte filtr role a pak vyberte název role.
Vyhledejte přiřazení rolí na základě objektu zabezpečení.
Měli byste také vidět přiřazení role založené na skupině.
Vyberte a odeberte přiřazení rolí na základě objektu zabezpečení. Další informace najdete v tématu věnovaném odebrání přiřazení rolí v Azure.
Řešení 2 – Odebrání redundantních přiřazení rolí
Pokud chcete snížit počet přiřazení rolí v předplatném, odeberte redundantní přiřazení rolí. Pokud chcete zjistit, kde redundantní přiřazení rolí v nižším rozsahu mohou být potenciálně odebrána, protože přiřazení role v vyšším oboru již uděluje přístup.
Přihlaste se k webu Azure Portal a otevřete Azure Resource Graph Explorer.
Vyberte Obor a nastavte obor dotazu.
Obor obvykle nastavíte na Adresář , abyste se mohli dotazovat na celého tenanta, ale rozsah můžete zúžit na konkrétní předplatná.
Vyberte Nastavit obor autorizace a nastavte obor autorizace na Hodnotu At( Nahoře a níže ) a dotazujte se na všechny prostředky v zadaném oboru.
Spuštěním následujícího dotazu získejte přiřazení rolí se stejnou rolí a stejným objektem zabezpečení, ale v různých oborech.
Tento dotaz kontroluje aktivní přiřazení rolí a v Microsoft Entra Privileged Identity Management se nepovažuje za oprávněná přiřazení rolí. Pokud chcete zobrazit seznam oprávněných přiřazení rolí, můžete použít Centrum pro správu Microsoft Entra, PowerShell nebo rozhraní REST API. Další informace najdete v tématu Get-AzRoleEligibilityScheduleInstance nebo instance plánu způsobilosti rolí – seznam pro rozsah.
Pokud používáte podmínky přiřazení role nebo delegujete správu přiřazení rolí s podmínkami, měli byste použít dotaz Podmínky. V opačném případě použijte výchozí dotaz.
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
Následující příklad ukazuje příklad výsledků. Sloupec count_ je počet různých oborů pro přiřazení rolí se stejnou rolí a stejným objektem zabezpečení. Počet se seřadí sestupně.
Sloupec Popis RoleDefinitionId ID aktuálně přiřazené role. RoleDefinitionName Název aktuálně přiřazené role. PrincipalId ID objektu zabezpečení přiřazené role. COUNT Počet různých oborů pro přiřazení rolí se stejnou rolí a stejným objektem zabezpečení Rozsahy Obory pro přiřazení rolí se stejnou rolí a stejným objektem zabezpečení. Určete řádek, ve kterém chcete odebrat redundantní přiřazení rolí.
Na řádku vyberte Zobrazit podrobnosti a otevřete podokno Podrobnosti .
Pomocí RoleDefinitionId, RoleDefinitionName a PrincipalId získejte ID role a objektu zabezpečení.
Pomocí oborů získáte seznam oborů pro stejnou roli a stejný objekt zabezpečení.
Určete obor, který se vyžaduje pro přiřazení role. Ostatní přiřazení rolí je možné odebrat.
Při určování, která přiřazení rolí je možné odebrat, byste měli dodržovat osvědčené postupy s nejnižšími oprávněními . Přiřazení role ve vyšším oboru může udělit více přístupu k objektu zabezpečení, než je potřeba. V takovém případě byste měli odebrat přiřazení role s vyšším oborem. Uživatel například nemusí potřebovat přiřazení role Přispěvatel virtuálních počítačů v oboru předplatného, když přiřazení role Přispěvatel virtuálních počítačů v oboru nižší skupiny prostředků udělí požadovaný přístup.
Získejte hlavní název z ID objektu zabezpečení.
- Pokud chcete použít Azure Portal, přečtěte si téma Přidání nebo aktualizace informací a nastavení profilu uživatele.
- Pokud chcete použít PowerShell, přečtěte si téma Get-MgUser.
- Pokud chcete použít Azure, rozhraní příkazového řádku, podívejte se na příkaz az ad user show.
Otevřete stránku Řízení přístupu (IAM) v oboru přiřazení role, kterou chcete odebrat.
Vyberte kartu Přiřazení rolí.
Pokud chcete filtrovat přiřazení rolí, vyberte filtr role a pak vyberte název role.
Najděte objekt zabezpečení.
Vyberte a odeberte přiřazení role. Další informace najdete v tématu věnovaném odebrání přiřazení rolí v Azure.
Řešení 3 – Nahrazení několika předdefinovaných přiřazení rolí vlastním přiřazením role
Pokud chcete snížit počet přiřazení rolí v předplatném, nahraďte několik předdefinovaných přiřazení rolí jediným přiřazením vlastní role. Postupujte podle těchto kroků a určete, kde je možné nahradit více předdefinovaných přiřazení rolí.
Přihlaste se k webu Azure Portal a otevřete Azure Resource Graph Explorer.
Vyberte Obor a nastavte obor dotazu.
Obor obvykle nastavíte na Adresář , abyste se mohli dotazovat na celého tenanta, ale rozsah můžete zúžit na konkrétní předplatná.
Spuštěním následujícího dotazu získejte přiřazení rolí se stejným objektem zabezpečení a stejným oborem, ale s různými předdefinovanými rolemi.
Tento dotaz kontroluje aktivní přiřazení rolí a v Microsoft Entra Privileged Identity Management se nepovažuje za oprávněná přiřazení rolí. Pokud chcete zobrazit seznam oprávněných přiřazení rolí, můžete použít Centrum pro správu Microsoft Entra, PowerShell nebo rozhraní REST API. Další informace najdete v tématu Get-AzRoleEligibilityScheduleInstance nebo instance plánu způsobilosti rolí – seznam pro rozsah.
Pokud používáte podmínky přiřazení role nebo delegujete správu přiřazení rolí s podmínkami, měli byste použít dotaz Podmínky. V opačném případě použijte výchozí dotaz.
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
Následující příklad ukazuje příklad výsledků. Sloupec count_ je počet různých předdefinovaných přiřazení rolí se stejným objektem zabezpečení a stejným oborem. Počet se seřadí sestupně.
Sloupec Popis PrincipalId ID objektu zabezpečení přiřazeného předdefinovaným rolím Obor Rozsah předdefinovaných přiřazení rolí COUNT Počet předdefinovaných přiřazení rolí se stejným objektem zabezpečení a stejným oborem AllRD ID a název předdefinovaných rolí Na řádku vyberte Zobrazit podrobnosti a otevřete podokno Podrobnosti .
Pomocí funkce AllRD můžete zobrazit předdefinované role, které se dají potenciálně zkombinovat do vlastní role.
Zobrazí seznam akcí a akcí dat pro předdefinované role. Další informace najdete v tématu Výpis definic rolí Azure nebo předdefinovaných rolí Azure.
Vytvořte vlastní roli, která zahrnuje všechny akce a akce dat jako předdefinované role. Pokud chcete usnadnit vytvoření vlastní role, můžete začít klonováním jedné z předdefinovaných rolí. Další informace najdete v tématu Vytvoření nebo aktualizace vlastních rolí Azure pomocí webu Azure Portal.
Získejte hlavní název z ID objektu zabezpečení.
- Pokud chcete použít Azure Portal, přečtěte si téma Přidání nebo aktualizace informací a nastavení profilu uživatele.
- Pokud chcete použít PowerShell, přečtěte si téma Get-MgUser.
- Pokud chcete použít Azure, rozhraní příkazového řádku, podívejte se na příkaz az ad user show.
Otevřete stránku Řízení přístupu (IAM) ve stejném oboru jako přiřazení rolí.
Přiřaďte k objektu zabezpečení novou vlastní roli. Další informace viz Přiřazení rolí Azure pomocí webu Azure Portal.
Teď můžete odebrat předdefinovaná přiřazení rolí.
Na stránce Řízení přístupu (IAM) ve stejném oboru vyberte kartu Přiřazení rolí.
Vyhledejte instanční objekt a předdefinovaná přiřazení rolí.
Odeberte předdefinovaná přiřazení rolí z objektu zabezpečení. Další informace najdete v tématu věnovaném odebrání přiřazení rolí v Azure.
Řešení 4 – Nastavení oprávnění k přiřazení rolí
Pokud chcete snížit počet přiřazení rolí v předplatném a máte Microsoft Entra ID P2, udělte přiřazení rolí oprávněným v Microsoft Entra Privileged Identity Management místo trvalého přiřazení.
Řešení 5 – Přidání dalšího předplatného
Přidejte další předplatné.
Příznak – v oboru skupiny pro správu není možné vytvářet žádná další přiřazení rolí.
Nemůžete přiřadit roli v oboru skupiny pro správu.
Příčina
podpora Azure až 500 přiřazení rolí na skupinu pro správu. Tento limit se liší od limitu přiřazení rolí na předplatné.
Poznámka:
Limit 500 přiřazení rolí na skupinu pro správu je pevný a nelze ho zvýšit.
Řešení
Pokuste se snížit počet přiřazení rolí ve skupině pro správu. Možné možnosti najdete v tématu Příznaky – Není možné vytvořit žádná další přiřazení rolí. Aby dotazy načítaly prostředky na úrovni skupiny pro správu, musíte v dotazech provést následující změnu:
Nahradit
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Příznak – Není možné vytvořit žádné další definice rolí.
Když se pokusíte vytvořit novou vlastní roli, zobrazí se následující zpráva:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Příčina
podpora Azure až 5 000 vlastních rolí v adresáři. (Pro Microsoft Azure provozovaný společností 21Vianet je limit 2000 vlastních rolí.)
Řešení
Pomocí těchto kroků vyhledejte a odstraňte nepoužívané vlastní role Azure.
Přihlaste se k webu Azure Portal a otevřete Azure Resource Graph Explorer.
Vyberte Obor a nastavte obor na Adresář dotazu.
Spuštěním následujícího dotazu získejte všechny vlastní role, které nemají přiřazení rolí:
Tento dotaz zkontroluje aktivní přiřazení rolí a v Microsoft Entra Privileged Identity Management se nepovažuje za oprávněná přiřazení vlastních rolí. Pokud chcete zobrazit seznam oprávněných přiřazení vlastních rolí, můžete použít Centrum pro správu Microsoft Entra, PowerShell nebo rozhraní REST API. Další informace najdete v tématu Get-AzRoleEligibilityScheduleInstance nebo instance plánu způsobilosti rolí – seznam pro rozsah.
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
Následuje příklad výsledků:
Sloupec Popis RoleDefinitionId ID nepoužívané vlastní role. RoleDefinitionName Název nepoužívané vlastní role Obor Přiřaditelné obory pro nepoužívané vlastní role Otevřete obor (obvykle předplatné) a otevřete stránku Řízení přístupu (IAM).
Výběrem karty Role zobrazíte seznam všech předdefinovaných a vlastních rolí.
Ve filtru Typ vyberte Možnost Vlastní role, aby se zobrazily vaše vlastní role.
Vyberte tři tečky (...) pro vlastní roli, kterou chcete odstranit, a pak vyberte Odstranit.