Conceder e revogar permissões de API para identidades gerenciadas

As identidades gerenciadas fornecem uma identidade gerenciada automaticamente na ID do Microsoft Entra para que os aplicativos usem ao se conectar a recursos que dão suporte à autenticação do Microsoft Entra. Você pode conceder permissões de API diretamente à entidade de serviço de uma identidade gerenciada, eliminando a necessidade de armazenar credenciais em arquivos de código ou configuração.

Neste artigo, você aprenderá a conceder e revogar permissões do Microsoft API do Graph para identidades gerenciadas atribuídas pelo sistema e atribuídas pelo usuário usando Microsoft Entra PowerShell.

Prerequisites

Conceder permissões de API a uma identidade gerenciada

Siga estas etapas para conceder permissões do Microsoft API do Graph à sua identidade gerenciada.

  1. Conectar-se ao Microsoft Entra

    Para conceder permissões de API a identidades gerenciadas, conecte-se usando os escopos Application.ReadWrite.All e AppRoleAssignment.ReadWrite.All:

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

    Caution

    A AppRoleAssignment.ReadWrite.All permissão permite que um aplicativo ou serviço gerencie concessões de permissão e eleve privilégios para qualquer aplicativo, usuário ou grupo em sua organização. Conceda essa permissão somente a administradores confiáveis.

  2. Identificar a entidade de serviço de identidade gerenciada

    Localize a entidade de serviço que representa sua identidade gerenciada no Microsoft Entra ID.

    Para identidades gerenciadas atribuídas pelo sistema, use o nome do 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

    Se o filtro retornar vários resultados (por exemplo, quando várias identidades gerenciadas compartilharem o mesmo nome de exibição), use a ID do objeto para identificar a entidade de serviço correta: Get-EntraServicePrincipal -ServicePrincipalId '<object-id>'.

    Para identidades gerenciadas atribuídas pelo usuário, use o nome da identidade gerenciada:

    $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. Obter a entidade de serviço do Microsoft Graph

    Recupere a entidade de serviço do Microsoft Graph:

    $graphServicePrincipal = Get-EntraServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
    
  4. Identificar as permissões de API necessárias

    Localize as permissões de Microsoft Graph específicas que sua identidade gerenciada exige:

    $appRole = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }
    
  5. Conceder permissões de API à identidade gerenciada

    Conceda a permissão de API à sua identidade gerenciada:

    $params = @{
        ServicePrincipalId = $managedIdentitySP.Id
        PrincipalId = $managedIdentitySP.Id
        ResourceId = $graphServicePrincipal.Id
        AppRoleId = $appRole.Id
    }
    
    $appRoleAssignment = New-EntraServicePrincipalAppRoleAssignment @params
    
  6. Verificar as permissões concedidas

    Confirme se as permissões foram concedidas com êxito:

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

Revogar permissões de API de uma identidade gerenciada

Siga estas etapas para revogar as permissões do Microsoft API do Graph de sua identidade gerenciada.

  1. Identificar a permissão para remover

    Localize a atribuição de função de aplicativo específica para revogar:

    $assignmentToRemove = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id |
        Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceId -eq $graphServicePrincipal.Id }
    
  2. Remova a atribuição de função de aplicativo

    Exclua a atribuição de função de aplicativo usando sua ID:

    if ($assignmentToRemove) {
        Remove-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id -AppRoleAssignmentId $assignmentToRemove.Id
        Write-Host "Successfully removed permission: $($appRole.Value)"
    }
    
  3. Verificar se a permissão foi removida

    Verifique se não há atribuições associadas à permissão revogada:

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