Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las identidades administradas proporcionan una identidad administrada automáticamente en microsoft Entra ID para que las aplicaciones se usen al conectarse a los recursos que admiten la autenticación de Microsoft Entra. Puede conceder permisos de API directamente a la entidad de servicio de una identidad administrada, lo que elimina la necesidad de almacenar credenciales en archivos de código o configuración.
En este artículo, aprenderá a conceder y revocar permisos de Microsoft Graph API para identidades administradas asignadas por el sistema y asignadas por el usuario mediante Microsoft Entra PowerShell.
Prerequisites
- Una cuenta de usuario de Microsoft Entra. Si no la tiene, puede crear una cuenta gratis.
- Instale el módulo Microsoft Entra PowerShell.
- Un recurso de Azure con una identidad administrada habilitada, ya sea asignada por el sistema o por el usuario.
- Para conceder permisos de API a identidades administradas, necesita uno de los siguientes roles:
- Administrador de roles con privilegios (necesario al conceder permisos a Microsoft Graph u otras aplicaciones de Microsoft propias)
- Administrador de aplicaciones
- Administrador de aplicaciones en la nube
Concesión de permisos de API a una identidad administrada
Siga estos pasos para conceder permisos de Microsoft Graph API a la identidad administrada.
Conexión a Microsoft Entra
Para conceder permisos de API a identidades administradas, conéctese con los ámbitos
Application.ReadWrite.AllyAppRoleAssignment.ReadWrite.All:Connect-Entra -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"Cuidado
El
AppRoleAssignment.ReadWrite.Allpermiso permite a una aplicación o servicio administrar concesiones de permisos y elevar privilegios para cualquier aplicación, usuario o grupo de su organización. Conceda este permiso solo a los administradores de confianza.Identificar el sujeto de servicio de identidad administrada
Busque la entidad de servicio que representa su identidad administrada en Microsoft Entra ID.
En el caso de las identidades administradas asignadas por el sistema, use el nombre del recurso Azure:
$managedIdentityName = "MyAzureVM" $managedIdentitySP = Get-EntraServicePrincipal -Filter "displayName eq '$managedIdentityName' and servicePrincipalType eq 'ManagedIdentity'" if (-not $managedIdentitySP) { Write-Error "Managed identity service principal '$managedIdentityName' not found." -ErrorAction Stop } Write-Host "Found managed identity service principal:" Write-Host "Display Name: $($managedIdentitySP.DisplayName)" Write-Host "Object ID: $($managedIdentitySP.Id)"Note
Si el filtro devuelve varios resultados (por ejemplo, cuando varias identidades administradas comparten el mismo nombre para mostrar), use el identificador de objeto para identificar la entidad de servicio correcta:
Get-EntraServicePrincipal -ServicePrincipalId '<object-id>'.Para las identidades administradas asignadas por el usuario, use el nombre de la identidad administrada:
$userAssignedMIName = "MyUserAssignedMI" $managedIdentitySP = Get-EntraServicePrincipal -Filter "displayName eq '$userAssignedMIName' and servicePrincipalType eq 'ManagedIdentity'" if (-not $managedIdentitySP) { Write-Error "Managed identity service principal '$userAssignedMIName' not found." -ErrorAction Stop }Obtener el sujeto de servicio de Microsoft Graph
Recuperar el sujeto de servicio de Microsoft Graph:
$graphServicePrincipal = Get-EntraServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"Identificación de los permisos de API necesarios
Busque los permisos de Microsoft Graph específicos que requiere la identidad administrada:
$appRole = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }Concesión de permisos de API a la identidad administrada
Conceda el permiso de API a la identidad administrada:
$params = @{ ServicePrincipalId = $managedIdentitySP.Id PrincipalId = $managedIdentitySP.Id ResourceId = $graphServicePrincipal.Id AppRoleId = $appRole.Id } $appRoleAssignment = New-EntraServicePrincipalAppRoleAssignment @paramsComprobación de los permisos concedidos
Confirme que los permisos se han concedido correctamente:
$assignments = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id Write-Host "Current app role assignments for $($managedIdentitySP.DisplayName):" foreach ($assignment in $assignments) { $resource = Get-EntraServicePrincipal -ServicePrincipalId $assignment.ResourceId $assignedRole = $resource.AppRoles | Where-Object { $_.Id -eq $assignment.AppRoleId } Write-Host "- Resource: $($resource.DisplayName)" Write-Host " Permission: $($assignedRole.Value)" }
Revocar permisos de API de una identidad administrada
Siga estos pasos para revocar los permisos de la API de Microsoft Graph de su identidad administrada.
Identifique el permiso que se debe quitar
Busque la asignación específica de rol de aplicación que desea revocar:
$assignmentToRemove = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id | Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceId -eq $graphServicePrincipal.Id }Eliminación de la asignación de roles de aplicación
Eliminar la asignación de rol de aplicación utilizando su ID:
if ($assignmentToRemove) { Remove-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id -AppRoleAssignmentId $assignmentToRemove.Id Write-Host "Successfully removed permission: $($appRole.Value)" }Comprobación de que se quitó el permiso
Confirme que no quedan asignaciones para el permiso revocado:
$remainingAssignments = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id if ($remainingAssignments) { Write-Host "Remaining permissions for $($managedIdentitySP.DisplayName):" foreach ($assignment in $remainingAssignments) { $resource = Get-EntraServicePrincipal -ServicePrincipalId $assignment.ResourceId $assignedRole = $resource.AppRoles | Where-Object { $_.Id -eq $assignment.AppRoleId } Write-Host "- $($assignedRole.Value) on $($resource.DisplayName)" } } else { Write-Host "No app role assignments remain for $($managedIdentitySP.DisplayName)." }