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

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

  1. Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra la selección de Ámbito.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra el panel Establecer ámbito de autorización.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra las asignaciones de roles con el mismo rol y en el mismo ámbito, pero para distintas entidades de seguridad.

  5. Identifique una fila en la que desea reemplazar las varias asignaciones de roles por una sola asignación de roles para un grupo.

  6. En la fila, seleccione Ver detalles para abrir el panel Detalles.

    Captura de pantalla del panel Detalles que muestra las asignaciones de roles con el mismo rol y en el mismo ámbito, pero para distintas entidades de seguridad.

    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.
  7. Use RoleDefinitionId, RoleDefinitionNamey Scope para obtener el rol y el ámbito.

  8. Use allPrincipals para obtener la lista de identificadores de entidad de seguridad con la misma asignación de roles.

  9. Cree un grupo de Microsoft Entra. Para obtener más información, consulte Administrar grupos de Microsoft Entra y pertenencia a grupos.

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

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

  12. Obtenga los nombres de entidad de seguridad de los identificadores de entidad de seguridad.

  13. Abra la página Control de acceso (IAM) en el mismo ámbito que las asignaciones de roles.

  14. Seleccione la pestaña Asignaciones de roles.

  15. Para filtrar las asignaciones de roles, seleccione el filtro Rol y, a continuación, seleccione el nombre del rol.

  16. Busque las asignaciones de roles basadas en entidades de seguridad.

    También debería ver la asignación de roles basada en grupos.

    Captura de pantalla de la página Control de acceso (IAM) que muestra las asignaciones de roles con el mismo rol y en el mismo ámbito, pero para distintas entidades de seguridad.

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

  1. Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra la selección de Ámbito.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra el panel Establecer ámbito de autorización.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra las asignaciones de roles para el mismo rol y la misma entidad de seguridad, pero en ámbitos diferentes.

    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.
  5. Identifique una fila en la que desea quitar asignaciones de roles redundantes.

  6. En una fila, seleccione Ver detalles para abrir el panel Detalles.

    Captura de pantalla del panel Detalles que muestra las asignaciones de roles para el mismo rol y la misma entidad de seguridad, pero en ámbitos diferentes.

  7. Use RoleDefinitionId, RoleDefinitionNamey PrincipalId para obtener el rol y el identificador de entidad de seguridad.

  8. Use Scopes para obtener la lista de los ámbitos del mismo rol y la misma entidad de seguridad.

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

  10. Obtenga el nombre principal del identificador de entidad de seguridad.

  11. Abra la página Control de acceso (IAM) en el ámbito de una asignación de roles que quiera quitar.

  12. Seleccione la pestaña Asignaciones de roles.

  13. Para filtrar las asignaciones de roles, seleccione el filtro Rol y, a continuación, seleccione el nombre del rol.

  14. Busque la entidad de seguridad.

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

  1. Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra la selección de Ámbito.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra las asignaciones de roles para con la misma entidad de seguridad y el mismo ámbito.

    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.
  4. En una fila, seleccione Ver detalles para abrir el panel Detalles.

    Captura de pantalla del panel Detalles que muestra las asignaciones de roles con la misma entidad de seguridad y el mismo ámbito.

  5. Use AllRD para ver los roles integrados que pueden combinarse en un rol personalizado.

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

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

  8. Obtenga el nombre principal del identificador de entidad de seguridad.

  9. Abra la página Control de acceso (IAM) en el mismo ámbito que las asignaciones de roles.

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

  11. En la página Control de acceso (IAM) del mismo ámbito, seleccione la pestaña Asignación de roles.

  12. Busque las asignaciones de roles principales e integradas.

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

  1. Inicie sesión en el Azure Portal y abra el Explorador de Azure Resource Graph.

  2. Seleccione Ámbito y establezca el ámbito en Directorio para la consulta.

    Captura de pantalla del Explorador de Azure Resource Graph que muestra la selección de Ámbito.

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

    Captura de pantalla del Explorador de Azure Resource Graph que muestra roles personalizados sin asignaciones de roles.

    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.
  4. Abra el ámbito (normalmente suscripción) y, a continuación, abra la página Control de acceso (IAM).

  5. Seleccione la pestaña Roles para ver una lista de todos los roles integrados y personalizados.

  6. En el filtro Tipo, seleccione CustomRole para ver solo los roles personalizados.

  7. Seleccione los puntos suspensivos (...) del rol personalizado que desee eliminar y seleccione Eliminar.

    Captura de pantalla de una lista de roles personalizados que se pueden seleccionar para su eliminación.

Pasos siguientes