Administrar roles

En este artículo, aprenderá a administrar roles mediante Microsoft Entra PowerShell. Un rol en Microsoft Entra define los permisos que controlan el acceso a recursos como usuarios, grupos y aplicaciones. Asigne roles a usuarios, grupos o entidades de servicio para conceder los permisos que necesitan para realizar tareas específicas. También puede definir el ámbito de cada asignación a todo el directorio, una unidad administrativa o un registro de aplicación específico para que el rol solo se aplique cuando sea necesario.

Prerrequisitos

Para administrar roles con Microsoft Entra PowerShell, necesita lo siguiente:

Búsqueda de definiciones de roles

Una definición de un rol es un conjunto de permisos que permiten realizar acciones como leer, escribir y eliminar. Normalmente se denomina rol. Microsoft Entra ID tiene más de 60 roles integrados y puede crear sus propios roles personalizados. Para comprender lo que hace cada rol, puede ver una lista detallada de sus permisos.

Para obtener todas las definiciones de roles, ejecute el siguiente comando Get-EntraDirectoryRoleDefinition con al menos el rol Lectores de directorio .

Connect-Entra -Scopes 'RoleManagement.Read.Directory'
Get-EntraDirectoryRoleDefinition
DisplayName                                   Id                                   TemplateId                           Description
-----------                                   --                                   ----------                           -----------
Guest User                                    10dae51f-b6af-4016-8d66-8c2a99b929b3 10dae51f-b6af-4016-8d66-8c2a99b929b3 Default role for guest users. Can read a limited set of directory information.
Restricted Guest User                         2af84b1e-32c8-42b7-82bc-daa82404023b 2af84b1e-32c8-42b7-82bc-daa82404023b Restricted role for guest users. Can read a limited set of directory information.

Búsqueda de asignaciones de roles

En esta sección se describe cómo enumerar los roles que ha asignado en Microsoft Entra ID. Para obtener todas las asignaciones de roles, ejecute el comando Get-EntraDirectoryRoleAssignment con al menos el rol Directory Readers.

Connect-Entra -Scopes 'RoleManagement.Read.Directory'
Get-EntraDirectoryRoleAssignment -All 
Id                                            PrincipalId                           RoleDefinitionId                      DirectoryScopeId AppScopeId
--                                            -----------                           ----------------                      ---------------- ----------
00001111-aaaa-2222-bbbb-3333cccc4444          aaaaaaaa-bbbb-cccc-1111-222222222222  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
11112222-bbbb-3333-cccc-4444dddd5555          bbbbbbbb-cccc-dddd-2222-333333333333  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
22223333-cccc-4444-dddd-5555eeee6666          cccccccc-dddd-eeee-3333-444444444444  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
33334444-dddd-5555-eeee-6666ffff7777          dddddddd-eeee-ffff-4444-555555555555  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                
44445555-eeee-6666-ffff-7777aaaa8888          eeeeeeee-ffff-aaaa-5555-666666666666  a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1  /                 

PrincipalId especifica la cuenta a la que se asigna el rol y RoleDefinitionId especifica el rol asignado a la cuenta.

Búsqueda de asignaciones de roles para un usuario específico

Para auditar los roles asignados a un usuario específico, filtre las asignaciones de roles por el identificador de objeto del usuario.

Connect-Entra -Scopes 'RoleManagement.Read.Directory', 'User.Read.All'
$user = Get-EntraUser -UserId 'markus@contoso.com'
Get-EntraDirectoryRoleAssignment -All | Where-Object { $_.PrincipalId -eq $user.Id }
Id                                   PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
--                                   -----------                          ----------------                     ---------------- ----------
00001111-aaaa-2222-bbbb-3333cccc4444 bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /

La salida muestra los identificadores de asignación de roles, pero no los nombres visibles de los roles. Para resolver los nombres de los roles de cada RoleDefinitionId, canaliza las asignaciones a través de Get-EntraDirectoryRoleDefinition.

$assignments = Get-EntraDirectoryRoleAssignment -All | Where-Object { $_.PrincipalId -eq $user.Id }
foreach ($assignment in $assignments) {
    $roleDef = Get-EntraDirectoryRoleDefinition -UnifiedRoleDefinitionId $assignment.RoleDefinitionId
    [PSCustomObject]@{
        RoleName = $roleDef.DisplayName
        Scope    = $assignment.DirectoryScopeId
    }
}
RoleName               Scope
--------               -----
Helpdesk Administrator /
User Administrator     /administrativeUnits/aaaaaaaa-bbbb-cccc-1111-222222222222

Asignación de roles

Para conceder acceso a los usuarios en Microsoft Entra ID, asigne roles de Microsoft Entra. En esta sección se explica cómo asignar roles de Microsoft Entra a usuarios y grupos. Debe tener al menos el rol Administrador de roles con privilegios para completar las siguientes tareas.

Asignar funciones a usuarios

  1. Utiliza Get-EntraUser para recuperar el usuario para la asignación de roles.

    Connect-Entra -Scopes 'User.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    

    El -UserId especifica el identificador como un nombre principal de usuario (UPN) o un ObjectId.

    DisplayName Id                                   Mail                                 UserPrincipalName
    ----------- --                                   ----                                 -----------------
    Markus Long bbbbbbbb-1111-2222-3333-cccccccccccc markus@contoso.com                   markus@contoso.onmicrosoft.com
    
  2. Use el Get-EntraDirectoryRoleDefinition comando para obtener el identificador de rol (RoleDefinitionId) que desea asignar.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory', 'EntitlementManagement.Read.All'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
    
  3. Use el New-EntraDirectoryRoleAssignment comando para asignar el rol.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId '/'
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
    --                                       -----------                          ----------------                     ---------------- ----------
    00001111-aaaa-2222-bbbb-3333cccc4444     aaaaaaaa-bbbb-cccc-1111-222222222222 a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /
    

Este comando crea una nueva asignación de roles en Microsoft Entra ID.

  • El -RoleDefinitionId parámetro especifica el identificador de la definición de rol que desea asignar. Las definiciones de roles describen los permisos concedidos a usuarios o grupos por el rol. Este es el identificador del unifiedRoleDefinition al que va dirigida la asignación.

  • El parámetro -PrincipalId especifica el ID del principal (usuario, grupo o principal de servicio) al que se le está asignando el rol.

  • El-DirectoryScopeId parámetro especifica el ámbito del directorio sobre el que la asignación de roles es efectiva. El / valor normalmente representa el ámbito raíz, lo que significa que la asignación de roles es aplicable en todo el directorio.

Note

Los pasos de esta sección crean una asignación de roles permanente (activa). Para conceder a un usuario acceso temporal o just-in-time a través de Privileged Identity Management (PIM), consulta Cmdlets de Microsoft Entra PowerShell para Privileged Identity Management.

Asignación de roles a grupos

Para simplificar la administración de roles, puede asignar Microsoft Entra roles a un grupo en lugar de a personas. De este modo, puede administrar asignaciones de roles para varios usuarios a la vez.

  1. Cree un grupo asignable de roles mediante el IsAssignableToRole parámetro . Este parámetro se establece en True para indicar que el grupo se puede asignar a un rol.

    Connect-Entra -Scopes 'Group.ReadWrite.All'
    $params = @{
        DisplayName = 'HelpDesk admin group2'
        Description = 'Group assignable to role'
        MailEnabled = $False
        MailNickname = 'helpDeskAdminGroup'
        SecurityEnabled = $True
        IsAssignableToRole = $True
    }
    $group = New-EntraGroup @params
    
    DisplayName           Id                                   MailNickname       Description              GroupTypes
    -----------           --                                   ------------       -----------              ----------
    HelpDesk admin group2 vvvvvvvv-8888-9999-0000-jjjjjjjjjjjj helpDeskAdminGroup Group assignable to role {}
    
  2. Obtenga el identificador de rol (RoleDefinitionId) que desea asignar mediante el Get-EntraDirectoryRoleDefinition comando .

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
    
  3. Cree una asignación de roles mediante el New-EntraDirectoryRoleAssignment comando donde PrincipalId es el identificador de grupo.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $group.Id -DirectoryScopeId '/'
    

Asignar roles a entidades de servicio

Puede asignar Microsoft Entra roles a una entidad de servicio, incluida una identidad administrada, para que una aplicación pueda realizar tareas de directorio en su propio nombre sin un usuario que haya iniciado sesión.

  1. Utilice Get-EntraServicePrincipal para recuperar la entidad de servicio.

    Connect-Entra -Scopes 'Application.Read.All'
    $servicePrincipal = Get-EntraServicePrincipal -Filter "DisplayName eq 'My Application'"
    
    DisplayName    Id                                   AppId                                SignInAudience ServicePrincipalType
    -----------    --                                   -----                                -------------- --------------------
    My Application cccccccc-dddd-eeee-3333-444444444444 44445555-eeee-6666-ffff-7777aaaa8888 AzureADMyOrg   Application
    
  2. Obtenga el identificador de rol que desea asignar.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Directory Readers'"
    
  3. Asigne el rol a la entidad de servicio.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $servicePrincipal.Id -DirectoryScopeId '/'
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId AppScopeId
    --                                       -----------                          ----------------                     ---------------- ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          cccccccc-dddd-eeee-3333-444444444444 a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /
    

Asignación de roles con ámbito de unidad administrativa

Puede restringir una asignación de roles a una unidad administrativa específica en lugar de a todo el directorio. Los permisos del rol solo se aplican a los usuarios, grupos o dispositivos que pertenecen a esa unidad administrativa, lo que le ayuda a seguir el principio de privilegios mínimos. Para obtener más información sobre las unidades administrativas, consulte Unidades administrativas en Microsoft Entra ID.

  1. Recupere la entidad (usuario, grupo o entidad de servicio) y la unidad administrativa.

    Connect-Entra -Scopes 'User.Read.All', 'AdministrativeUnit.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    $adminUnit = Get-EntraAdministrativeUnit -Filter "DisplayName eq 'Seattle Admin Unit'"
    
  2. Obtenga la definición de roles.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'User Administrator'"
    
  3. Asigne el rol con el ámbito de la unidad administrativa.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    $directoryScopeId = '/administrativeUnits/' + $adminUnit.Id
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId $directoryScopeId
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId                                          AppScopeId
    --                                       -----------                          ----------------                     ----------------                                          ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /administrativeUnits/aaaaaaaa-bbbb-cccc-1111-222222222222
    

El usuario ahora tiene el rol Administrador de usuarios solo dentro de la unidad administrativa especificada.

Asignar roles con ámbito de aplicación

Puede limitar el ámbito de una asignación de rol a un único registro de aplicación, de modo que la entidad solo pueda administrar esa aplicación. Use este ámbito cuando, por ejemplo, quiera que un desarrollador administre su propio registro de aplicaciones sin concederle permisos de Administrador de aplicaciones en todo el tenant.

  1. Recupere el usuario y el registro de la aplicación.

    Connect-Entra -Scopes 'User.Read.All', 'Application.Read.All'
    $user = Get-EntraUser -UserId 'markus@contoso.com'
    $application = Get-EntraApplication -Filter "DisplayName eq 'My Web App'"
    
  2. Obtenga la definición de roles.

    Connect-Entra -Scopes 'RoleManagement.Read.Directory'
    $directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Application Administrator'"
    
  3. Asigne el rol con ámbito limitado a la aplicación.

    Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
    $directoryScopeId = '/' + $application.Id
    New-EntraDirectoryRoleAssignment -RoleDefinitionId $directoryRole.Id -PrincipalId $user.Id -DirectoryScopeId $directoryScopeId
    
    Id                                       PrincipalId                          RoleDefinitionId                     DirectoryScopeId                      AppScopeId
    --                                       -----------                          ----------------                     ----------------                      ----------
    A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u          bbbbbbbb-1111-2222-3333-cccccccccccc a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 /dddddddd-eeee-ffff-4444-555555555555
    

El usuario ahora tiene el rol de Administrador de aplicaciones solo para el registro de la aplicación especificada.

Note

Los dos formatos de ámbito tienen una semántica diferente. Un ámbito de /{id} (utilizado para el ámbito de la aplicación) significa que el principal puede administrar ese objeto en sí mismo. Un ámbito de /administrativeUnits/{id} significa que el principal puede administrar a los miembros de la unidad administrativa (en función del rol asignado), no a la unidad administrativa en sí misma. Para obtener más información, consulte Asignación de roles de Microsoft Entra en distintos ámbitos.

Crear un rol personalizado

En esta sección se explica cómo crear nuevos roles personalizados en Microsoft Entra ID con Microsoft Entra PowerShell. Debe tener asignado al menos el rol Administrador de roles con privilegios para completar la siguiente tarea.

Para crear un rol, use el New-EntraDirectoryRoleDefinition cmdlet .

  • El RolePermissions parámetro especifica los permisos para la definición de roles.
  • El IsEnabled parámetro especifica si la definición de roles está habilitada.
  • El parámetro DisplayName especifica el nombre para mostrar de la definición del rol.
Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
$rolePermissions = New-object Microsoft.Open.MSGraph.Model.RolePermission
$rolePermissions.AllowedResourceActions =  @("microsoft.directory/applications/basic/read")
New-EntraDirectoryRoleDefinition -RolePermissions $rolePermissions -IsEnabled $true -DisplayName 'Custom Application Read'

DisplayName             Id                                   TemplateId                           Description IsBuiltIn IsEnabled
-----------             --                                   ----------                           ----------- --------- ---------
Custom Application Read a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 f5f5f5f5-aaaa-bbbb-cccc-d6d6d6d6d6d6             False     True

Para encontrar más opciones de especificación al crear un rol personalizado, vaya al artículo New-EntraDirectoryRoleDefinition .

Una vez creado el rol, puede asignarlo a usuarios o grupos.

Limpieza de recursos

En esta sección se explica cómo eliminar roles en Microsoft Entra ID con Microsoft Entra PowerShell. Debe tener al menos el rol Administrador de roles con privilegios para completar las siguientes tareas.

Eliminación de asignaciones de roles

Use el Remove-EntraDirectoryRoleAssignment comando para quitar una asignación de roles. Si necesita encontrar el identificador de asignación de roles, al que se hace referencia en el -Id parámetro , ejecute primero el Get-EntraDirectoryRoleAssignment comando .

Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
$group = Get-EntraGroup -Filter "DisplayName eq 'HelpDesk admin group2'"
$directoryRole = Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Helpdesk Administrator'"
Get-EntraDirectoryRoleAssignment | Where-Object {$_.PrincipalId -eq $group.Id -and $_.RoleDefinitionId -eq $directoryRole.Id} | Remove-EntraDirectoryRoleAssignment

En este ejemplo se quita la asignación de roles especificada de Microsoft Entra ID.

Quitar roles

No puede eliminar roles integrados. Use el Remove-EntraDirectoryRoleDefinition comando para eliminar un rol personalizado. El parámetro DisplayName hace referencia al nombre para mostrar del rol personalizado.

Connect-Entra -Scopes 'RoleManagement.ReadWrite.Directory'
Get-EntraDirectoryRoleDefinition -Filter "DisplayName eq 'Custom Application Read'" | Remove-EntraDirectoryRoleDefinition