Solución de problemas de límites de RBAC de Azure
En este artículo se describen algunas soluciones comunes cuando se superan los límites del control de acceso basado en rol de Azure (RBAC de Azure).
Requisitos previos
- Rol de Lector para ejecutar consultas de Azure Resource Graph.
- Rol de Administrador de control de acceso basado en rol para agregar o quitar asignaciones de roles.
- Rol de Administrador de acceso de usuario para agregar asignaciones de roles, quitar asignaciones de roles o eliminar roles personalizados.
- Rol de Administrador de grupos o Administrador de usuarios para crear grupos.
Nota:
Las consultas que se usan en este artículo solo devuelven asignaciones de roles o roles personalizados que tiene permisos para leer. Por ejemplo, si solo tiene permisos para leer las asignaciones de roles en el ámbito del grupo de recursos, no se devuelven las asignaciones de roles en el ámbito de la suscripción.
Síntoma: no se pueden crear más asignaciones de roles
Al intentar asignar un rol, obtiene el siguiente mensaje de error:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Causa
Azure admite hasta 4000 asignaciones de roles por suscripción. Este límite incluye las asignaciones de roles en los ámbitos de suscripción, grupo de recursos y recurso, pero no en el ámbito de grupo de administración. Las asignaciones de funciones aptas y las asignaciones de roles programadas en el futuro no cuentan para este límite. Debe intentar reducir el número de asignaciones de roles en la suscripción.
Nota:
El límite de 4000 asignaciones de roles por suscripción es fijo y no se puede aumentar.
Para saber el número de asignaciones de roles, puede consultar el gráfico de la página Control de acceso (IAM) en Azure Portal. También puede usar los siguientes comandos de Azure PowerShell:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Solución 1: Reemplazar las asignaciones de roles basadas en entidades de seguridad por asignaciones de roles basadas en grupos
Para reducir el número de asignaciones de roles en la suscripción, agregue entidades de seguridad (usuarios, entidades de servicio e identidades administradas) a grupos y asigne roles a los grupos en su lugar. Siga estos pasos para identificar dónde se pueden reemplazar varias asignaciones de roles para las entidades de seguridad por una sola asignación de roles para un grupo.
Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.
Seleccione Ámbito y establezca el ámbito de la consulta.
Normalmente, se establece el ámbito en Directory para consultar todo el inquilino, pero puede restringir el ámbito a determinadas suscripciones.
Seleccione Establecer ámbito de autorización y establezca el ámbito de autorización en En, por encima y por debajo para consultar todos los recursos en el ámbito especificado.
Ejecute la consulta siguiente para obtener las asignaciones de roles con el mismo rol y en el mismo ámbito, pero para distintas entidades de seguridad.
Esta consulta comprueba las asignaciones de roles activas y no tiene en cuenta las asignaciones de roles aptas en Microsoft Entra Privileged Identity Management. Para enumerar las asignaciones de roles aptas, puede usar el Centro de administración de Microsoft Entra, PowerShell o la API de REST. Para obtener más información, vea Get-AzRoleEligibilityScheduleInstance o instancias de programación de elegibilidad de roles: lista para ámbito.
Si usa condiciones de asignación de roles o delegar la administración de asignaciones de roles con condiciones, debe usar la consulta Condiciones. De lo contrario, use la consulta Predeterminada.
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
A continuación se muestra un ejemplo de los resultados. La columna count_ es el número de entidades de seguridad asignadas al mismo rol y en el mismo ámbito. El recuento se ordena en orden descendente.
Identifique una fila en la que desea reemplazar las varias asignaciones de roles por una sola asignación de roles para un grupo.
En la fila, seleccione Ver detalles para abrir el panel Detalles.
Columna Descripción RoleDefinitionId Id. del rol asignado actualmente. Ámbito Ámbito de la asignación de roles, que será una suscripción, un grupo de recursos o un recurso. RoleDefinitionName Nombre del rol asignado actualmente. count_ Número de entidades de seguridad asignadas al mismo rol y al mismo ámbito. AllPrincipals Lista de identificadores de entidad de seguridad asignados al mismo rol y en el mismo ámbito. Use RoleDefinitionId, RoleDefinitionNamey Scope para obtener el rol y el ámbito.
Use allPrincipals para obtener la lista de identificadores de entidad de seguridad con la misma asignación de roles.
Cree un grupo de Microsoft Entra. Para obtener más información, consulte Administrar grupos de Microsoft Entra y pertenencia a grupos.
Agregue las entidades de seguridad de AllPrincipals al grupo.
Para obtener información sobre cómo agregar entidades de seguridad de forma masiva, consulte Agregar miembros de grupo en Microsoft Entra ID.
Asigne el rol al grupo que creó en el mismo ámbito. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
Ahora puede encontrar y quitar las asignaciones de roles basadas en entidades de seguridad.
Obtenga los nombres de entidad de seguridad de los identificadores de entidad de seguridad.
- Para usar Azure Portal, consulte Agregar o actualizar la información y la configuración de un usuario.
- Para usar PowerShell, consulte Get-MgUser.
- Para usar Azure, la CLI, consulte az ad user show.
Abra la página Control de acceso (IAM) en el mismo ámbito que las asignaciones de roles.
Seleccione la pestaña Asignaciones de roles.
Para filtrar las asignaciones de roles, seleccione el filtro Rol y, a continuación, seleccione el nombre del rol.
Busque las asignaciones de roles basadas en entidades de seguridad.
También debería ver la asignación de roles basada en grupos.
Seleccione y quite las asignaciones de roles basadas en entidades de seguridad. Para obtener más información, consulte Eliminación de asignaciones de roles.
Solución 2: Eliminación de asignaciones de roles redundantes
Para reducir el número de asignaciones de roles de la suscripción, quite las asignaciones de roles redundantes. Siga estos pasos para identificar dónde se pueden quitar las asignaciones de roles redundantes en un ámbito inferior, ya que una asignación de roles en un ámbito superior ya concede acceso.
Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.
Seleccione Ámbito y establezca el ámbito de la consulta.
Normalmente, se establece el ámbito en Directory para consultar todo el inquilino, pero puede restringir el ámbito a determinadas suscripciones.
Seleccione Establecer ámbito de autorización y establezca el ámbito de autorización en En, por encima y por debajo para consultar todos los recursos en el ámbito especificado.
Ejecute la consulta siguiente para obtener las asignaciones de roles con el mismo rol y la misma entidad de seguridad, pero en distintos ámbitos.
Esta consulta comprueba las asignaciones de roles activas y no tiene en cuenta las asignaciones de roles aptas en Microsoft Entra Privileged Identity Management. Para enumerar las asignaciones de roles aptas, puede usar el Centro de administración de Microsoft Entra, PowerShell o la API de REST. Para obtener más información, vea Get-AzRoleEligibilityScheduleInstance o instancias de programación de elegibilidad de roles: lista para ámbito.
Si usa condiciones de asignación de roles o delegar la administración de asignaciones de roles con condiciones, debe usar la consulta Condiciones. De lo contrario, use la consulta Predeterminada.
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
A continuación se muestra un ejemplo de los resultados. La columna count_ es el número de ámbitos diferentes para las asignaciones de roles con el mismo rol y la misma entidad de seguridad. El recuento se ordena en orden descendente.
Columna Descripción RoleDefinitionId Id. del rol asignado actualmente. RoleDefinitionName Nombre del rol asignado actualmente. PrincipalId Identificador de la entidad de seguridad asignada al rol. count_ Número de ámbitos diferentes para las asignaciones de roles con el mismo rol y la misma entidad de seguridad. Ámbitos Ámbitos de las asignaciones de roles con el mismo rol y la misma entidad de seguridad. Identifique una fila en la que desea quitar asignaciones de roles redundantes.
En una fila, seleccione Ver detalles para abrir el panel Detalles.
Use RoleDefinitionId, RoleDefinitionNamey PrincipalId para obtener el rol y el identificador de entidad de seguridad.
Use Scopes para obtener la lista de los ámbitos del mismo rol y la misma entidad de seguridad.
Determine qué ámbito es necesario para la asignación de roles. Se pueden quitar las demás asignaciones de roles.
Debe seguir procedimientos recomendados de privilegios mínimos al determinar qué asignaciones de roles se pueden quitar. La asignación de roles en el ámbito superior podría conceder más acceso a la entidad de seguridad de lo que es necesario. En ese caso, debe quitar la asignación de roles con el ámbito superior. Por ejemplo, es posible que un usuario no necesite una asignación de roles Colaborador de máquina virtual en el ámbito de la suscripción cuando una asignación de roles Colaborador de máquina virtual en un ámbito de grupo de recursos inferior conceda el acceso necesario.
Obtenga el nombre principal del identificador de entidad de seguridad.
- Para usar Azure Portal, consulte Agregar o actualizar la información y la configuración de un usuario.
- Para usar PowerShell, consulte Get-MgUser.
- Para usar Azure, la CLI, consulte az ad user show.
Abra la página Control de acceso (IAM) en el ámbito de una asignación de roles que quiera quitar.
Seleccione la pestaña Asignaciones de roles.
Para filtrar las asignaciones de roles, seleccione el filtro Rol y, a continuación, seleccione el nombre del rol.
Busque la entidad de seguridad.
Seleccione y quite la asignación de roles. Para obtener más información, consulte Eliminación de asignaciones de roles.
Solución 3: Reemplazar varias asignaciones de roles integradas por una asignación de roles personalizada
Para reducir el número de asignaciones de roles de la suscripción, reemplace varias asignaciones de roles integradas por una sola asignación de roles personalizada. Siga estos pasos para identificar dónde se pueden reemplazar varias asignaciones de roles integradas.
Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.
Seleccione Ámbito y establezca el ámbito de la consulta.
Normalmente, se establece el ámbito en Directory para consultar todo el inquilino, pero puede restringir el ámbito a determinadas suscripciones.
Ejecute la consulta siguiente para obtener asignaciones de roles con la misma entidad de seguridad y el mismo ámbito, pero con distintos roles integrados.
Esta consulta comprueba las asignaciones de roles activas y no tiene en cuenta las asignaciones de roles aptas en Microsoft Entra Privileged Identity Management. Para enumerar las asignaciones de roles aptas, puede usar el Centro de administración de Microsoft Entra, PowerShell o la API de REST. Para obtener más información, vea Get-AzRoleEligibilityScheduleInstance o instancias de programación de elegibilidad de roles: lista para ámbito.
Si usa condiciones de asignación de roles o delegar la administración de asignaciones de roles con condiciones, debe usar la consulta Condiciones. De lo contrario, use la consulta Predeterminada.
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
A continuación se muestra un ejemplo de los resultados. La columna count_ es el número de asignaciones de roles integradas diferentes con la misma entidad de seguridad y el mismo ámbito. El recuento se ordena en orden descendente.
Columna Descripción PrincipalId Identificador de la entidad de seguridad asignada a los roles integrados. Ámbito Ámbito de las asignaciones de roles integrados. count_ Número de asignaciones de roles integrados con la misma entidad de seguridad y el mismo ámbito. AllRD Identificador y nombre de los roles integrados. En una fila, seleccione Ver detalles para abrir el panel Detalles.
Use AllRD para ver los roles integrados que pueden combinarse en un rol personalizado.
Enumere las acciones y las acciones de datos para los roles integrados. Para más información, consulte Enumeración de definiciones de roles de Azure o Roles integrados de Azure
Cree un rol personalizado que incluya todas las acciones y acciones de datos como roles integrados. Para facilitar la creación del rol personalizado, puede empezar por clonar uno de los roles integrados. Para más información, consulte Creación o actualización de roles personalizados de Azure mediante la CLI de Azure.
Obtenga el nombre principal del identificador de entidad de seguridad.
- Para usar Azure Portal, consulte Agregar o actualizar la información y la configuración de un usuario.
- Para usar PowerShell, consulte Get-MgUser.
- Para usar Azure, la CLI, consulte az ad user show.
Abra la página Control de acceso (IAM) en el mismo ámbito que las asignaciones de roles.
Asigne el nuevo rol personalizado a la entidad de seguridad. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
Ahora puede quitar las asignaciones de roles integradas.
En la página Control de acceso (IAM) del mismo ámbito, seleccione la pestaña Asignación de roles.
Busque las asignaciones de roles principales e integradas.
Quite las asignaciones de roles integradas de la entidad de seguridad. Para obtener más información, consulte Eliminación de asignaciones de roles.
Solución 4: Hacer que las asignaciones de roles sean aptas
Para reducir el número de asignaciones de roles en la suscripción y tiene Microsoft Entra ID P2, haga que las asignaciones de roles sean aptas en Microsoft Entra Privileged Identity Management en lugar de asignarse permanentemente.
Solución 5: Agregar una suscripción adicional
Agregue una suscripción adicional.
Síntoma: no se pueden crear más asignaciones de roles en el ámbito del grupo de administración
No puede asignar un rol en el ámbito del grupo de administración.
Causa
Azure admite hasta 500 asignaciones de roles por grupo de administración. Este límite es diferente del límite de asignaciones de roles por suscripción.
Nota:
El límite de 500 asignaciones de roles por grupo de administración es fijo y no se puede aumentar.
Solución
Intente reducir el número de asignaciones de roles en el grupo de administración. Para obtener opciones posibles, consulte Síntoma: no se pueden crear más asignaciones de roles. Para que las consultas recuperen recursos en el nivel de grupo de administración, deberá realizar el siguiente cambio en las consultas:
Sustituya
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Síntoma: no se pueden crear más definiciones de roles
Al intentar crear un nuevo rol personalizado, aparecerá el siguiente mensaje:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Causa
Azure admite hasta 5000 roles personalizados en un directorio. (Para Microsoft Azure operado por 21Vianet, el límite es de 2000 roles personalizados).
Solución
Siga estos pasos para buscar y eliminar roles personalizados de Azure sin usar.
Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.
Seleccione Ámbito y establezca el ámbito en Directorio para la consulta.
Ejecute la consulta siguiente para obtener todos los roles personalizados que no tienen ninguna asignación de roles:
Esta consulta comprueba las asignaciones de roles activas y no tiene en cuenta las asignaciones de roles personalizadas aptas en Microsoft Entra Privileged Identity Management. Para enumerar las asignaciones de roles personalizadas aptas, puede usar el Centro de administración de Microsoft Entra, PowerShell o la API REST. Para obtener más información, vea Get-AzRoleEligibilityScheduleInstance o instancias de programación de elegibilidad de roles: lista para ámbito.
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
A continuación se muestra un ejemplo de los resultados.
Columna Descripción RoleDefinitionId Identificador del rol personalizado sin usar. RoleDefinitionName Nombre del rol personalizado sin usar. Ámbito Ámbitos asignables para el rol personalizado sin usar. Abra el ámbito (normalmente suscripción) y, a continuación, abra la página Control de acceso (IAM).
Seleccione la pestaña Roles para ver una lista de todos los roles integrados y personalizados.
En el filtro Tipo, seleccione CustomRole para ver solo los roles personalizados.
Seleccione los puntos suspensivos (...) del rol personalizado que desee eliminar y seleccione Eliminar.