Erteilen und Widerrufen von API-Berechtigungen für verwaltete Identitäten

Verwaltete Identitäten stellen eine automatisch verwaltete Identität in Microsoft Entra-ID für Anwendungen bereit, die beim Herstellen einer Verbindung mit Ressourcen verwendet werden, die die Microsoft Entra-Authentifizierung unterstützen. Sie können API-Berechtigungen direkt dem Dienstprinzipal einer verwalteten Identität erteilen, sodass keine Anmeldeinformationen in Code- oder Konfigurationsdateien gespeichert werden müssen.

In diesem Artikel erfahren Sie, wie Sie Microsoft Graph-API Berechtigungen sowohl für vom System zugewiesene als auch für vom Benutzer zugewiesene verwaltete Identitäten mithilfe von Microsoft Entra PowerShell erteilen und widerrufen.

Voraussetzungen

Erteilen von API-Berechtigungen für eine verwaltete Identität

Führen Sie die folgenden Schritte aus, um Microsoft Graph-API Berechtigungen für Ihre verwaltete Identität zu erteilen.

  1. Herstellen einer Verbindung mit Microsoft Entra

    Um API-Berechtigungen für verwaltete Identitäten zu gewähren, stellen Sie mit den Bereichen Application.ReadWrite.All und AppRoleAssignment.ReadWrite.All eine Verbindung her:

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

    Caution

    Mit der AppRoleAssignment.ReadWrite.All Berechtigung kann eine App oder ein Dienst Berechtigungserteilungen verwalten und Berechtigungen für alle Apps, Benutzer oder Gruppen in Ihrer Organisation erhöhen. Erteilen Sie diese Berechtigung nur an vertrauenswürdige Administratoren.

  2. Dienstprinzipal der verwalteten Identität identifizieren

    Suchen Sie den Dienstprinzipal, der Ihre verwaltete Identität in Microsoft Entra ID darstellt.

    Verwenden Sie für vom System zugewiesene verwaltete Identitäten den Azure Ressourcennamen:

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

    Hinweis

    Wenn der Filter mehrere Ergebnisse zurückgibt (z. B. wenn mehrere verwaltete Identitäten denselben Anzeigenamen aufweisen), verwenden Sie die Objekt-ID, um den richtigen Dienstprinzipal zu identifizieren: Get-EntraServicePrincipal -ServicePrincipalId '<object-id>'

    Verwenden Sie für vom Benutzer zugewiesene verwaltete Identitäten den Namen der verwalteten Identität:

    $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. Rufen Sie den Microsoft Graph-Dienstprinzipal ab

    Rufen Sie das Microsoft Graph-Dienstprinzipalobjekt ab:

    $graphServicePrincipal = Get-EntraServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
    
  4. Identifizieren der erforderlichen API-Berechtigungen

    Ermitteln Sie die spezifischen Microsoft Graph Berechtigungen, die Ihre verwaltete Identität erfordert:

    $appRole = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }
    
  5. Erteilen von API-Berechtigungen für die verwaltete Identität

    Erteilen Sie Ihrer verwalteten Identität die Berechtigung für die API:

    $params = @{
        ServicePrincipalId = $managedIdentitySP.Id
        PrincipalId = $managedIdentitySP.Id
        ResourceId = $graphServicePrincipal.Id
        AppRoleId = $appRole.Id
    }
    
    $appRoleAssignment = New-EntraServicePrincipalAppRoleAssignment @params
    
  6. Überprüfen der erteilten Berechtigungen

    Vergewissern Sie sich, dass die Berechtigungen erfolgreich erteilt wurden:

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

Widerrufen von API-Berechtigungen aus einer verwalteten Identität

Führen Sie die folgenden Schritte aus, um Microsoft Graph-API Berechtigungen von Ihrer verwalteten Identität zu widerrufen.

  1. Identifizieren der Berechtigung zum Entfernen

    Suchen Sie die spezifische App-Rollenzuweisung, die Sie widerrufen möchten:

    $assignmentToRemove = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id |
        Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceId -eq $graphServicePrincipal.Id }
    
  2. Entfernen der App-Rollenzuweisung

    Löschen Sie die App-Rollenzuweisung mithilfe ihrer ID:

    if ($assignmentToRemove) {
        Remove-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id -AppRoleAssignmentId $assignmentToRemove.Id
        Write-Host "Successfully removed permission: $($appRole.Value)"
    }
    
  3. Überprüfen, ob die Berechtigung entfernt wurde

    Vergewissern Sie sich, dass keine Zuordnungen für die widerrufene Berechtigung verbleiben:

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