Concedere e revocare le autorizzazioni API alle identità gestite

Le identità gestite forniscono un'identità gestita automaticamente in Microsoft Entra ID per le applicazioni da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra. È possibile concedere le autorizzazioni API direttamente all'entità servizio di un'identità gestita, eliminando la necessità di archiviare le credenziali nei file di codice o di configurazione.

Questo articolo illustra come concedere e revocare le autorizzazioni di Microsoft API Graph per le identità gestite assegnate dal sistema e assegnate dall'utente usando Microsoft Entra PowerShell.

Prerequisiti

Concedere autorizzazioni API a un'identità gestita

Seguire questa procedura per concedere a Microsoft API Graph le autorizzazioni per l'identità gestita.

  1. Connettersi a Microsoft Entra

    Per concedere le autorizzazioni API alle identità gestite, connettersi con gli ambiti Application.ReadWrite.All e AppRoleAssignment.ReadWrite.All:

    Connect-Entra -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
    

    Attenzione

    L'autorizzazione AppRoleAssignment.ReadWrite.All consente a un'app o a un servizio di gestire le concessioni di autorizzazioni e elevare privilegi per qualsiasi app, utente o gruppo dell'organizzazione. Concedere questa autorizzazione solo agli amministratori attendibili.

  2. Identificare l'entità servizio dell'identità gestita

    Trova l'entità servizio che rappresenta la tua identità gestita in Microsoft Entra ID.

    Per le identità gestite assegnate dal sistema, usare il nome della risorsa 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

    Se il filtro restituisce più risultati( ad esempio, quando più identità gestite condividono lo stesso nome visualizzato), usare l'ID oggetto per identificare l'entità servizio corretta: Get-EntraServicePrincipal -ServicePrincipalId '<object-id>'.

    Per le identità gestite assegnate dall'utente, usare il nome dell'identità gestita:

    $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
    }
    
  3. Ottenere l'entità servizio del Microsoft Graph

    Recuperare l'entità servizio Microsoft Graph:

    $graphServicePrincipal = Get-EntraServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
    
  4. Identificare le autorizzazioni API necessarie

    Trovare le autorizzazioni Microsoft Graph specifiche necessarie per l'identità gestita:

    $appRole = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }
    
  5. Concedere autorizzazioni API all'identità gestita

    Concedi le autorizzazioni API alla tua identità gestita:

    $params = @{
        ServicePrincipalId = $managedIdentitySP.Id
        PrincipalId = $managedIdentitySP.Id
        ResourceId = $graphServicePrincipal.Id
        AppRoleId = $appRole.Id
    }
    
    $appRoleAssignment = New-EntraServicePrincipalAppRoleAssignment @params
    
  6. Verificare le autorizzazioni concesse

    Verificare che le autorizzazioni siano state concesse correttamente:

    $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)"
    }
    

Revocare le autorizzazioni API da un'identità gestita

Seguire questa procedura per revocare le autorizzazioni di Microsoft API Graph dall'identità gestita.

  1. Identificare l'autorizzazione da rimuovere

    Individuare l'assegnazione specifica di ruolo dell'app da revocare:

    $assignmentToRemove = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id |
        Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceId -eq $graphServicePrincipal.Id }
    
  2. Rimuovere l'assegnazione di ruolo dell'app

    Eliminare l'assegnazione di ruolo dell'app usando il relativo ID:

    if ($assignmentToRemove) {
        Remove-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id -AppRoleAssignmentId $assignmentToRemove.Id
        Write-Host "Successfully removed permission: $($appRole.Value)"
    }
    
  3. Verificare che l'autorizzazione sia stata rimossa

    Verifica che non rimangano assegnazioni per l'autorizzazione revocata:

    $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)."
    }